Een blik op de WordPress HTTP API een praktisch voorbeeld van wp_remote_get

In het laatste artikel in deze serie hebben we de PHP-functies bekeken die beschikbaar zijn voor het maken van aanvragen op afstand.

Concreet hebben we beoordeeld:

  • file_get_contents
  • Krul

En we bespraken ook de WordPress-functie wp_remote_get.

In dit artikel gaan we de wp_remote_get werken. Deze functie maakt deel uit van de HTTP API - voor praktisch gebruik door het te gebruiken om de volgende twee dingen op te halen:

  1. Het aantal volgers dat we hebben op Twitter
  2. Onze meest recente tweet

Het leuke is dat we geen OAuth- of authenticatiemechanismen hoeven te gebruiken en dat we alleen moeten profiteren van Twitter-reacties en PHP's JSON-functionaliteit.

Dus in dit artikel zullen we een praktische blik werpen op hoe precies dit te doen, dan zullen we een einde maken aan de serie die alle informatie herziet die wp_remote_get keert terug, zodat we weten hoe we het in toekomstige taken goed kunnen verwerken.


Bereid de plugin-directory voor

Zoals met alle plug-ins, is het eerste wat we moeten doen om een ​​directory aan te maken in onze wp-content / plugins directory. Ten behoeve van deze demo bellen we onze plug-in Twitter Demo.

Dus laten we de plugin-map een naam geven twitter-demo en het bijbehorende plug-in bestand twitter-demo.php.

Vervolgens moeten we doorgaan en de header van de plug-in uitstippelen, zodat WordPress het plugin-bestand kan detecteren, dus laten we dat nu doen.


Uitpluggen uit de plug-in

Plaats eerst de volgende code in de kop van twitter-demo.php het dossier:

  

Merk op dat we dat zijn niet deze plugin gaat internationaliseren. We hebben dit onderwerp in een ander bericht behandeld en het is iets dat buiten het bereik valt van wat we proberen te doen in dit artikel.

Op dit punt zou u de plug-in moeten zien die wordt weergegeven in het plug-ins dashboard van uw WordPress-installatie. Je kunt het activeren; het zal echter helemaal niets doen.

Tenminste nog niet.


De plugin tot leven brengen

Net als bij de rest van de demo-plug-ins die ik hier publiceer, denk ik dat het belangrijk is om eerst te schetsen wat het is de plugin die gaat doen voordat we aan het coderen zijn.

Als zodanig is dit wat we kunnen verwachten:

  • Onder aan elk bericht geven we een kleine melding weer met de melding: 'Ik heb.' X aantal volgers op Twitter. Mijn laatste tweet was Y.
  • We zullen ervoor zorgen dat dit alleen op de enkele berichtpagina gebeurt, zodat deze niet op de hoofdindex of archiefpagina's wordt weergegeven.

Natuurlijk, het is een beetje onaangenaam dit aan de onderkant van een bericht weer te geven, maar bedenk dat het doel van deze plug-in is om te demonstreren hoe gebruiken wp_remote_get, hoe een reactie van Twitter te analyseren, en hoe het te tonen.

Daar zijn we veel minder mee bezig waar de inhoud wordt weergegeven.

Dus laten we doorgaan en de klasse uitpluizen die deze functionaliteit zal bieden.

1. Stub Out de Twitter Demo-klasse

Voordat we iets gaan doen, laten we eerst de klas bespreken die we gaan gebruiken om het verzoek bij Twitter in te dienen. Ik heb alle onderstaande code opgenomen, samen met documentatie voor elk attribuut en elke methode.

  

Merk op dat we de rest van deze methoden zullen invullen terwijl we gaan, en ik zal ook de volledige broncode van de plug-in aan het eind van het artikel hebben.

Voordat we verder gaan, wil ik erop wijzen dat we het Singleton-patroon voor deze plug-in gebruiken. We hebben dit ontwerppatroon behandeld in een vorig artikel en hoewel het voordelen zijn die buiten het bestek van dit artikel vallen, raad ik aan het bijbehorende artikel te lezen om er zeker van te zijn dat je volledig in de war bent waarom we onze plug-in zo instellen.

Laten we vervolgens de functies bekijken die we hebben opgesteld, zodat we precies weten waar we naar toe gaan:

  • De constructor is waar we een actie zullen toevoegen voor het toevoegen van onze Twitter-informatie aan één bericht
  • display_twitter_information wordt gebruikt om het bericht onderaan het bericht weer te geven
  • make_twitter_request zal de gegevens daadwerkelijk opvragen en retourneren van Twitter (of null als het verzoek mislukt)
  • get_follower_count retourneert het aantal volgers voor de opgegeven gebruiker (of -1 als er een probleem is)
  • get_last_tweet stuurt de laatste tweet van de gebruiker of een bericht als de plug-in mislukt

