Crea un plug-in delle condizioni meteorologiche usando Yahoo e SimpleXML

In questo tutorial imparerai come creare un semplice plug-in che utilizza la libreria SimpleXML integrata di PHP per accedere a Yahoo! Servizio meteorologico. Le condizioni meteo attuali verranno visualizzate con uno shortcode o un tag modello.


Yahoo! Tempo metereologico

Yahoo! fornisce un feed meteo RSS / XML gratuito che restituisce i dati delle condizioni correnti (e previsioni) per una determinata posizione. Ecco l'URL del feed per Londra, GB:

Yahoo! Tempo metereologico

Vedrai qualcosa di simile a questo:

Visualizza l'origine di quella pagina e troverai una miniera d'oro di dati meteo in formato XML. Possiamo analizzare questi dati usando la libreria SimpleXML di PHP, estraiamo ciò di cui abbiamo bisogno e mostriamolo nei nostri post, pagine e file modello di WordPress.

WOEIDs

Yahoo! utilizza WOEID per identificare in modo univoco entità geografiche come città e specifici punti di interesse come Disneyland e la Torre Eiffel. Interrogare Yahoo! il servizio meteorologico che utilizza WOEIDs è estremamente accurato poiché ogni posizione ha un WOEID univoco. Ad esempio, ci sono 36 posti di nome Parigi nel mondo, ma ognuno ha un WOEID unico.

È possibile utilizzare questo servizio di ricerca WOEID per trovare una corrispondenza esatta della posizione.

Nell'URL sopra riportato i due parametri utilizzati sono w per WOEID eu per scala di temperatura (Celsius o Fahrenheit). Li utilizzeremo entrambi nel nostro plugin.


Passaggio 1 Configurare il plug-in

La cartella del plugin WordPress si trova nella cartella di installazione di WordPress all'indirizzo wp-content / plugins. Crea una cartella all'interno della cartella dei plugin. Chiamiamolo get-corrente-tempo. Ora crea il file di plugin stesso. Chiamiamolo get_current_weather.php Il percorso del tuo file plugin dovrebbe ora essere: wp-content / plugins / get-corrente-tempo / get_current_weather.php

Ogni plugin WordPress necessita di alcune informazioni di intestazione, in modo che WordPress possa identificarlo e renderlo disponibile nella pagina del plug-in del dashboard. Inserisci questo codice nella parte superiore del tuo file di plugin e salvalo.

  

Puoi modificare queste informazioni secondo le tue esigenze.

Ora vai al tuo dashboard di WordPress e seleziona il menu Plugin. Vedrai il plugin elencato in questo modo:

Non attivarlo ancora.


Passaggio 2 Codice breve e tag modello

Gli shortcode di WordPress ti consentono di inserire l'output del plugin nei tuoi post e pagine. I tag modello ti consentono di inserire l'output del plugin nei tuoi file modello (intestazione, piè di pagina, barra laterale, ecc.) Abbiamo bisogno di definire due funzioni nel nostro plugin, una per lo shortcode e una per il tag del template. Entrambi restituiranno gli stessi dati meteorologici.

Il tag del modello

Il tag del modello sarà usato come: get_current_weather_template_tag (woeid, tempscale), dove woeid è il WOEID per un luogo e tempscale è la scala di temperatura richiesta, Celsius o Fahrenheit. Quindi, per ottenere i dati meteorologici per Londra, GB in gradi Celsius useremmo il tag del modello get_current_weather_template_tag ('44418', 'c').

Inserisci il seguente codice nel tuo file plugin:

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

Questa funzione accetta il WOEID e il tempscale. Noterai che la tempscale ha un parametro predefinito di c, nel caso in cui non sia definito e per comodità. La funzione richiama una chiamata a un'altra funzione get_current_weather_display che ci fornirà i dati meteo formattati.

Lo shortcode

Lo shortcode restituirà gli stessi dati meteo formattati del tag modello, con un po 'più di lavoro. Lo shortcode di WordPress verrà utilizzato in post e pagine come questo: [get_current weather woeid = "tempscale ="]. Quindi, per ottenere i dati meteo per Londra, GB in gradi Celsius useremmo lo shortcode [get_current_weather woeid = '44418' tempscale = 'c'). Poiché stiamo usando uno shortcode, dobbiamo dirlo a WordPress. Per farlo usiamo la funzione WordPress add_shortcode.

Inserisci il seguente codice nel tuo file plugin:

 add_shortcode ('get_current_weather', 'get_current_weather_shortcode');

Il primo parametro get_current_weather definisce il nome dello shortcode che useremo nei nostri post e pagine. Il secondo parametro get_current_weather_shortcode è il nome della funzione chiamata dallo shortcode.

