Uno sguardo all'API HTTP di WordPress un esempio pratico di wp_remote_get

Nell'ultimo articolo di questa serie, abbiamo dato un'occhiata alle funzioni PHP che sono disponibili per fare richieste remote.

Nello specifico, abbiamo esaminato:

  • file_get_contents
  • arricciare

E abbiamo anche discusso la funzione WordPress wp_remote_get.

In questo articolo, metteremo il wp_remote_get lavorare. Questa funzione fa parte dell'API HTTP - per uso pratico, utilizzandola per recuperare le seguenti due cose:

  1. Il numero di follower che abbiamo su Twitter
  2. Il nostro tweet più recente

La cosa bella è che non avremo bisogno di utilizzare alcun meccanismo OAuth o di autenticazione, e avremo solo bisogno di sfruttare le risposte di Twitter e la funzionalità JSON di PHP.

Quindi, in questo articolo, daremo un'occhiata pratica su come fare esattamente questo, quindi finiremo la serie rivedendo tutte le informazioni che wp_remote_get ritorna in modo che sapremo come gestirlo correttamente in futuro.


Preparare la directory dei plugin

Come con tutti i plugin, la prima cosa che dobbiamo fare è creare una directory nel nostro wp-content / plugins directory. Ai fini di questa demo, chiameremo il nostro plugin Demo Twitter.

Quindi, chiamiamo la directory dei plugin twitter-demo e il file di plugin associato twitter-demo.php.

Quindi, dobbiamo andare avanti e spegnere l'header del plugin in modo che WordPress sia in grado di rilevare il file del plugin, quindi facciamolo ora.


Stubbing Out the Plugin

Innanzitutto, inserisci il seguente codice nell'intestazione di twitter-demo.php file:

  

Nota che lo siamo non sarà internazionalizzare questo plugin. Abbiamo trattato questo argomento in un altro post ed è qualcosa che va oltre lo scopo di ciò che stiamo cercando di fare in questo articolo.

A questo punto, dovresti essere in grado di vedere il plug-in visualizzato nella dashboard del plug-in di installazione di WordPress. Puoi attivarlo; tuttavia, in realtà non farà nulla.

Almeno non ancora.


Portare il plugin alla vita

Come con il resto dei plug-in demo che pubblico qui, penso che sia importante delineare prima che cosa è il plug-in che farà prima di arrivare alla programmazione.

In quanto tale, ecco cosa possiamo aspettarci:

  • In fondo a ogni post, verrà visualizzata una piccola notifica che dice: I have X numero di follower su Twitter. Il mio ultimo tweet è stato Y.
  • Ci assicureremo di farlo solo sulla singola pagina del post in modo che non venga visualizzato nell'indice principale o nelle pagine di archivio.

Certo, è un po 'odioso visualizzarlo in fondo a un post, ma ricorda che lo scopo di questo plugin è dimostrare Come usare wp_remote_get, come analizzare una risposta da Twitter e come visualizzarla.

Siamo molto meno preoccupati dove il contenuto è visualizzato.

Quindi, andiamo avanti e cancelliamo la classe che fornirà questa funzionalità.

1. Stub Out la classe demo di Twitter

Prima di fare qualsiasi cosa, smontiamo la classe che useremo per fare la richiesta a Twitter. Ho incluso tutto il codice qui sotto insieme alla documentazione per ogni attributo e metodo.

  

Nota che riempiremo il resto di questi metodi mentre andremo, e avrò anche il codice sorgente completo del plugin alla fine dell'articolo.

Prima di andare oltre, vorrei sottolineare che useremo il Pattern Singleton per questo plugin. Abbiamo trattato questo modello di progettazione in un precedente articolo e, sebbene i vantaggi esulino dallo scopo di questo articolo, ti consiglio di leggere l'articolo associato per assicurarti di essere completamente soddisfatto del motivo per cui stiamo impostando il nostro plug-in in questo modo.

Quindi, diamo un'occhiata alle funzioni che abbiamo predisposto in modo da sapere esattamente dove siamo diretti:

  • Il costruttore è dove aggiungeremo un'azione per aggiungere le informazioni di Twitter a un singolo post
  • display_twitter_information sarà usato per rendere il messaggio in fondo al post
  • make_twitter_request richiederà effettivamente e restituirà i dati da Twitter (o null se la richiesta non riesce)
  • get_follower_count restituirà il numero di follower per l'utente specificato (o -1 se c'è un problema)
  • get_last_tweet restituirà l'ultimo tweet dall'utente o un messaggio se il plugin fallisce

