En titt på WordPress HTTP API Et praktisk eksempel på wp_remote_get

I den siste artikkelen i denne serien tok vi en titt på PHP-funksjonene som er tilgjengelige for å gjøre eksterne forespørsler.

Nærmere bestemt har vi gjennomgått:

  • file_get_contents
  • cURL

Og vi diskuterte også WordPress-funksjonen wp_remote_get.

I denne artikkelen skal vi sette wp_remote_get å jobbe. Denne funksjonen er en del av HTTP API - til praktisk bruk ved å bruke den til å hente følgende to ting:

  1. Antall tilhengere vi har på Twitter
  2. Vårt siste Tweet

Det fine er at vi ikke trenger å bruke noen OAuth- eller autentiseringsmekanismer, og vi trenger bare å dra nytte av Twitter-svar og PHPs JSON-funksjonalitet.

Så i denne artikkelen skal vi ta et praktisk blikk på hvordan du gjør akkurat dette, så avslutter vi serien som ser gjennom all informasjonen som wp_remote_get returnerer slik at vi vet hvordan vi skal håndtere det i fremtidig arbeid.


Forbered Plugin Directory

Som med alle plugins, er det første som vi trenger å lage en katalog i vår wp-innhold / tillegg katalogen. I forbindelse med denne demonstrasjonen kaller vi pluginet vårt Twitter Demo.

Så la oss navngi plugin katalogen twitter-demo og tilhørende pluginfil twitter-demo.php.

Deretter må vi fortsette og stubbe ut overskriften til plugin slik at WordPress kan registrere pluginfilen, så la oss gjøre det nå.


Stubbing ut pluggen

Først legger du inn følgende kode i overskriften til twitter-demo.php fil:

  

Legg merke til at vi er ikke kommer til å internasjonalisere dette pluginet. Vi har dekket dette emnet i et annet innlegg, og det er noe som er utenfor omfanget av det vi prøver å gjøre i denne artikkelen.

På dette tidspunktet bør du kunne se pluginet som vises i WordPress-installasjonens pluginpanel. Du kan aktivere den; Det vil imidlertid ikke faktisk gjøre noe.

I det minste, ikke ennå.


Ta pluggen til livet

Som med resten av demo-plugins som jeg publiserer her, tror jeg at det er viktig å først skisse hva Det er pluginet som skal gjøres før vi kommer til koding.

Som sådan er det det vi kan forvente:

  • På bunnen av hvert innlegg viser vi et lite varsel som leser: Jeg har X Antall tilhengere på Twitter. Min siste tweet var Y.
  • Vi sørger for at du bare gjør dette på den enkle innleggssiden slik at den ikke vises på hovedindeksen eller arkivsidene.

Visst, det er litt ubehagelig å vise dette på bunnen av et innlegg, men husk at formålet med dette pluginet er å demonstrere hvordan å bruke wp_remote_get, hvordan du analyserer et svar fra Twitter, og hvordan du viser det.

Vi er langt mindre opptatt av hvor innholdet vises.

Så, la oss gå videre og stub ut klassen som vil gi denne funksjonaliteten.

1. Stub ut Twitter Demo Class

Før vi gjør noe, la oss stubbe ut klassen som vi skal bruke for å gjøre forespørselen til Twitter. Jeg har tatt med alle koden nedenfor sammen med dokumentasjon for hvert attributt og metode.

  

Legg merke til at vi skal fylle resten av disse metodene når vi går, og jeg vil også ha full kildekoden til pluginet på slutten av artikkelen.

Før vi går videre, vil jeg påpeke at vi skal bruke Singleton Pattern for dette plugin. Vi har dekket dette designmønsteret i en tidligere artikkel, og selv om det er fordeler utenfor rammen av denne artikkelen, anbefaler jeg at du leser den tilknyttede artikkelen for å forsikre deg om at du fullt ut grok hvorfor vi setter opp pluginet vårt på denne måten.

Neste opp, la oss se på funksjonene som vi har lagt ut, slik at vi vet nøyaktig hvor vi er på vei:

  • Konstruktøren er hvor vi legger til en handling for å legge til vår Twitter-informasjon til et enkelt innlegg
  • display_twitter_information vil bli brukt til å gjengi meldingen nederst i innlegget
  • make_twitter_request vil faktisk be om og returnere dataene fra Twitter (eller null hvis forespørselen mislykkes)
  • get_follower_count vil returnere antall tilhengere for den angitte brukeren (eller -1 hvis det er et problem)
  • get_last_tweet vil returnere siste tweet fra brukeren eller en melding hvis pluginet mislykkes