Ecco la funzione chiamata da get_current_weather. Inserisci il seguente codice nel tuo file plugin:

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

Spiegazione della funzione Shortcode

La nostra funzione shortcode get_current_weather_shortcode accetta gli attributi shortcode contenuti in $ atts array. Questi attributi dovrebbero essere il nostro WOEID e il tempscale. Ma cosa succede se non lo sono? L'API shortcode ci fornisce un modo per fornire valori predefiniti per questi attributi attesi, il shortcode_atts funzione.

Shortcode_atts accetta due argomenti. Il primo è un array di nome => coppie di valori. Il nome è l'attributo shortcode previsto e il valore è il suo valore predefinito. Se il nome non è presente in $ atts, viene creato con il valore predefinito. Questo ci consente di assicurarci che la nostra funzione abbia gli attributi corretti con i valori predefiniti.

Ma cosa succede se invece di cof, passasse un altro valore per la tempscale? È qui che entra in gioco la prossima affermazione.

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

Questa affermazione è la nostra garanzia che c o f sia usato per il tempscale. Utilizza l'operatore ternario di PHP ed è funzionalmente equivalente a:

 if ($ args ['tempscale'] == 'c') $ args ['tempscale'] = 'c';  else $ args ['tempscale'] = 'f'; 

Potresti usare entrambi, ma l'operatore ternario è più elegante per questo scopo.

Infine, gli argomenti vengono passati al get_current_weather_display funzione.


Passo 3 Sollevamento leggero

Ecco il get_current_weather_display funzione chiamata sia dallo shortcode che dal tag del template.

Inserisci il seguente codice nel tuo file plugin:

 function get_current_weather_display ($ woeid, $ tempscale) $ weather_panel = '
'; if ($ weather = get_current_weather_data ($ woeid, $ tempscale)) $ weather_panel. = ''. $ weather ['city']. ''; $ weather_panel. = ''. $ weather ['temp']. 'я'. strtoupper ($ tempscale). ''; $ weather_panel. = ''; $ weather_panel. = ''. $ weather ['conditions']. ''; else // nessun dato meteorologico $ weather_panel. = 'Nessun dato meteorologico!'; $ weather_panel. = '
'; return $ weather_panel;

Questa funzione è in realtà solo per la formattazione dei dati meteo restituiti da get_current_weather_data (Passaggio 4). Se non vengono restituiti dati meteo, il "Nessun dato meteo!" messaggio viene restituito.


Step 4 Sollevamento pesante

Ecco il get_current_weather_data funzione che viene chiamata dal get_current_ weather_display funzione nel passaggio 3

Inserisci il seguente codice nel tuo file plugin:

 function get_current_weather_data ($ woeid, $ tempscale) $ query_url = 'http://weather.yahooapis.com/forecastrss?w='. $ woeid. '& u ='. $ Tempscale; if ($ xml = simplexml_load_file ($ query_url)) $ error = strpos (strtolower ($ xml-> channel-> description), 'error'); // risposta del server ma nessun dato meteo per woeid else $ error = TRUE; // nessuna risposta dal server meteorologico if (! $ Error) $ weather ['city'] = $ xml-> channel-> children ('yweather', TRUE) -> location-> attributes () -> città; $ weather ['temp'] = $ xml-> channel-> item-> children ('yweather', TRUE) -> condition-> attributes () -> temp; $ weather ['conditions'] = $ xml-> channel-> item-> children ('yweather', TRUE) -> condition-> attributes () -> text; $ description = $ xml-> channel-> item-> description; $ imgpattern = '/src="(.*?)"/i'; preg_match ($ imgpattern, $ description, $ matches); $ weather ['icon_url'] = $ corrisponde a [1]; ritorno $ tempo;  restituisce 0; 

Contattare Yahoo! Meteo e controllo della risposta

Il get_current_weather_data la funzione utilizza SimpleXML per interrogare Yahoo! servizio meteo utilizzando il WOEID e il tempscale. Se c'è un errore, restituiamo 0.

SimpleXML ci consente di accedere agli articoli xml in modo orientato agli oggetti. La prima volta che dobbiamo fare questo è controllare se abbiamo un errore nella nostra risposta.

 if ($ xml = simplexml_load_file ($ query_url)) $ error = strpos (strtolower ($ xml-> channel-> description), 'error'); // risposta del server ma nessun dato meteo per woeid else $ error = TRUE; // nessuna risposta dal server meteo

Questo blocco if-else tenta di caricare la risposta da $ query_url in $ xml utilizzando il metodo SimpleXML simplexml_load_file.

Se otteniamo una risposta, controlliamo il Canale-> Descrizione campo del xml restituito per la stringa "errore". Ad esempio, prova il seguente url che restituirà un errore. Visualizza la fonte per vedere il Canale-> Descrizione campo che contiene la stringa "errore".