Duidelijk genoeg? Laten we op dit punt werken aan het aanvragen van informatie van Twitter, zodat we deze kunnen verwerken.

2. Verzoek gegevens van Twitter

Laten we eerst de make_twitter_request functie met de volgende code. Merk op dat ik het na de code zal uitleggen:

 privéfunctie make_twitter_request ($ gebruikersnaam) $ response = wp_remote_get ('https://twitter.com/users/'. $ gebruikersnaam. '.json'); probeer // Merk op dat we het antwoord van het lichaam decoderen, omdat het de eigenlijke JSON-feed is $ json = json_decode ($ response ['body']);  catch (Exception $ ex) $ json = null;  // end try / catch return $ json; 

In de eerste regel van de code profiteren we van wp_remote_get om ons verzoek in te dienen. Merk op dat we de gebruiken $ username parameter om de JSON-feed van de gebruiker op te halen. Merk op hoe eenvoudig het is om een ​​verzoek te maken met behulp van de wp_remote_get functie.

Deze gebruikersnaam wordt doorgegeven vanuit een andere functie die we tijdelijk zullen bekijken.

Merk vervolgens op dat we code in a inpakken proberen te vangen. Dit komt omdat het verzoek aan Twitter mogelijk kan mislukken. Als het niet faalt, dan gebruiken we PHP's json_decode functie om het lichaam van het antwoord te decoderen; anders stellen we het antwoord gelijk aan nul.

Dit zorgt voor een gemakkelijke voorwaarde in de oproepfunctie.

Voordat we verder gaan, is het belangrijk op te merken dat er hier een subtiele afhaal is: merk op dat we de 'lichaam'sleutel van de $ response array die wordt geretourneerd. Voor degenen onder u die hier meer nieuwsgierig naar zijn, gaan we gedetailleerd in op het antwoord dat wordt gegeven bij het gebruik wp_remote_get in het volgende artikel.

Merk voor nu op dat het lichaam index van de $ response array is slechts één stuk informatie dat we beschikbaar hebben.

3. Roep de aanvraagfunctie op

Nu we de functie hebben gedefinieerd die verantwoordelijk is voor het maken van een verzoek aan Twitter, laten we de functie definiëren die gegevens van Twitter zal vragen en deze vervolgens onder de inhoud van het bericht zal weergeven.

Nogmaals, hier is de code waarna ik zal uitleggen wat het precies doet:

 openbare functie display_twitter_information ($ content) // Als we op een enkele post of pagina staan ​​... if (is_single ()) // ... proberen we een reactie te geven op twitter. Merk op dat je hier je gebruikersnaam moet vervangen! if (null == ($ json_response = $ this-> make_twitter_request ('wptuts'))) // ... geeft een bericht weer dat het verzoek is mislukt $ html = ' 
'; $ html. = 'Er was een probleem met de communicatie met de Twitter API ...'; $ html. = '
'; // ... lees anders de informatie van Twitter else $ html = '
'; $ html. = 'Ik heb'. $ this-> get_follower_count ($ json_response). 'volgers en mijn laatste tweet was "'. $ this-> get_last_tweet ($ json_response). '".'; $ html. = '
'; // end if / else $ content. = $ html; // end if / else return $ content;

Ten eerste, weet dat dit de langste functie in de gehele plug-in is. Als je dit kunt doornemen, ben je klaar om te gaan.

Onthoud: deze functie is wat er tijdens de. Wordt genoemd de inhoud actie die in onze constructor wordt gedefinieerd zodra de plug-in volledig is voltooid.

Als zodanig controleert de functie eerst of we op één bericht zitten. Zo niet, dan zal het gewoon de inhoud retourneren; anders doet het het volgende:

  • Pogingen om een ​​verzoek in te dienen bij Twitter
  • Als het verzoek mislukt, wordt er een bericht weergegeven waarin dit wordt vermeld
  • Anders wordt een bericht afgedrukt met het aantal volgers en de laatste tweet die de persoon heeft achtergelaten
  • Het voegt het bericht toe aan de berichtinhoud

Een belangrijke opmerking: In deze functie, geeft u de gebruikersnaam op waarvoor u de informatie wilt ophalen. Merk bijvoorbeeld op dat ik probeer informatie voor @WPTuts op te halen door te bellen $ This-> make_twitter_request ( 'wptuts').