Klar nok? På dette tidspunktet, la oss jobbe med å be om informasjon fra Twitter slik at vi kan behandle det.

2. Be om data fra Twitter

Først, la oss fylle ut make_twitter_request fungere med følgende kode. Merk at jeg skal forklare det etter koden:

 privat funksjon make_twitter_request ($ brukernavn) $ response = wp_remote_get ('https://twitter.com/users/'. $ brukernavn. '.json'); prøv // Merk at vi dekoder kroppens svar siden det er den faktiske JSON-feed $ json = json_decode ($ respons ['body']);  fangst (Unntak $ ex) $ json = null;  // ende forsøk / få tilbake $ json; 

I den første linjen i koden tar vi fordel av wp_remote_get å gjøre vår forespørsel. Legg merke til at vi bruker $ brukernavn parameter for å hente brukerens JSON-feed. Legg merke til hvor enkelt det er å foreta en forespørsel ved hjelp av wp_remote_get funksjon.

Dette brukernavnet er sendt inn fra en annen funksjon som vi ser på kort tid.

Legg merke til at vi pakker ut kode i en prøve / fangst. Dette skyldes at forespørselen til Twitter potensielt kunne mislykkes. Hvis det ikke mislykkes, bruker vi PHP json_decode funksjon for å dekode responsens kropp ellers stiller vi svaret lik null.

Dette vil gjøre det enklere å ringe funksjonen.

Før vi går videre, er det viktig å merke seg at det er en subtil takeaway her: Legg merke til at vi dekoder "kropp'nøkkelen til $ svar array som returneres. For de av dere som er mer nysgjerrige på dette, skal vi se nærmere på svaret som kommer ved bruk wp_remote_get i neste artikkel.

For øyeblikket må du bare merke at kropp indeks av $ svar array er bare ett stykke informasjon som vi har tilgjengelig.

3. Ring inn i forespørselsfunksjonen

Nå som vi har definert funksjonen som er ansvarlig for å stille en forespørsel til Twitter, la oss definere funksjonen som vil be om data fra Twitter og vise den under innleggets innhold.

Igjen, her er koden hvoretter jeg skal forklare nøyaktig hva det gjør:

 offentlig funksjon display_twitter_information ($ content) // Hvis vi er på et enkelt innlegg eller en side ... hvis (is_single ()) // ... forsøker å svare på twitter. Merk at du bør bytte brukernavn her! hvis (null == ($ json_response = $ this-> make_twitter_request ('wptuts'))) // ... viser en melding om at forespørselen mislyktes $ html = ' 
'; $ html. = 'Det oppstod et problem som kommuniserer med Twitter API ...'; $ html. = '
'; // ... ellers, les informasjonen fra Twitter ellers $ html = '
'; $ html. = 'Jeg har'. $ this-> get_follower_count ($ json_response). 'Følgere og min siste tweet var' '. $ this-> get_last_tweet ($ json_response).' ". '; $ html. = '
'; // slutt hvis / annet $ innhold. = $ html; // slutt hvis / annet returner $ innhold;

Først, vet at dette er den lengste funksjonen i hele plugin. Hvis du kan sile gjennom dette, er du god til å gå.

Husk: Denne funksjonen er det som skal kalles under innholdet handling som vil bli definert i vår konstruktør når plugin er fullstendig ferdig.

Som sådan sjekker funksjonen først for å se om vi er på ett enkelt innlegg. Hvis ikke, så vil det ganske enkelt returnere innholdet; ellers gjør det følgende:

  • Forsøk på å gjøre en forespørsel til Twitter
  • Hvis forespørselen mislykkes, vil den vise en melding som angir det
  • Ellers, hvis vil skrive ut en melding som viser antall tilhengere og den siste tweet personen som er igjen
  • Det vil legge til meldingen til innleggets innhold

Et viktig notat:dette funksjon, angir du brukernavnet som du vil hente informasjonen for. For eksempel merk at jeg prøver å hente informasjon for @WPTuts ved å ringe $ dette-> make_twitter_request ( 'wptuts').