Abbastanza chiaro? A questo punto, lavoriamo sulla richiesta di informazioni da Twitter per consentirci di elaborarla.

2. Richiedere dati da Twitter

Per prima cosa, popoliamo il make_twitter_request funziona con il seguente codice Nota che lo spiegherò dopo il codice:

 funzione privata make_twitter_request ($ username) $ response = wp_remote_get ('https://twitter.com/users/'. $ username. '.json'); prova // Notare che decodifichiamo la risposta del corpo poiché è il vero feed JSON $ json = json_decode ($ response ['body']);  catch (Exception $ ex) $ json = null;  // fine prova / cattura ritorno $ json; 

Nella prima riga del codice ne stiamo approfittando wp_remote_get per fare la nostra richiesta Nota che stiamo usando il $ username parametro per recuperare il feed JSON dell'utente. Nota quanto è semplice fare una richiesta usando il wp_remote_get funzione.

Questo nome utente è passato da una funzione diversa che esamineremo momentaneamente.

Successivamente, nota che il codice viene inserito in a prova a prendere. Questo perché la richiesta di Twitter potrebbe potenzialmente fallire. Se non fallisce, useremo PHP json_decode funzione per decodificare il corpo della risposta; altrimenti, imposteremo la risposta uguale a nullo.

Questo renderà facile la funzione di chiamata.

Prima di andare avanti è importante notare che qui c'è un sottile takeaway: si noti che stiamo decodificando l 'corpo'chiave del $ risposta array che viene restituito. Per quelli di voi che sono più curiosi di questo, daremo un'occhiata dettagliata alla risposta che viene quando si usa wp_remote_get nel prossimo articolo.

Per ora, basta notare che il corpo indice del $ risposta array è solo un'informazione che abbiamo a disposizione.

3. Chiama la funzione di richiesta

Ora che abbiamo definito la funzione che ha il compito di fare una richiesta a Twitter, definiamo la funzione che richiederà i dati da Twitter e la mostreremo sotto il contenuto del post.

Di nuovo, ecco il codice dopo il quale spiegherò esattamente cosa sta facendo:

 public function display_twitter_information ($ content) // Se siamo su un singolo post o pagina ... if (is_single ()) // ... tenta di dare una risposta a twitter. Nota che dovresti sostituire il tuo nome utente qui! if (null == ($ json_response = $ this-> make_twitter_request ('wptuts'))) // ... mostra un messaggio che la richiesta ha fallito $ html = ' 
'; $ html. = 'Si è verificato un problema nella comunicazione con l'API di Twitter ...'; $ html. = '
'; // ... altrimenti, leggi le informazioni fornite da Twitter else $ html = '
'; $ html. = 'I have'. $ this-> get_follower_count ($ json_response). "i follower e il mio ultimo tweet erano". $ this-> get_last_tweet ($ json_response). "". '; $ html. = '
'; // end if / else $ content. = $ html; // end if / else return $ content;

Innanzitutto, sappi che questa è la funzione più lunga nell'intero plug-in. Se riesci a setacciarlo, sei a posto.

Ricorda: questa funzione è ciò che verrà chiamato durante il il contenuto azione che verrà definita nel nostro costruttore una volta completato il plugin.

In quanto tale, la funzione prima controlla se siamo su un singolo post. In caso contrario, restituirà semplicemente il contenuto; altrimenti, fa quanto segue:

  • Tenta di fare una richiesta a Twitter
  • Se la richiesta non riesce, verrà visualizzato un messaggio che lo indica
  • Altrimenti, se stamperà un messaggio che mostra il numero di follower e l'ultimo tweet che la persona ha lasciato
  • Aggiungerà il messaggio al contenuto del post

Una nota importante: Nel Questo funzione, si specifica il nome utente per il quale si desidera recuperare le informazioni. Ad esempio, nota che sto cercando di recuperare informazioni per @WPTuts chiamando $ this-> make_twitter_request ( '') wptuts.

4. Leggi le informazioni

