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:
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.
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.
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:
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à.
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:
display_twitter_information
sarà usato per rendere il messaggio in fondo al postmake_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 fallisceAbbastanza chiaro? A questo punto, lavoriamo sulla richiesta di informazioni da Twitter per consentirci di elaborarla.
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.
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:
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
.
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.
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.
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.