Build en Handy AS3 Været App med Yahoo API
8
Del
en
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
Med hjelp fra denne opplæringen vil du lære hvordan du bruker Yahoo Weather API for å hente og vise værmeldinger med AS3.
Endelig resultat Forhåndsvisning
La oss ta en titt på det endelige resultatet vi skal jobbe mot:
Trinn 1: Lag en ny fil
jeg antar du vil bruke Flash, men du kan gjøre dette med a. Flex eller standard AS3 Prosjekt
Åpne Flash, gå til fil > New, velg Flash-fil (Actionscript 3.0), og deretter sette størrelsen som 320x180px og lagre FLA hvor du vil
Trinn 2:. Opprett et dokument Class
Nå gå til Fil > Ny og denne gangen velger Action Fil, og deretter lagre den som Weather.as Gå til Actionscript-fil og skrive koden for dokumentet klasse: Test det og det bør spore" Dette er ditt vær klasse "i utgangsvinduet Kom deg av gårde til Yahoo Weather API delen av Yahoo utviklere nettstedet; der vil du finne noen forklaringer om Yahoo Weather API Det vi trenger å lese i Flash er en XML-fil, så vi trenger å vite hvordan du be om det, noe som er ganske enkel. Du må tenke på hvor plasseringen nummeret må være en WOEID. For å finne din WOEID, bla gjennom eller søke etter byen din fra Yahoo Weather hjemmesiden. Den WOEID er i nettadressen for prognosen side for den byen. Du kan også få WOEID ved å skrive inn ditt postnummer på hjemmesiden. For eksempel, hvis du søker etter Los Angeles på Vær hjemmesiden, prognosen siden for at byen er: http://weather.yahoo.com/united-states/california/los-angeles-2442047/, så WOEID er 2442047. Når du ber om all slags vær plassering, hva du får er XML som dette: (Hvis du ønsker å forstå alle For denne applikasjonen hva vi trenger er yweather. plassering nå som vi har en bedre forståelse av alt som XML, hva vi trenger å gjøre er å tildele data til variabler slik at vi kan bruke disse dataene til å sette opp vår søknad. Til det trenger vi å lage noen variabler og laste XML. Dette er hvordan du gjør det (setter inn koden i de aktuelle stedene i dokumentet klasse): La oss gå over at klump av kode Du trenger _xmlData den første funksjonen, LoadXML () laster XML-fil i Flash; vi bruker en hendelse lytteren å sjekke når den er ferdig, og deretter kjøre loadData () loadData () (For mer informasjon om analyse av XML i AS3, sjekk ut Dru Kepple er AS3. 101 - XML tutorial). nå må vi vise denne informasjonen. For å gjøre slik at vi kunne lage tekstfeltene i koden og tilordne et format og teksten, men jeg foretrekker å bruke Flash IDE, for å spare tid. Så vær kreativ, trenger vi åtte tekstfelt: temperatur, fuktighet, maksimal temp og minimum temp for den aktuelle dagen. Da trenger vi maksimal temp og minimum temp for neste dag, en for navnet på den neste dag og en mer som viser plasseringen. De trenger alle å være dynamisk Ikke glem å gi alle textfields forekomstnavn.; Jeg har valgt temp nå som vi har laget tekstfeltene, må vi tildele den informasjonen vi du gjenopprette fra XML. Til det trenger vi forekomstnavnet for hvert tekstfelt og info som vi allerede har, som dette (legge til din eksisterende loadData () Husk åtte tekstfelt som vi skapt? Nå må vi bruke disse navnene her i koden. Det slå akkurat nå har vi bare tekst; det ville være fint å legge noen ikoner avhengig av været for denne dagen. Så det vi trenger er å lage eller se etter et sett av vær ikoner og tilordne et ikon avhengig av været. Vi kan laste inn ett bilde fra Yahoo, men det er ikke så fint, så vi finner våre egne. For det, laste ned et sett med ikoner og importere dem til Flash, deretter eksportere hver for Action med en passende klasse navn: Ikonene jeg bruker er fra Garmahis og kan lastes ned fra garmahis.com. Stor takk til Garmahis for å la oss bruke dem Nå må vi laste den riktige ikonet avhengig av været kode som vi har i vår XML. Akkurat som navn på dager, kan vi gjøre dette med en virkelig stor switch ... men først må vi lage et filmklipp å inneholde ikonet Og nå ikonene: I dette tilfellet jeg bare brukt 13 ikoner, men du kan bruke mer hvis du vil, eller færre, det er opp til deg. Bare husk, Yahoo bruker 40-koder, så du må tildele dem alle til et ikon. Du kan se en liste over betydningene av alle kodene på developer.yahoo.com Vel, vi har dekket den harde delen; Nå la oss gjøre det ser fint. Hvis vi ønsker å legge til mer informasjon eller endre plasseringen vi trenger mer plass, så vil vi sette alt som vi har skapt i en filmklipp. For å gjøre det, bare velg det hele, trykk F8 (for å konvertere det til et symbol) og eksportere nytt symbol for Actionscript, med en klasse navn Front Nå la oss kalle dem fra vår Actionscript-fil: Vi har vår filmklipp, så nå må vi gjøre det snu. For å gjøre at vi kommer til å bruke Tweener biblioteket som du kan finne på http://code.google.com/p/tweener/. Last den ned, og trekke det slik at \\ caurina \\ mappe i samme mappe som FLA For dette prosjektet har vi tenkt å bruke bare en funksjon fra det. Vi vil gjøre det snu bruker Turnaround () Nå som vi har mer plass i ryggen kan vi legge til flere stater eller info eller hva du vil. Kort, vil jeg legge til flere steder. Det vi trenger å gjøre er å gå til Flash og trykk Ctrl + F7 (Windows) eller Kommando + F7 (Mac) for å avsløre Components panelet. Dra Combo Box til biblioteket, og deretter legge dette til dokumentet klassen. nå nyter din søknad, legge fancy ting og studiepoeng (ikke glem Yahoo!) nå har vi vår været program jeg håper du har lært mye, hvis du har noen spørsmål bare legge igjen en kommentar. jeg håper du likte denne opplæringen, takk for lesing!
i samme mappe hvor du har lagret din FLA-fil. Så gå tilbake til FLA, gå til Egenskaper og skrive navnet på Action filen i "klassen" plass. (For mer info om hvordan du bruker et dokument klasse, les denne rask innføring.)
Trinn 3: Sette opp Document Class
pakke {import flash.display.MovieClip; //Navnet på klassen må være den samme som filen public class Været strekker MovieClip {//Konstruktør: denne funksjonen må ha samme navn som filen og klasse offentlig funksjon Vær () {trace ( "Dette er ditt vær klasse "):}}}
Trinn 4:. Sjekk ut den Yahoo Weather API
Trinn 5:. be om XML
du vil vite været og i hvilken enhet plakater (Celsius eller Fahrenheit) du ønsker temperaturen. Deretter kan du få XML med disse dataene via denne nettadressen:
Var url: "w =" String = "http://weather.yahooapis.com/forecastrss" + + (lokasjonsnummer) + "& u = "+ (" c "for celcius eller" f "for fahrenheit);
Trinn 6: Få Location Number
Trinn 7: Forstå XML
< rss version = "2.0" xmlns: yweather = "http://xml.weather.yahoo.com/ns/rss/1.0" xmlns: geo = "http://www.w3.org/2003/01/geo/wgs84_pos#" > ≪ kanal > ≪ title > Yahoo! Vær - Los Angeles, CA < /title > <link>http://us.rd.yahoo.com/dailynews/rss/weather/Los_Angeles__CA/*http://weather.yahoo.com/forecast/USCA0638_c.html</link> ≪ beskrivelse > Yahoo! Været for Los Angeles, CA < /beskrivelse > ≪ language > en-us < /language > ≪ lastBuildDate > Man 1 mars 2 010 05:47 PST < /lastBuildDate > ≪ ttl > 60 < /ttl > ≪ yweather: byen = "Los Angeles" region = "CA" country = "United States" /> ≪ yweather: heter temperatur = "C" avstand = "km" trykk = "mb" speed = "km /t" /> ≪ yweather: vindavkjøling = "12" retning = "0" speed = "0" /> ≪ yweather: atmosfære luftfuktighet = "80" synlighet = "16.09" trykk = "1018,4" stigende = "1" /> ≪ yweather: astronomi soloppgang = "06:22" solnedgang = "05:49" /> ≪ bilde > ≪ title > Yahoo! Vær < /title > ≪ bredde > 142 < /bredde > ≪ høyde > 18 < /høyde > ≪ link > http: //weather.yahoo.com< /link > ≪ url > http: //l.yimg.com/a/i/us/nws/th/main_142b.gif< /url > ≪ /bilde > ≪ element > ≪ title > Betingelser for Los Angeles, CA 05:47 PST < /title > ≪ geo: lat > 34,05 < /geo: lat > <geo:long>-118.25</geo:long><link>http://us.rd.yahoo.com/dailynews/rss/weather/Los_Angeles__CA/*http://weather.yahoo.com/forecast/USCA0638_c.html</link> ≪ pubDate > man 1 mars 2 010 05:47 PST < /pubDate > ≪ yweather: tilstand text = "Fair" code = "33" temp = "12" date = "Mon, 01.03.2010 05:47 PST" /> ≪ beskrivelse > <! [CDATA [> ≪ img src="http://activetuts.s3.amazonaws.com/tuts/093_weather/Tutorial/http://l.yimg.com/a/i/us/we/52/33.gif"/><br /≫ ≪ b > Været nå: < /b > < br /> Fair, 12 C < BR /> ≪ BR /> < b > Cast: < /b > < BR /> Man - For det meste skyet. Høy: 20 Lav: 10 < br /> Tue - AM Clouds /PM Sun. Høy: 19 Lav: 9 < br /> ≪ br /> ≪ a href="http://us.rd.yahoo.com/dailynews/rss/weather/Los_Angeles__CA/*http://weather.yahoo.com/forecast/USCA0638_c.html">Full Prognosen på Yahoo! Weather < /a > < BR /> < BR /> (Gitt av < a href = "http://www.weather.com" > The Weather Channel < /a >) < br /> ]] ≫ < /beskrivelse > ≪ yweather: prognosen dag = "Man" date = "1 mar 2010" low = "10" high = "20" text = "Cloudy" code = "28" /> ≪ yweather: prognosen dag = "Ti" date = "2 mar 2010" low = "9" høy = "19" text = "AM Clouds /PM Sun" code = "30" /> ≪ guid isPermaLink = "false" > USCA0638_2010_03_01_5_47_PST < /guid > ≪ /element > ≪ /kanal > < /rss > <! - Api7.weather.re4.yahoo.com komprimert /du delvis man 1 mars 06:59:00 PST 2010 - >
XML, kan du gå http://developer.yahoo.com/weather/)
tag yweather: atmosfære
koden og yweather: værvarsel
tags: plasseringen koden vil gi oss teksten for plasseringen, vil atmosfæren tag gi oss fuktigheten og prognose kodene vil gi oss temperaturen for inneværende og neste dag
Trinn 8:. Analyser det
//Dette kommer til å inneholde alle data fra XMLprivate Var _xmlData: XML; //Dette kommer til å bli den url av XML som vi vil loadprivate Var _xmlURL: String; privat funksjon LoadXML (xmlURL: String): void {var loader: URLLoader = new URLLoader (); Var forespørsel: URLRequest = new URLRequest (_xmlURL); loader.load (forespørsel); loader.addEventListener (Event.COMPLETE, loadData);} private funksjon loadData (hendelse: Hendelse): void {_xmlData = ny XML (event.currentTarget.data); Var yweather: Navnerom = new Navnerom ( "http://xml.weather.yahoo.com/ns/rss/1.0"); Var dag. String = _xmlData.channel.item.yweather :: prognose [0] @ dagen; Var codeToday. String = _xmlData.channel.item.yweather :: prognose [0] @ kode; Var codeTomorrow. String = _xmlData.channel.item.yweather :: prognose [1] @ kode;}
. variabel for å bli definert utenfor alle funksjoner (jeg har definert det som en privat variabel) fordi du vil trenge for å få det overalt i koden, ikke bare innenfor en funksjon.
.
funksjon tilordner de mottatte data til _xmlData
variabel som vi allerede har opprettet. Vi bruker en navne fordi det er hvordan Yahoo besluttet å sette opp sin XML (du finner mer om navnerom på livedocs.adobe.com). De andre variablene i denne funksjonen trekke ut informasjon som vi ønsker å vise i vår app fra XML
Trinn 9: Lag tekstfelter
tekstfelt slik at vi kan tildele info
, luftfuktighet
, max
, min
, maxt
, mint
, i morgen Hotell og tilstand
Trinn 10:. Vise info
funksjon):
privat funksjon loadData (hendelse: Hendelse): void {_xmlData = ny XML (event.currentTarget.data); Var yweather: Navnerom = new Navnerom ( "http://xml.weather.yahoo.com/ns/rss/1.0"); Var dag. String = _xmlData.channel.item.yweather :: prognose [0] @ dagen; Var codeToday. String = _xmlData.channel.item.yweather :: prognose [0] @ kode; Var codeTomorrow. String = _xmlData.channel.item.yweather :: prognose [1] @ kode; //Tildeling informasjonen til tekstfeltene maxt.text = _xmlData.channel.item.yweather :: prognose [1] @ høy + "° F."; mint.text = _xmlData.channel.item.yweather :: prognose [1] @ lav + "° F."; state.text = _xmlData.channel.yweather :: plassering @ by.; . Humidity.text = _xmlData.channel.yweather :: atmosfære @ fuktighet + "%"; temp.text = _xmlData.channel.item.yweather :: tilstand @ temp + "° F."; max.text = _xmlData.channel.item.yweather :: prognose [0] @ høy + "° F."; min.text = _xmlData.channel.item.yweather :: prognose [0] @ lav + "° F."; bryteren (dag) {case "Sun": tomorrow.text = "mandag"; gå i stykker; case "man": tomorrow.text = "tirsdag"; gå i stykker; case "ti": tomorrow.text = "onsdag"; gå i stykker; case "Wed": tomorrow.text = "torsdag"; gå i stykker; case "to": tomorrow.text = "Fredag"; gå i stykker; case "Fri": tomorrow.text = "Lørdag"; gå i stykker; case "Sat": tomorrow.text = "Søndag" break; }}
uttalelsen er fordi vi ikke ønsker å vise bare "Tor", "to" eller "Fri", ønsker vi hele navnet
Trinn 11:. Legg til litt stil
Trinn 12: Legge ikonet
privat Var _weatherToday:. MovieClip = ny MovieClip, privat Var _weatherTomorrow: MovieClip = ny MovieClip; //under koden går i constructoraddChild (_weatherToday), addChild (_weatherTomorrow); _ weatherToday .x = -80; _weatherToday .Y = -40; _weatherTomorrow .x = 115; _weatherTomorrow .Y = -60;
//denne koden går i loadData () functionswitch (codeToday) {case "28": case "3200": case "30": case "44": var weather01: weather01 = new weather01 (); _weatherToday.addChild (weather01); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "32": case "34": var weather02: weather02 = new weather02 (); _weatherToday.addChild (weather02); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "24": case "25": var weather03: weather03 = new weather03 (); _weatherToday.addChild (weather03); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "0": case "1": case "2": case "22": case "36": case "42": case "43": var weather04: weather04 = new weather04 (); _weatherToday.addChild (weather04); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "19": case "20": case "21": case "23": case "26": var weather05: weather05 = new weather05 (); _weatherToday.addChild (weather05); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "41": case "46": var weather06: weather06 = new weather06 (); _weatherToday.addChild (weather06); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "3": case "4": case "37": case "38": case "39": case "45": case "47": var weather07: weather07 = new weather07 (); _weatherToday.addChild (weather07); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "31": case "33": var weather08: weather08 = new weather08 (); _weatherToday.addChild (weather08); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "27": case "29": var weather09: weather09 = new weather09 (); _weatherToday.addChild (weather09); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "5": case "6": case "7": case "35": var weather10: weather10 = new weather10 (); _weatherToday.addChild (weather10); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "8": case "10": case "13": case "14": case "15": case "16": case "17": case "18": var weather11: weather11 = new weather11 (); _weatherToday.addChild (weather11); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "9": case "11": case "12": var weather12: weather12 = new weather012 (); _weatherToday.addChild (weather12); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; gå i stykker; case "40": var weather13: weather13 = new weather13 (); _weatherToday.addChild (weather13); _weatherToday.scaleX = 0,7; _weatherToday.scaleY = 0,7; break;}
Trinn 13:. Legg en Flip Effect
. Deretter slette det fra scenen, opprette bakgrunnen, og konvertere dette til et filmklipp og eksportere den til Action også, med en klasse navn Tilbake
.
privat Var _front: Front, privat Var _back: Tilbake; //alt under koden går i Været () constructor_front = new Front (); this.addChild (_front); _ front.y = 100; _front. x = 160; _font.rotationY = 0; _front.btn.buttonMode = true; _front.btn.addEventListener (MouseEvent.CLICK, behandlingstid), _ front.addChild (_weatherToday); //dette kommer til å være bak så vi don ' t vil den skal være synlig ennå, og vi må sette rotasjonen til -180_back = new Tilbake (); _ back.y = 100; _back.x = 160; _back.back.buttonMode = true; _back.back.addEventListener ( MouseEvent.CLICK, behandlingstid); _ back.rotationY = -180; _back.visible = false; this.addChild (_back);
Trinn 14: Sett opp Tween
funksjonen for å se kul. Sett inn følgende kode i de aktuelle stedene i dokumentet klassen:
import caurina.transitions.Tweener, privat Var _currentFace: String; //vende ansiktene og deretter kaller funksjonen som endre rekkefølgen på ansiktene og fullføre animationprivate funksjon Turnaround (event: Mouseevent): void {Tweener.addTween (_back, {rotationY: -90, onComplete: changeIndex, tid: 0,5, overgang: "lineær"}); Tweener.addTween (_back, {Scaley: 0,6, scaleX: 0,6, tid: 0,3, overgang: "lineær"}); Tweener.addTween (_front, {Scaley: 0,6, scaleX: 0,6, tid: 0,3, overgang: "lineær"}); Tweener.addTween (_front, {rotationY: 90, tid: 0,5, overgang: "lineær"});} //vi bruker en String, _currentFace, så det kan vite hvilket ansikt er i frontprivate funksjon changeIndex (): void {if (_currentFace == "front") {this.setChildIndex (_front, 0); Tweener.addTween (_back, {rotationY: 0, tid: 0,5, overgang: "lineær"}); Tweener.addTween (_back, {Scaley: 1, scaleX: 1, tid: 0,6, overgang: "lineær"}); Tweener.addTween (_front, {rotationY: 180, tid: 0,5, overgang: "lineær"}); Tweener.addTween (_front, {Scaley: 1, scaleX: 1, tid: 0,6, overgang: "lineær"}); _currentFace = "tilbake"; _front.visible = false; _back.visible = true; } Else {this.setChildIndex (_back, 0); Tweener.addTween (_back, {rotationY: -180, tid: 0,5, overgang: "lineær"}); Tweener.addTween (_back, {Scaley: 1, scaleX: 1, tid: 0,6, overgang: "lineær"}); Tweener.addTween (_front, {rotationY: 0, tid: 0,5, overgang: "lineær"}); Tweener.addTween (_front, {Scaley: 1, scaleX: 1, tid: 0,6, overgang: "lineær"}); _currentFace = "front"; _front.visible = true; _back.visible = false; }}
Trinn 15: Legg Steder
Import flash.xml *; _ Combobox = new ComboBox (); //inne i konstruktøren //standard text_comboBox.prompt = "plasseringen Velg : "; //gjenta dette for hvert sted som du ønsker å legge //husk å få plasseringen URL fra Yahoo sitecomboBox.addItem ({Sted:" Mahtomedi ", url:" http://weather.yahooapis.com/forecastrss w = 2444293 &? u = c "}); //kaller funksjonen som gir verdi til ComboBox_comboBox.labelFunction = nameLabelFunction; _comboBox.width = 150; _comboBox.editable = false; //kaller funksjonen som kommer å endre data_comboBox.addEventListener (Event.CHANGE, changeLocation); privat funksjon nameLabelFunction (element: Object): String {var str: String; if (element == null) {str = _comboBox.value; } Else {str = item.Location; } Retur str;} //reaload dataene og overføre dataene på en applicationprivate funksjon changeProvince (hendelse: Hendelse): void {LoadXML (_comboBox.selectedItem.url);}
Trinn 16: Nyt
Konklusjon