This is a discussion on Flash CS3 e Yahoo Weather within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Salve a tutti !
Abbiamo visto come caricare un file XML esterno con Actionscript 3.0 e abbiamo visto come lavorare ...
Salve a tutti !
Abbiamo visto come caricare un file XML esterno con Actionscript 3.0 e abbiamo visto come lavorare con un RSS e Flash CS3 per creare una slide di titoli.
Oggi vediamo come utilizzare il servizio che Yahoo mette a disposizione per recuperare i dati riguardo il meteo di ogni città del mondo.
Tale servizio, che si chiama Yahoo Weather, non fa altro che mettere a disposizione un RSS ( che non è altro che un file XML ) .
In sostanza:
si chiama uno script su dominio Yahoo passandogli un id di una città ed un valore ' c ' ( che sta per centigradi ) oppure ' f ' ( che sta per fahrenheit ) e Yahoo restituisce un XML coi valori meteo della città.
Vediamo come fare...*
Creo un FLA che salvo con nome ' main.fla ' .
Al suo interno ho 4 livelli, dal più alto al più basso:
- code, in cui inserisco il codice che vedremo
- testo, ho un campo di testo dinamico con nome ' title_txt '
- logo, in cui ho una MovieClip che contiene il logo di Yahoo con nome ' yahoo_mc '
- area, in cui ho un componente TextArea che chiamo ' info_ta '
Sul keyframe del livello code, scrivo:
Code:
var location_id:String='ITXX0148';
var grades:String='c';
var url:String='http://weather.yahooapis.com/forecastrss?p='+location_id+'&u='+grades;
var richiesta:URLRequest=new URLRequest();
var loader:URLLoader;
richiesta.url=url;
richiesta.method=URLRequestMethod.GET;
loader=new URLLoader();
addListeners(loader);
try
{
loader.load(richiesta);
}
catch (error:Error)
{
trace('Unable to load requested document.');
}
function addListeners(d:IEventDispatcher):void
{
d.addEventListener(Event.COMPLETE,completato);
}
function completato(evt:Event):void
{
var vars:URLVariables=new URLVariables(evt.target.data);
var r:XML=new XML(evt.target.data);
var myXML:XMLDocument=new XMLDocument();
myXML.ignoreWhite=true;
myXML.parseXML(r.toXMLString());
var node:XMLNode=myXML.firstChild.firstChild;
title_txt.text=node.firstChild.firstChild.nodeValue;
var n:int=int(node.childNodes.length);
for(var i:int=0;i < n;i++)
{
if(node.childNodes[i].nodeName=='item')
{
var s:int=int(node.childNodes[i].childNodes.length);
for(var j:int=0;j < s;j++)
{
if(node.childNodes[i].childNodes[j].nodeName=='description')
info_ta.htmlText=node.childNodes[i].childNodes[j].firstChild.nodeValue;
}
}
}
}
yahoo_mc.buttonMode=true;
yahoo_mc.addEventListener(MouseEvent.CLICK,go);
function go(evt:MouseEvent):void
{
var request:URLRequest=new URLRequest('http://weather.yahoo.com/');
navigateToURL(request,'_blank');
}
Risultato:
Analizziamo il codice
una variabile di tipo stringa in cui inserisco il valore della città interessata. Per scoprire l' id di una città potete farlo direttamente dal sito di Yahoo Weather
var location_id:String='ITXX0148';
una variabile di tipo stringa in cui inserisco ' c ' oppure ' f ' in base all' unità di misura che voglio utilizzare
var grades:String='c';
una variabile di tipo stringa in cui inserisco l' url dello script Yahoo da chiamare + il pasaggio delle due variabili location_id e grades
var url:String='http://weather.yahooapis.com/forecastrss?p='+location_id+'&u='+grades;
una variabile di tipo URLRequest per fare richiesta di url a Flash
var richiesta:URLRequest=new URLRequest();
un URLLoader per chiamare lo script lato server e recuprare i valori che resituisce
var loader:URLLoader;
faccio richiesta di url a Flash
richiesta.url=url;
imposto la richiesta di tipo GET ( il servizio Yahoo richiede necessariamente una chiamata GET )
richiesta.method=URLRequestMethod.GET;
istanzio l' URLLoader
loader=new URLLoader();
chiamo la funzione addListeners
addListeners(loader);
chiamo lo script
try
{
loader.load(richiesta);
}
catch (error:Error)
{
trace('Unable to load requested document.');
}
aggiungo un listener in ascolto dell' evento COMPLETE che chiamerà la funzione ' completato 'in modo da poter ecuperare i valori della chiamata allo script
function addListeners(d:IEventDispatcher):void
{
d.addEventListener(Event.COMPLETE,completato);
}
In questa funzione applico una logica per andare a recuperare i dati dell' XML che Yahoo mi ha restituito. Dato che la mole di dati e informazioni sul meteo offre molte opzioni, ho scelto di prenderne solo un paio. per chi fosse interessato a recuperare altri o anche tutti i valori dell' XML, può studiarsi il formato dell' XML al seguente link: http://developer.yahoo.com/weather/
function completato(evt:Event):void
{
var vars:URLVariables=new URLVariables(evt.target.data);
var r:XML=new XML(evt.target.data);
var myXML:XMLDocument=new XMLDocument();
myXML.ignoreWhite=true;
myXML.parseXML(r.toXMLString());
var node:XMLNode=myXML.firstChild.firstChild;
title_txt.text=node.firstChild.firstChild.nodeValu e;
var n:int=int(node.childNodes.length);
for(var i:int=0;i < n;i++)
{
if(node.childNodes[i].nodeName=='item')
{
var s:int=int(node.childNodes[i].childNodes.length);
for(var j:int=0;j < s;j++)
{
quì assegno i dati che mi servono in formato html al componente TextArea utilizzando la sua proprietà htmlText
if(node.childNodes[i].childNodes[j].nodeName=='description')
info_ta.htmlText=node.childNodes[i].childNodes[j].firstChild.nodeValue;
}
}
}
}
Questa è semplicemente la logica che gestisce il click sul logo Yahoo
yahoo_mc.buttonMode=true;
yahoo_mc.addEventListener(MouseEvent.CLICK,go);
function go(evt:MouseEvent):void
{
var request:URLRequest=new URLRequest('http://weather.yahoo.com/');
navigateToURL(request,'_blank');
}
Stay tuned !