Opprett en værtilstandsplugin ved hjelp av Yahoo og SimpleXML

I denne opplæringen lærer du hvordan du lager en enkel plugin som bruker PHPs innebygde SimpleXML-bibliotek for å få tilgang til Yahoo! Værservice. De nåværende værforholdene vil bli vist med enten en kortkode eller et malermerke.


Yahoo! Vær

Yahoo! gir en gratis RSS / XML vær-feed som returnerer gjeldende forhold (og prognose) data for et gitt sted. Her er feed url for London, GB:

Yahoo! Vær

Du ser noe slikt:

Se kilden til den siden, og du vil finne en gullgruve av værdata i XML-format. Vi kan analysere disse dataene ved hjelp av PHPs SimpleXML-bibliotek, pakke ut det vi trenger, og vise det i våre WordPress-innlegg, sider og malfiler.

WOEIDs

Yahoo! bruker WOEIDs til unikt å identifisere geografiske enheter som byer, samt spesifikke severdigheter som Disneyland og Eiffeltårnet. Spørre Yahoo! Værservice ved hjelp av WOEIDs er ekstremt nøyaktig siden hvert sted har en unik vev. For eksempel er det 36 steder som heter Paris i verden, men hver har en unik vev.

Du kan bruke denne WOEID-oppslagstjenesten for å finne et nøyaktig stedskamp.

I ovennevnte URL er de to parametrene w for WOEID og u for temperatur skala (Celsius eller Fahrenheit). Vi bruker begge i vår plugin.


Trinn 1 Sett opp pluggen

WordPress-plugin-mappen er plassert i WordPress-installasjonsmappen din på wp-innhold / tillegg. Opprett en mappe i plugin-mappen. La oss kalle det get-strøm-vær. Nå lager du selve pluginfilen. La oss kalle det get_current_weather.php Banen til pluginfilen din bør nå være: wp-content / plugins / få-current-vær / get_current_weather.php

Hver WordPress-plugin trenger litt headerinformasjon, slik at WordPress kan identifisere det og gjøre det tilgjengelig på oversiktspanelet for dashbordet. Plasser denne koden øverst i pluginfilen din og lagre den.

  

Du kan redigere denne informasjonen i henhold til dine egne krav.

Nå, gå til WordPress-dashbordet ditt og velg Plugins-menyen. Du får se pluginet som er oppført som dette:

Ikke aktiver det enda.


Trinn 2 Kortkode og Mal tag

WordPress-kortkoder lar deg plassere pluginutgang i dine innlegg og sider. Template-tagger lar deg plassere pluginutgang i dine malfiler (topptekst, bunntekst, sidebar, etc.) Vi må definere to funksjoner i plugin-modulen, en for kortnummeret og en for mal-taggen. Begge vil returnere de samme værdataene.

Malemerken

Malen tagget vil bli brukt som: get_current_weather_template_tag (woeid, tempscale), hvor uheldig er VEJEN for et sted og tempscale er temperaturskalaen kreves, Celsius eller Fahrenheit. Så, for å få værdataene til London, GB i grader Celsius, ville vi bruke malemerken get_current_weather_template_tag ('44418', 'c').