4. Lees de informatie

Op dit moment zijn we klaar om de informatie te lezen en de tekenreeksen in ons bericht samen te voegen om aan de gebruiker weer te geven. We doen dit door de get_follower_count methode en de get_last_tweet.

Omdat deze methoden zo op elkaar lijken, zullen we beide bekijken en dan zal ik ze na de code uitleggen:

 persoonlijke functie get_follower_count ($ json) return (-1 < $json->volgers_count)? $ json-> followers_count: -1;  // end get_follower_count persoonlijke functie get_last_tweet ($ json) return (0 < strlen( $json->status-> tekst))? $ json-> status-> text: '[Geen tweet gevonden. ];  // einde get_last_tweet

Merk op dat de twee functies vergelijkbaar zijn doordat ze beide accepteren $ json gegevens van eerder in de plug-in. Vervolgens gebruiken ze allebei een ternaire operator om te bepalen of ze de gevraagde tekst of een standaardbericht moeten retourneren.

Met andere woorden, als we de. Willen weergeven followers_count en de waarde is groter dan -1, dan weten we dat we een waarde hebben om weer te geven, dus we zullen het teruggeven; anders komen we terug -1 als een indicator dat de waarde niet correct is ingesteld.

Dit stelt ons in staat om defensief te coderen tegen iets dat mis kan gaan bij het verwerken van de gegevens.


De Twitter Demo-plug-in

Zoals beloofd, hier is de broncode volledig met documentatie die overeenkomt:

 make_twitter_request ('wptuts'))) // ... geeft een bericht weer dat het verzoek is mislukt $ html = ' 
'; $ html. = 'Er was een probleem met de communicatie met de Twitter API ...'; $ html. = '
'; // ... lees anders de informatie van Twitter else $ html = '
'; $ html. = 'Ik heb'. $ this-> get_follower_count ($ json_response). 'volgers en mijn laatste tweet was "'. $ this-> get_last_tweet ($ json_response). '".'; $ html. = '
'; // end if / else $ content. = $ html; // end if / else return $ content; // end display_twitter_information / ** * Pogingen om de JSON-feed van de opgegeven gebruiker te vragen via Twitter * * @access public * @param $ gebruikersnaam De gebruikersnaam voor de JSON-feed die we proberen te achterhalen * @return $ json De JSON-feed van de gebruiker of null van het verzoek mislukt * / private functie make_twitter_request ($ gebruikersnaam) $ response = wp_remote_get ('https://twitter.com/users/'. $ gebruikersnaam. '.json'); probeer // Merk op dat we het antwoord van het lichaam decoderen, omdat het de eigenlijke JSON-feed is $ json = json_decode ($ response ['body']); catch (Exception $ ex) $ json = null; // end try / catch return $ json; // end make_twitter_request / ** * Hiermee wordt het aantal volgers uit de JSON-feed opgehaald * * @access private * @param $ json De JSON-feed van de gebruiker * @return Het aantal volgers voor de gebruiker. -1 als de JSON-gegevens niet goed zijn ingesteld. * / private functie get_follower_count ($ json) return (-1 < $json->volgers_count)? $ json-> followers_count: -1; // end get_follower_count / ** * Haalt de laatste tweet op uit de JSON-feed van de gebruiker * * @access private * @param $ json De JSON-feed van de gebruiker * @return De laatste tweet uit de feed van de gebruiker. '[Geen tweet gevonden. ] 'als de gegevens niet correct zijn ingesteld. * / private functie get_last_tweet ($ json) return (0 < strlen( $json->status-> tekst))? $ json-> status-> text: '[Geen tweet gevonden. ]; // end get_last_tweet // end class // Activeer de plugin Twitter_Demo :: get_instance ();

Het is eigenlijk relatief eenvoudig, toch? Sterker nog, er zijn ongeveer evenveel commentaar als er regels van de werkelijke code zijn, dus de plug-in zelf is erg klein.


Conclusie

Deze demo laat zien hoe eenvoudig het is om te gebruiken wp_remote_get om te interageren met services van derden, hun reactie te analyseren en te integreren in een plug-in. Toegegeven, dit is het heel kale botten, maar het bewijst nog steeds het concept.

In het volgende artikel in dit deel van de serie zullen we alle informatie bekijken die we kunnen doorgeven wp_remote_get om te zien hoe flexibel de methode is. Daarna zullen we de responsgegevens gedetailleerd bekijken, zodat we ingewikkelder verzoeken kunnen schrijven en defensieve code kunnen schrijven, meer defensief.