În ultimul articol din această serie, am aruncat o privire asupra funcțiilor PHP disponibile pentru a face solicitări la distanță.
Mai exact, am analizat:
file_get_contents
răsuci
Și am discutat și despre funcția WordPress wp_remote_get
.
În acest articol, o să punem wp_remote_get
a munci. Această funcție face parte din API-ul HTTP - pentru utilizare practică prin utilizarea acesteia pentru a prelua următoarele două lucruri:
Cel mai frumos lucru este că nu va trebui să folosim niciun mecanism OAuth sau autentificare și vom avea nevoie doar de a profita de răspunsurile Twitter și de funcționalitatea JSON a PHP.
Prin urmare, în acest articol, vom examina practic modul în care vom face exact acest lucru, apoi vom termina seria de revizuire a tuturor informațiilor pe care le wp_remote_get
se întoarce astfel încât să știm cum să ne descurcăm în mod corespunzător în activitatea viitoare.
Ca și în cazul tuturor pluginurilor, primul lucru pe care trebuie să-l facem este să creați un director în site-ul nostru wp-content / plugins director. În scopul acestei demonstrații, vom apela pluginul nostru Twitter demo.
Astfel, să menționăm directorul plugin twitter-demo și fișierul plugin asociat twitter-demo.php.
Apoi, trebuie să mergem mai departe și să ștergem antetul plug-in-ului, astfel încât WordPress să poată detecta fișierul plugin-ului, așa că hai să facem asta acum.
Mai întâi, plasați următorul cod în antetul lui twitter-demo.php fişier:
Rețineți că suntem nu va fi internaționalizarea acestui plugin. Am acoperit acest subiect într-o altă postare și este ceva care depășește sfera a ceea ce încercăm să facem în acest articol.
În acest moment, ar trebui să puteți vedea plugin-ul afișat în tabloul de bord al plugin-ului de instalare al WordPress. Puteți să-l activați; cu toate acestea, nu va face nimic.
Cel puțin nu încă.
Aducerea Plugin-ului la viață
Ca și în cazul celorlalte plugin-uri demo pe care le publică aici, cred că este important să se sublinieze mai întâi ce este plugin-ul este de gând să facă înainte de a ajunge la codificare.
Ca atare, iată ce ne putem aștepta:
Sigur, este un pic nerecunoscător afișarea acestui lucru în partea de jos a postului, dar rețineți că scopul acestui plugin este de a demonstra Cum a folosi wp_remote_get
, cum să analizăm un răspuns de la Twitter și cum să îl afișăm.
Suntem mult mai puțin preocupați de asta Unde conținutul este afișat.
Deci, hai să mergem mai departe și stub de clasă, care va fi furnizarea acestei funcționalități.
Înainte de a face ceva, hai să fugim în clasa pe care o vom folosi pentru a face cererea pe Twitter. Am inclus tot codul de mai jos împreună cu documentația pentru fiecare atribut și metodă.
Rețineți că vom completa celelalte metode în timp ce mergem și, de asemenea, voi avea codul sursă complet al plugin-ului la sfârșitul articolului.
Înainte de a merge mai departe, aș dori să subliniez că vom folosi Modelul Singleton pentru acest plugin. Am acoperit acest model de design într-un articol anterior și, deși avantajele sale sunt în afara domeniului de aplicare al acestui articol, vă recomandăm să citiți articolul asociat, pentru a vă asigura că vă plângeți complet motivul pentru care setăm plugin-ul nostru în acest mod.
În continuare, să aruncăm o privire la funcțiile pe care le-am stabilit, astfel încât să știm exact unde ne îndreptăm:
display_twitter_information
va fi folosit pentru a face mesajul în partea de jos a postuluimake_twitter_request
va solicita și va returna de fapt datele de pe Twitter (sau null dacă cererea nu reușește)get_follower_count
va returna numărul de adepți pentru utilizatorul specificat (sau -1 dacă există o problemă)get_last_tweet
va returna ultimul tweet de la utilizator sau un mesaj dacă plugin-ul nu reușeșteDestul de clar? În acest moment, hai să lucrăm la solicitarea de informații de pe Twitter, astfel încât să putem procesa.
În primul rând, să populam make_twitter_request
funcția cu următorul cod. Rețineți că o voi explica după cod:
funcția privată make_twitter_request ($ username) $ response = wp_remote_get ('https://twitter.com/users/'. $ username. '.json'); încercați // Rețineți că decodificăm răspunsul organismului, deoarece este feedul JSON actual $ json = json_decode ($ response ['body']); captură (Excepție $ ex) $ json = null; // sfarsit try / catch retur $ json;
În prima linie a codului profităm wp_remote_get
să facem cererea noastră. Rețineți că folosim $ username
pentru a recupera feedul JSON al utilizatorului. Observați cât de simplu este să faceți o solicitare utilizând wp_remote_get
funcţie.
Acest nume de utilizator este transferat dintr-o funcție diferită pe care o vom examina momentan.
Apoi, observați că vom împacheta codul într-un încearcă să prinzi
. Acest lucru se datorează faptului că cererea pentru Twitter ar putea să nu reușească. Dacă nu eșuează, atunci vom folosi PHP-urile json_decode
funcția de a decoda corpul răspunsului; în caz contrar, vom seta răspunsul egal cu nul
.
Acest lucru va face o condiție ușoară în funcția de apel.
Înainte de a merge mai departe, este important să rețineți că aici există o abordare subtilă: Observați că decodificăm secțiunea "corp
"cheie a răspuns $
array care este returnat. Pentru cei care sunteți mai curioși în legătură cu acest lucru, vom analiza detaliat răspunsul care apare atunci când se utilizează wp_remote_get
în următorul articol.
Pentru moment, pur și simplu rețineți că corp
indexul răspuns $
array este doar o singură informație pe care o avem la dispoziție.
Acum, că am definit funcția care este responsabilă pentru a face o cerere către Twitter, să definim funcția care va solicita date de pe Twitter, apoi să o afișeze sub conținutul mesajului.
Din nou, iată codul după care voi explica exact ce face:
funcția publică display_twitter_information ($ content) // Dacă suntem într-o singură postare sau pagină ... dacă (is_single ()) // ... încearcă să facă un răspuns la twitter. Rețineți că ar trebui să înlocuiți numele dvs. de utilizator aici! dacă null == ($ json_response = $ this-> make_twitter_request ('wptuts'))) // ... afișează un mesaj că cererea a eșuat $ html = '„; $ html. = 'A apărut o problemă de comunicare cu API-ul Twitter ...'; $ html. = '„; // ... altfel, citiți informațiile furnizate de Twitter altceva $ html = '„; $ html = 'Am eu'. $ this-> get_follower_count ($ json_response). "adepții și ultimul meu tweet a fost" '. $ this-> get_last_tweet ($ json_response). ".'; $ html. = '„; // end if / else $ content. = $ html; // end if / else returnează $ content;
Mai întâi, știți că aceasta este cea mai lungă funcție din întregul plugin. Dacă reușești să treci prin asta, ești bine să pleci.
Amintiți-vă: Această funcție este ceea ce va fi numit în timpul continutul
acțiune care va fi definită în constructorul nostru odată ce plugin-ul este complet realizat.
Ca atare, funcția mai întâi verifică dacă ne aflăm într-o singură postare. Dacă nu, atunci acesta va returna pur și simplu conținutul; în caz contrar, face următoarele:
O notă importantă: În acest , specificați numele de utilizator pentru care doriți să preluați informațiile. De exemplu, observați că încerc să recuperez informații pentru @WPTuts apelând $ this-> make_twitter_request ( 'wptuts')
.
În acest moment, suntem gata să citim informațiile și să concatenăm șirurile în mesajul nostru pentru a le afișa utilizatorului. Vom face acest lucru folosind get_follower_count
și metoda get_last_tweet
.
Deoarece aceste metode sunt atât de asemănătoare, vom examina amândouă și apoi le voi explica după cod:
funcția privată get_follower_count ($ json) return (-1 < $json->followers_count)? $ json-> followers_count: -1; // end get_follower_count funcție privată get_last_tweet ($ json) return (0 < strlen( $json->status-> text))? $ json-> status-> text: '[Nu a fost găsit niciun tweet. ] '; // end get_last_tweet
Observați că cele două funcții sunt similare în sensul că ambele acceptă $ JSON
datele de mai devreme în plugin. Apoi, ambele utilizează un operator ternar pentru a determina dacă ar trebui să returneze textul solicitat sau un mesaj implicit.
Cu alte cuvinte, dacă căutăm să afișăm followers_count
iar valoarea este mai mare decât -1
, atunci știm că avem o valoare de afișat, deci o vom returna; altfel, ne vom întoarce -1
ca indicator că valoarea nu este setată corect.
Acest lucru ne permite să codificăm defensiv ceva care ar putea merge prost atunci când procesează datele.
Așa cum a promis, iată codul sursă în totalitate cu documentația potrivită:
make_twitter_request ('wptuts'))) // ... afișează un mesaj că cererea a eșuat $ html = '„; $ html. = 'A apărut o problemă de comunicare cu API-ul Twitter ...'; $ html. = '„; // ... altfel, citiți informațiile furnizate de Twitter altceva $ html = '„; $ html = 'Am eu'. $ this-> get_follower_count ($ json_response). "adepții și ultimul meu tweet a fost" '. $ this-> get_last_tweet ($ json_response). ".'; $ html. = '„; // end if / else $ content. = $ html; // end if / else returnează $ content; // end display_twitter_information / ** * Încercările de a solicita feed-ul JSON al utilizatorului specificat de pe Twitter * * @access public * @param $ username Numele de utilizator al feedului JSON pe care încercăm să-l recuperăm * @return $ json Feedul utilizatorului JSON sau null a cererii a eșuat * / funcția privată make_twitter_request ($ username) $ response = wp_remote_get ('https://twitter.com/users/'. $ username. '.json'); încercați // Rețineți că decodificăm răspunsul organismului, deoarece este feedul JSON actual $ json = json_decode ($ response ['body']); captură (Excepție $ ex) $ json = null; // sfarsit try / catch retur $ json; // end make_twitter_request / ** * Returnează numărul de adepți din feed-ul JSON * * @access privat * @param $ json Feed-ul utilizatorului JSON * @return Numărul de followers pentru utilizator. -1 dacă datele JSON nu sunt setate corect. * / funcția privată get_follower_count ($ json) return (-1 < $json->followers_count)? $ json-> followers_count: -1; // end get_follower_count / ** * Returnează ultimul tweet din feedul JSON al utilizatorului * * @access private * @param $ json Feed-ul JSON al utilizatorului * @return Ultimul tweet de la feed-ul utilizatorului. "[Nu a fost găsit un tweet. ] dacă datele nu sunt setate corect. * / funcția privată get_last_tweet ($ json) return (0 < strlen( $json->status-> text))? $ json-> status-> text: '[Nu a fost găsit niciun tweet. ] '; // end get_last_tweet // clasa de sfarsit // Trigge pluginul Twitter_Demo :: get_instance ();
De fapt este relativ simplu, nu? De fapt, există aproximativ atât de multe comentarii de cod ca și linii de cod actual, astfel încât pluginul în sine este foarte mic.
Această demonstrație arată cât de ușor este să utilizați wp_remote_get
să interacționeze cu serviciile unor terțe părți, să le analizeze răspunsul și să le integreze într-un plugin. Acordat, asta este foarte oase goale, dar încă dovedește acest concept.
În următorul articol din această parte a seriei, vom analiza toate informațiile pe care le putem trece wp_remote_get
pentru a vedea cât de flexibilă este metoda. După aceea, vom examina detaliat datele de răspuns, astfel încât să putem scrie mai multe cereri complicate și să scriem un cod mai defensiv, mai defensiv.