Plasser følgende kode i pluginfilen din:

 funksjon get_current_weather_template_tag ($ woeid = ", $ tempscale = 'c') echo get_current_weather_display ($ woeid, $ tempscale);

Denne funksjonen aksepterer WOEID og tempscale. Du vil legge merke til at tempscale har en standardparameter for c, bare hvis den ikke er definert og for enkelhets skyld. Funksjonen ekko et anrop til en annen funksjon get_current_weather_display som vil gi oss de formaterte værdataene.

Kortnummeret

Kortnummeret returnerer de samme formaterte værdataene som mal-taggen, med litt mer arbeid. WordPress-kortnummeret vil bli brukt i innlegg og sider som dette: [get_current weather woeid = "tempscale ="]. Så, for å få værdataene til London, GB i grader Celsius, ville vi bruke kortnummeret [get_current_weather woeid = '44418' tempscale = 'c'). Fordi vi bruker en kortkode, må vi fortelle WordPress om det. For å gjøre det bruker vi WordPress-funksjonen add_shortcode.

Plasser følgende kode i pluginfilen din:

 add_shortcode ('get_current_weather', 'get_current_weather_shortcode');

Den første parameteren get_current_weather definerer navnet på kortnummeret vi vil bruke i våre innlegg og sider. Den andre parameteren get_current_weather_shortcode er navnet på funksjonen som kalles av kortnummeret.

Her er funksjonen kalt av get_current_weather. Plasser følgende kode i pluginfilen din:

 Funksjonen get_current_weather_shortcode ($ atts) $ args = shortcode_atts (array ('woeid' => ',' tempscale '=>' c ' ] == 'c')? 'c': 'f'; returner get_current_weather_display ($ args ['woeid'], $ args ['tempscale']);

Kortnummerfunksjonen forklart

Vår shortcode-funksjon get_current_weather_shortcode aksepterer shortcode attributter som finnes i $ att array. Disse egenskapene bør være vår WOEID og tempscale. Men hva om de ikke er? Shortcode API gir oss en måte å angi standardverdier for disse forventede attributter, the shortcode_atts funksjon.

Shortcode_atts tar to argumenter. Den første er en rekke navn => verdipar. Navnet er det forventede shortcode-attributtet, og verdien er standardverdien. Hvis navnet ikke er tilstede i $ atts, blir det opprettet med standardverdien. Dette gjør at vi kan sørge for at vår funksjon har de riktige attributene med standardinnstillinger.

Men hva om i stedet for c eller f, ble en annen verdi gjennomført for tempscale? Det er der neste uttalelse kommer inn i spill.

 $ args ['tempscale'] = ($ args ['tempscale'] == 'c')? 'c': 'f';

Denne erklæringen er vår garanti for at enten c eller f er brukt til tempscale. Den bruker PHP ternær operatør og er funksjonelt likestilt til:

 hvis ($ args ['tempscale'] == 'c') $ args ['tempscale'] = 'c';  ellers $ args ['tempscale'] = 'f'; 

Du kan bruke enten, men den ternære operatøren er mer elegant for dette formålet.

Endelig sendes argumentene til get_current_weather_display funksjon.


Trinn 3 Lysløfting

Her er get_current_weather_display funksjon som kalles av både shortcode og mal taggen.

Plasser følgende kode i pluginfilen din:

 funksjon get_current_weather_display ($ woeid, $ tempscale) $ weather_panel = '
'; hvis ($ vær = get_current_weather_data ($ woeid, $ tempscale)) $ weather_panel. = ''. $ vær ['by']. ''; $ weather_panel. = ''. $ vær ['temp']. 'я'. strtoupper ($ tempscale). ''; $ weather_panel. = ''; $ weather_panel. = ''. $ vær ['vilkår']. ''; ellers // ingen værdata $ weather_panel. = 'Ingen værinformasjon!'; $ weather_panel. = '
'; returner $ weather_panel;

Denne funksjonen er egentlig bare for formatering av værdata returnert fra get_current_weather_data (Trinn 4). Hvis ingen værdata returneres, "No Weather Data!" meldingen returneres.


Trinn 4 Heavy Lifting

Her er get_current_weather_data funksjon som kalles av get_current_ weather_display fungere i trinn 3

Plasser følgende kode i pluginfilen din:

 funksjon get_current_weather_data ($ woeid, $ tempscale) $ query_url = 'http://weather.yahooapis.com/forecastrss?w='. $ tøff. '& u ='. $ Tempscale; hvis ($ xml = simplexml_load_file ($ query_url)) $ error = strpos (strtolower ($ xml-> kanal-> beskrivelse), 'feil'); // serverrespons men ingen værdata for woeid else $ error = TRUE; // ingen respons fra værserveren hvis (! $ Feil) $ vær ['city'] = $ xml-> kanal-> barn ('yweather', SANT) -> plassering-> attributter by; $ vær ['temp'] = $ xml-> kanal-> element-> barn ('yweather', TRUE) -> betingelse-> attributter () -> temp; $ vær ['conditions'] = $ xml-> channel-> item-> barn ('yweather', TRUE) -> condition-> attributes () -> text; $ description = $ xml-> channel-> item-> beskrivelse; $ imgpattern = '/src="(.*?)"/i'; preg_match ($ imgpattern, $ description, $ matches); $ vær ['icon_url'] = $ kamper [1]; returnere $ vær;  returnere 0; 

Kontakt Yahoo! Vær og sjekke svaret

De get_current_weather_data funksjonen bruker SimpleXML for å spørre Yahoo! værservice ved hjelp av den givne WOEID og tempscale. Hvis det er en feil, returnerer vi 0.

SimpleXML tillater oss å få tilgang til xml-elementer på en objektorientert måte. Første gang vi trenger å gjøre dette, er å sjekke om vi har en feil i vårt svar.

 hvis ($ xml = simplexml_load_file ($ query_url)) $ error = strpos (strtolower ($ xml-> kanal-> beskrivelse), 'feil'); // serverrespons men ingen værdata for woeid else $ error = SANT; // ingen respons fra værserveren

Denne if-else-blokken forsøker å laste svaret fra $ query_url til $ xml ved hjelp av SimpleXML-metoden simplexml_load_file.

Hvis vi får svar, kontrollerer vi kanal-> beskrivelse feltet av den returnerte xml for strengen "feil". For eksempel, prøv følgende nettadresse som vil returnere en feil. Se kilden for å se kanal-> beskrivelse felt som inneholder strengen "feil".

Yahoo! Vær - Feil side

Hvis vi ikke får svar (ellers), betyr det at det må være et problem å nå Yahoo! service og $ error er satt til SANT. Det tar seg av begge feilmuligheter: ugyldige data eller dårlig tilkobling.

Utpakking av værdata

Hvis det ikke ble funnet noen feil, kan vi trekke ut de aktuelle værdataene fra xml.

Først, la oss se på hvilke gode responsdata som ser ut:

    Yahoo! Vær - London, GB       Betingelser for London, GB kl. 03:49 BST 51.51 -0,13 http://us.rd.yahoo.com/dailynews/rss/weather/London__GB/*http://weather.yahoo.com/forecast/UKXX0085_c.html Tue, 16 Aug 2011 3:49 am BST   
Nåværende forhold:
Fair, 15 C

Prognose:
Tirsdag - Delvis skyet. Høy: 21 Lav: 13
Onsdag - Delvis skyet. Høy: 23 Lav: 14

Fullstendig prognose på Yahoo! Vær

(levert av Weather Channel)
]]>

La oss ta tak i byens verdi (London) som er lagret i kanal-> yweather: beliggenhet-> city Egenskap.

Legg merke til at RSS-overskriften for XML-responsen definerer to navneområder: yweather og geo. For å få byattributtet må vi få tilgang til yweather navneområde som barn av kanal. Det sanne argumentet til barn forteller SimpleXML det yweather er et element prefiks som i yweather: plassering.

 $ vær ['city'] = $ xml-> kanal-> barn ('yweather', TRUE) -> location-> attributes () -> city;

Ved hjelp av samme teknikk kan vi få verdiene for gjeldende temp og forhold (tekst):

 $ vær ['temp'] = $ xml-> kanal-> element-> barn ('yweather', TRUE) -> betingelse-> attributter () -> temp; $ vær ['conditions'] = $ xml-> channel-> item-> barn ('yweather', TRUE) -> condition-> attributes () -> text;

Få URL-ikonet for Weather Icon

De kanal-> element-> beskrivelse elementet inneholder HTML vedlagt i CDATA-koder. Vi kan ikke få tilgang til HTML-kodene og attributter direkte ved hjelp av SimpleXML, så først får vi beskrivelsesdataene:

 $ description = $ xml-> channel-> item-> beskrivelse;

Da bruker vi preg_match og et vanlig uttrykk for å pakke ut alt mellom src =" og " fra img-taggen.

 $ imgpattern = '/src="(.*?)"/i'; preg_match ($ imgpattern, $ description, $ matches); $ vær ['icon_url'] = $ kamper [1];

Vi har alle værdata vi kom for, så vi kan returnere den til get_current_weather_display Funksjon for formatering som i trinn 3.


Trinn 5 Aktiver og test

Aktiver pluginet i ditt WordPress dashboard. Opprett et nytt innlegg eller en side og sett inn kortnummeret [get_current_weather woeid = '44418' tempscale = 'c'] inn i innholdsområdet. Se posten eller siden, og du bør se værforholdene for London.

Nå skal vi teste mal-taggen. Åpne footer.php filen i temaets mappe på nettstedet ditt. Legg til maltekoden get_current_weather_template_tag ('44418', 'c') like etter

stikkord. Oppdater siden din, og du bør se værforholdene for London i bunnteksten.


Ytterligere

Gjør det pent

La oss legge til et lite CSS til style.css filen i temamappen din.

 .gcw_weather_panel bakgrunnsfarge: # B1E7FB; grense: 1px solid # 4BCBFA; polstring: 10px; bredde: 180px;  .gcw_weather_panel * margin: 0 auto; tekst-align: center; skjerm: blokk; 

Ditt værutdata bør nå se slik ut:

Så mange som du liker

Fordi hver kortkode eller mal tagger utdataer diskrete data, kan du få så mange forskjellige værutdata som du vil, og alt på samme side.

Gå for det!

Hvis du ser på xml som er returnert fra Yahoo!, Vil du legge merke til at vi har brukt svært lite av de tilgjengelige dataene. Det er mange andre felt og attributter, inkludert prognosedata. En umiddelbar forbedring å gjøre ville være å vise regionen og landet til byen du viser. Du kan også vise fuktighet, vindhastighet og mye mer.

Ha det gøy!


nyttige lenker

  • Yahoo! Vær
  • SimpleXML
  • VILT Oppsøkingsservice
  • Skrive et WordPress-plugin
  • WordPress-kortkoder
  • WordPress Template Tags