Yahoo! Meteo - Pagina di errore

Se non otteniamo una risposta (il resto), significa che ci deve essere un problema nel raggiungere Yahoo! servizio e $ error è impostato su TRUE. Che si prende cura di entrambe le possibilità di errore: dati non validi o cattiva connessione.

Estrazione dei dati meteorologici

Se non sono stati trovati errori, possiamo estrarre i dati meteo rilevanti dal xml.

Innanzitutto, rivisitiamo quali sono i buoni dati di risposta:

    Yahoo! Tempo - Londra, GB       Condizioni per Londra, GB alle 3:49 am BST 51.51 -0,13 http://us.rd.yahoo.com/dailynews/rss/weather/London__GB/*http://weather.yahoo.com/forecast/UKXX0085_c.html Ma, 16 ago 2011 3:49 am BST   
Condizioni attuali:
Fiera, 15 C

Previsione:
Mar - Parzialmente nuvoloso. Alto: 21 Basso: 13
Mer - Parzialmente nuvoloso. Alto: 23 Basso: 14

Previsione completa su Yahoo! Tempo metereologico

(fornito da The Weather Channel)
]]>

Prendiamo il valore della città (Londra) che è memorizzato nel Canale-> yweather: Località-> city attributo.

Si noti che l'intestazione RSS per la risposta xml definisce due spazi dei nomi: yweather e geo. Per ottenere l'attributo città, dobbiamo accedere a yweather namespace come figlio di canale. L'argomento VERO per i bambini dice a SimpleXML che yweather è un prefisso dell'oggetto come in yweather: posizione.

 $ weather ['city'] = $ xml-> channel-> children ('yweather', TRUE) -> location-> attributes () -> city;

Usando la stessa tecnica, possiamo ottenere i valori per la temperatura e le condizioni attuali (testo):

 $ weather ['temp'] = $ xml-> channel-> item-> children ('yweather', TRUE) -> condition-> attributes () -> temp; $ weather ['conditions'] = $ xml-> channel-> item-> children ('yweather', TRUE) -> condition-> attributes () -> text;

Ottenere l'URL dell'icona meteo

Il Canale-> item-> Descrizione l'elemento contiene HTML incluso nei tag CDATA. Non possiamo accedere direttamente ai tag e agli attributi HTML usando SimpleXML, quindi per prima cosa otteniamo i dati di descrizione:

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

Quindi usiamo preg_match e un'espressione regolare per estrarre il tutto tra src =" e " dal tag img.

 $ imgpattern = '/src="(.*?)"/i'; preg_match ($ imgpattern, $ description, $ matches); $ weather ['icon_url'] = $ corrisponde a [1];

Abbiamo tutti i dati meteo per cui siamo venuti per poterli restituire al get_current_weather_display funzione per la formattazione come da Passaggio 3.


Passaggio 5 Attivare e testare

Attiva il plugin nella dashboard di WordPress. Crea un nuovo post o pagina e inserisci lo shortcode [get_current_weather woeid = '44418' tempscale = 'c'] nell'area del contenuto. Visualizza il post o la pagina e dovresti vedere le condizioni meteo per Londra.

Ora testeremo il tag del modello. Apri il footer.php file nella cartella dei temi del tuo sito. Aggiungi il tag del modello get_current_weather_template_tag ('44418', 'c') subito dopo il

etichetta. Aggiorna la tua pagina e dovresti vedere le condizioni meteorologiche di Londra nel footer.


addizionale

Rendilo carino

Aggiungiamo un po 'di CSS al style.css file nella cartella del tema.

 .gcw_weather_panel background-color: # B1E7FB; border: 1px solid # 4BCBFA; imbottitura: 10px; larghezza: 180 px;  .gcw_weather_panel * margin: 0 auto; allineamento del testo: centro; blocco di visualizzazione; 

Il tuo output meteo dovrebbe ora assomigliare a questo:

Quanti ne vuoi

Poiché ogni shortcode o tag template emette dati discreti, puoi avere tutte le diverse uscite meteo che desideri e tutte sulla stessa pagina.

Fallo!

Se guardi il xml restituito da Yahoo !, noterai che abbiamo usato pochissimi dati disponibili. Ci sono molti altri campi e attributi, inclusi i dati di previsione. Un miglioramento immediato da fare sarebbe mostrare la regione e il paese della città che stai visualizzando. Puoi anche mostrare umidità, velocità del vento e molto altro.

Divertiti!


link utili

  • Yahoo! Tempo metereologico
  • SimpleXML
  • Servizio di ricerca WOEID
  • Scrivere un plugin WordPress
  • Shortcode di WordPress
  • Tag modello WordPress