Matteo Pignatelli
a- a+

Condizioni metereologiche

Per questo tutorial è necessario conoscere xml e saper prendere le informazioni da un xml (ci sono molti tutorial su questo).

Il PHP

Per questo swf si ha bisogno del PHP.Flash non può caricare dati da domini esterni a dove risiede il movie, ovviamente per ragioni di sicurezza. Ma ad ogni problema c'è quasi sempre una soluzione e in questo caso si chiama PHP (o ASP o altro).
Lo script PHP funge da proxy facendo da tramite tra il nostro movie e l'xml residente in un altro server, infatti l'swf non si farà dei problemi a caricare i dati dal PHP.
Lo script PHP non farà altro che riversarci tutto l'xml quindi richiamando il file PHP (che deve risiedere nel nostro dominio) equivale a richiamare l'xml residente nell'altro dominio.

<?php
$citta_encode=urlencode($citta);
$dataURL = "http://weather.interceptvector.com/weather.xml?&state=ITA&celsius=true&city=$citta_encode";
readfile($dataURL);
?>

Questo è lo script PHP che come ho già detto fa un unica operazione semplice ma efficace. In questo caso dobbiamo passargli la variabile $citta , e lo faremo tramite lo script presente in flash.

IL FLASH

Prima di studiare lo script dobbiamo creare nel primo frame un mc di nome "icona" contenente in ordine tutte le gif delle condizioni metereologiche (mi raccomando usate lo stesso ordine...ossia nel primo frame mettete la prima img, nel secondo mettete la seconda img e così via ed in ogni frame mettete uno stop() ), ed infine un campo di testo associato alla variabile "testo" con la casella "Render Text ad HTML" spuntata. Ora siamo pronti per studiare l'actionscript a pezzi:

System.useCodePage = true;
weather=new LoadVars();
weather = new XML();
weather.ignoreWhite = true;
citta="rome"; // qua selezionate la città che volete (la lista delle città la trovate qua http://weather.interceptvector.com/list.php?&stateId=ITA )
weather.load("http://www.tuodominio.it/tempo.php?citta=" +citta,weather,"POST");
info=new Array();
icona._visible=false;
testo="Caricamento Meteo...";

Come potete vedere queste poche righe inizializzano il caricamento del PHP (che ci restituirà un documento xml contenente le condizioni metereologiche) e alcune variabili. La riga più importante è quella contenente il load() che passa la variabile "citta" al PHP e ne riceve l'XML corrispondente. Ora passiamo alla parte del parsing dell'xml:

weather.onLoad = function(success) {
if (success) {
for (a=0; a<weather.childNodes.length; a++) {
tag_weather = weather.childNodes[a];
for (b=0; b<tag_weather.childNodes.length; b++) {
tag_wind = tag_weather.childNodes[b];
tag_wind_nome=tag_wind.nodeName;
tag_wind_valore=tag_wind.firstChild.nodeValue;
if (tag_wind_nome=="temp" & tag_wind_valore!=null) info.push("<b>Temperatura:</b> " +tag_wind_valore+ "°C");
if (tag_wind_nome=="barometer" & tag_wind_valore!=null) info.push("<b>Barometro:</b> " +tag_wind_valore+ " Bar");
if (tag_wind_nome=="humidity" & tag_wind_valore!=null) info.push("<b>Umidità:</b> " +tag_wind_valore+ "%");
if (tag_wind_nome=="realtemp" & tag_wind_valore!=null) info.push("<b>Temperatura Reale:</b> " +tag_wind_valore+ "°C");
if (tag_wind_nome=="visibility" & tag_wind_valore!=null) info.push("<b>Visibilità:</b> " +tag_wind_valore);
if (tag_wind_nome=="wid") {
icona._visible=true;
if (tag_wind_valore==1 || tag_wind_valore==23 || tag_wind_valore==24) icona.gotoAndStop(1);
if (tag_wind_valore==3 || tag_wind_valore==4 || tag_wind_valore==17 || tag_wind_valore==35 || tag_wind_valore==37 || tag_wind_valore==38) icona.gotoAndStop(2);
if (tag_wind_valore==5) icona.gotoAndStop(3);
if (tag_wind_valore==6 || tag_wind_valore==9 || tag_wind_valore==11) icona.gotoAndStop(4);
if (tag_wind_valore==18 || tag_wind_valore==39 || tag_wind_valore==40) icona.gotoAndStop(5);
if (tag_wind_valore==7 || tag_wind_valore==8 || tag_wind_valore==10) icona.gotoAndStop(6);
if (tag_wind_valore==12) icona.gotoAndStop(7);
if (tag_wind_valore==13) icona.gotoAndStop(8);
if (tag_wind_valore==14) icona.gotoAndStop(9);
if (tag_wind_valore==15 || tag_wind_valore==16 || tag_wind_valore==41 || tag_wind_valore==42) icona.gotoAndStop(10);
if (tag_wind_valore==43) icona.gotoAndStop(11);
if (tag_wind_valore==19) icona.gotoAndStop(12);
if (tag_wind_valore==20) icona.gotoAndStop(13);
if (tag_wind_valore==21) icona.gotoAndStop(14);
if (tag_wind_valore==22) icona.gotoAndStop(15);
if (tag_wind_valore==25) icona.gotoAndStop(16);
if (tag_wind_valore==26) icona.gotoAndStop(17);
if (tag_wind_valore==27 || tag_wind_valore==28) icona.gotoAndStop(18);
if (tag_wind_valore==29 || tag_wind_valore==30 || tag_wind_valore==44) icona.gotoAndStop(19);
if (tag_wind_valore==31 || tag_wind_valore==32) icona.gotoAndStop(20);
if (tag_wind_valore==33 || tag_wind_valore==34) icona.gotoAndStop(21);
if (tag_wind_valore==36) icona.gotoAndStop(22);
}
if (tag_wind_nome=="sky" & tag_wind_valore!=null) info.push("<b>Tempo:</b> " +tag_wind_valore);
}
}


Ovviamente lo script lo capirete solo dopo aver visto degli esempi di xml. Questo codice preleva solo le informazioni più importanti, come ad esempio la temperatura, umidità,ecc... Lo script fondalmentalmente preleva le informazioni dall'xml riversandole in un array che sarà composto da un numero non definito di elementi, infatti se ad esempio il tag <realtemp> non è definito, questo non verrà aggiunto nell'array.
Quella serie di if che vedete servono per trovare la corrispondenza tra il wid e il frame contenente tutte le gif (mc "icona").
Ora in poche parole abbiamo un array contenente tutte le info che ci servivano e quindi possiamo visualizzarle a video:

_root.testo=info[0];
i=1;
visualizza = function() {
_root.testo=info[i];
if (i<(info.length-1)) i++; else i=0;
}
setInterval(visualizza,2000);
}
stop();
};

Questa ultima parte di codice non fa altro che scorrere l'array e riversare il suo contenuto nel campo di testo di nome "testo" ogni 2 secondi.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Lorenzo
Hai qualche domanda da fare?