A questo punto, siamo pronti a leggere le informazioni ea concatenare le stringhe nel nostro messaggio da mostrare all'utente. Lo faremo usando il get_follower_count metodo e il get_last_tweet.

Poiché questi metodi sono così simili, daremo un'occhiata a entrambi e quindi li spiegherò dopo il codice:

 funzione privata get_follower_count ($ json) return (-1 < $json->followers_compagni)? $ json-> followers_count: -1;  // end get_follower_count private function get_last_tweet ($ json) return (0 < strlen( $json->stato-> testo))? $ json-> status-> text: '[Nessun tweet trovato. ] ';  // end get_last_tweet

Si noti che le due funzioni sono simili in quanto entrambe accettano il $ jSON dati da precedenti nel plugin. Successivamente, entrambi utilizzano un operatore ternario per determinare se devono restituire il testo richiesto o un messaggio predefinito.

In altre parole, se stiamo cercando di visualizzare il followers_count e il valore è maggiore di -1, allora sappiamo che abbiamo un valore da mostrare, quindi lo restituiremo; altrimenti, torneremo -1 come un indicatore che il valore non è impostato correttamente.

Questo ci consente di codificare in modo difensivo contro qualcosa che potrebbe andare storto durante l'elaborazione dei dati.


Il plugin demo di Twitter

Come promesso, ecco il codice sorgente completo con la documentazione da abbinare:

 make_twitter_request ('wptuts'))) // ... mostra un messaggio che la richiesta non è riuscita $ html = ' 
'; $ html. = 'Si è verificato un problema nella comunicazione con l'API di Twitter ...'; $ html. = '
'; // ... altrimenti, leggi le informazioni fornite da Twitter else $ html = '
'; $ html. = 'I have'. $ this-> get_follower_count ($ json_response). "i follower e il mio ultimo tweet erano". $ this-> get_last_tweet ($ json_response). "". '; $ html. = '
'; // end if / else $ content. = $ html; // end if / else return $ content; // end display_twitter_information / ** * Tenta di richiedere il feed JSON dell'utente specificato da Twitter * * @access public * @param $ username Il nome utente per il feed JSON che stiamo tentando di recuperare * @return $ json Il feed JSON dell'utente o null della richiesta fallita * / private function make_twitter_request ($ username) $ response = wp_remote_get ('https://twitter.com/users/'. $ username. '.json'); prova // Notare che decodifichiamo la risposta del corpo poiché è il vero feed JSON $ json = json_decode ($ response ['body']); catch (Exception $ ex) $ json = null; // fine prova / cattura ritorno $ json; // end make_twitter_request / ** * Recupera il numero di follower dal feed JSON * * @accesso privato * @param $ json Il feed JSON dell'utente * @return Il numero di follower per l'utente. -1 se i dati JSON non sono impostati correttamente. * / private function get_follower_count ($ json) return (-1 < $json->followers_compagni)? $ json-> followers_count: -1; // end get_follower_count / ** * Recupera l'ultimo tweet dal feed JSON dell'utente * * @access private * @param $ json Il feed JSON dell'utente * @return L'ultimo tweet dal feed dell'utente. '[Nessun tweet trovato. ] 'se i dati non sono impostati correttamente. * / private function get_last_tweet ($ json) return (0 < strlen( $json->stato-> testo))? $ json-> status-> text: '[Nessun tweet trovato. ] '; // end get_last_tweet // end class // Attiva il plugin Twitter_Demo :: get_instance ();

In realtà è relativamente semplice, giusto? In effetti, ci sono circa tanti commenti di codice quante sono le righe di codice reale, quindi il plugin stesso è molto piccolo.


Conclusione

Questa demo mostra quanto sia facile da usare wp_remote_get per interagire con i servizi di terze parti, analizzare la loro risposta e integrarla in un plug-in. Concesso, questo è molto ossa nude, ma dimostra ancora il concetto.

Nel prossimo articolo di questa parte della serie, daremo un'occhiata a tutte le informazioni che possiamo trasmettere wp_remote_get per vedere quanto sia flessibile il metodo. Dopodiché, daremo un'occhiata dettagliata ai dati di risposta in modo da poter scrivere richieste più complicate e scrivere un codice più difensivo, più difensivo.