4. Les informasjonen

På dette tidspunktet er vi klare til å lese informasjonen og sammenkoble strengene til meldingen vår for å vise til brukeren. Vi gjør dette ved å bruke get_follower_count metode og get_last_tweet.

Fordi disse metodene er så liknende, tar vi en titt på begge dem, og da vil jeg forklare dem etter koden:

 privat funksjon get_follower_count ($ json) return (-1 < $json->followers_count)? $ json-> followers_count: -1;  // end get_follower_count privat funksjon get_last_tweet ($ json) return (0 < strlen( $json->status-> tekst))? $ json-> status-> tekst: '[Ingen tweet funnet. ] ';  // end get_last_tweet

Legg merke til at de to funksjonene er like ved at de begge aksepterer $ json data fra tidligere i plugin. Deretter bruker de begge en ternær operatør for å avgjøre om de skal returnere den forespurte teksten eller en standardmelding.

Med andre ord, hvis vi ønsker å vise FOLLOWERS_COUNT og verdien er større enn -1, da vet vi at vi har en verdi å vise, så vi vil returnere den; ellers kommer vi tilbake -1 som en indikator på at verdien ikke er riktig innstilt.

Dette tillater oss å forsvare koden mot noe som kan gå galt ved behandling av dataene.


Twitter Demo Plugin

Som lovet, her er kildekoden i sin helhet med dokumentasjon som skal samsvare:

 make_twitter_request ('wptuts'))) // ... viser en melding om at forespørselen mislyktes $ html = ' 
'; $ html. = 'Det oppstod et problem som kommuniserer med Twitter API ...'; $ html. = '
'; // ... ellers, les informasjonen fra Twitter ellers $ html = '
'; $ html. = 'Jeg har'. $ this-> get_follower_count ($ json_response). 'Følgere og min siste tweet var' '. $ this-> get_last_tweet ($ json_response).' ". '; $ html. = '
'; // slutt hvis / annet $ innhold. = $ html; // slutt hvis / annet returner $ innhold; // end display_twitter_information / ** * Forsøk på å be om den spesifiserte brukerens JSON-feed fra Twitter * * @access public * @param $ brukernavn Brukernavnet for JSON-feeden vi forsøker å hente * @return $ json Brukerens JSON-feed eller null av forespørselen mislyktes * / privat funksjon make_twitter_request ($ brukernavn) $ response = wp_remote_get ('https://twitter.com/users/'. $ brukernavn. '.json'); prøv // Merk at vi dekoder kroppens svar siden det er den faktiske JSON-feed $ json = json_decode ($ respons ['body']); fangst (Unntak $ ex) $ json = null; // ende forsøk / få tilbake $ json; // end make_twitter_request / ** * Henter antall tilhengere fra JSON-feedet * * @access private * @param $ json Brukerens JSON-feed * @return Antall tilhengere for brukeren. -1 hvis JSON-dataene ikke er riktig innstilt. * / privat funksjon get_follower_count ($ json) return (-1 < $json->followers_count)? $ json-> followers_count: -1; // end get_follower_count / ** * Henter siste tweet fra brukerens JSON-feed * * @access private * @param $ json Brukerens JSON-feed * @return Den siste tweet fra brukerens feed. '[Ingen tweet funnet. ] 'hvis dataene ikke er riktig innstilt. * / privat funksjon get_last_tweet ($ json) return (0 < strlen( $json->status-> tekst))? $ json-> status-> tekst: '[Ingen tweet funnet. ] '; // end get_last_tweet // end class // Trigger pluginet Twitter_Demo :: get_instance ();

Det er faktisk relativt enkelt, ikke sant? Faktisk er det omtrent like mange kode kommentarer som det er linjer med faktisk kode, så pluggen i seg selv er veldig liten.


Konklusjon

Denne demoen går for å vise hvor lett det er å bruke wp_remote_get å samhandle med tredjepartstjenester, analysere deres svar og integrere det i et plugin. Gitt, dette er veldig bare bein, men det viser fortsatt konseptet.

I neste artikkel i denne delen av serien ser vi all informasjonen vi kan sende til wp_remote_get for å se hvor fleksibel metoden er. Etter det tar vi detaljert titt på svardataene slik at vi kan skrive mer kompliserte forespørsler og skrive mer defensiv kode, mer defensivt.