Kommuniserer med WordPress.org Plugin API

I løpet av de siste ukene har jeg lurt på hvordan jeg muligens kan trekke data om mine plugins hosted på WordPress.org og vise det på nettstedet mitt. Det første som kom til å tenke på var "Web Scraping", men helt ærlig, dette er mye arbeid, føles som å gå tilbake i tid, og det er ikke noe en god webborger burde gjøre. I noen tilfeller kan det være ulovlig.

Jeg kom da over et plugin kalt "Jeg lager plugger", utviklet av Mark Jaquith, som bare ville at jeg ønsket å hente data fra readme.txt fil av et plugin. Det fungerer bra, men siden WordPress tillater oss å søke etter plugins direkte fra backend og også for å se vår favoritt plugins, visste jeg at det var en bedre måte (eller The WordPress Way) og videre søking førte meg til WordPress.org API. Ingen detaljert dokumentasjon på denne siden, men nok til å begynne å vite det er en API for å gjøre dette mer effektivt.


WordPress.org Plugins API

Nettadressen der alle plugin søk / oppdatering relaterte samtaler er gjort er http://api.wordpress.org/plugins/info/1.0/. For å få en rask ide om hvordan dette virker, åpne denne lenken i en nettleser og legg til plugin-sluggen på slutten, f.eks. http://api.wordpress.org/plugins/info/1.0/custom-favicon/ og se hva som er returnert.

Denne nettleserbaserte GET-forespørselen viste all plugininformasjon for plugin "Custom Favicon" i formatet nedenfor. Ved å erstatte den siste banen til nettadressen med sluggen i pluginet ditt, kan du se detaljer som er spesifikke for pluginet ditt.

O: 8: "stdClass": 20: s: 4: "name"; s: 14: "Custom Favicon"; s: 4: "slug"; s: 14: "custom favicon"; s: 7: "versjon"; s: 3: "1.0"; s: 6: "forfatter"; s: 80: "Dreams Online Themes"; s: 14: "author_profile"; s: 38: "http: //profileswordwordpress Org / hchouhan "; s: 12:" bidragsytere "; a: 3: s: 8:" hchouhan "; s: 38:" http://profiles.wordpress.org/hchouhan "; s: 12:" dreamsonline "; s: 42:" http://profiles.wordpress.org/dreamsonline "; s: 11:" dreamsmedia "; s: 41:" http://profiles.wordpress.org/dreamsmedia "; s: 8: "krever"; s: 3: "3,5"; s: 6: "testet"; s: 5: "3.5.2"; s: 13: "forenlighet"; a: 2: s: 5:" 3.5.1 "; a: 1: s: 3:" 1,0" ; a: 3: i: 0; i: 100; i: 1; i: 5; i: 2; i: 5; s : 3: "3,6"; a: 1: s: 3: "1,0"; a: 3: i: 0; i: 100; i: 1; i: 1; i: 2; i: 1;  s: 6: "rating"; d: 100; s: 11: "NUM_RATINGS"; i: 3; s: 10: "ned"; i: 1995; s: 12: "LAST_UPDATED"; s: 10: "2013-05-27"; s: 5: "tilsatt"; s: 10: "2013-05-27"; s: 8: "nettside"; s: 61: "http://www.dreamsonline.net / wordpress-plugg / custom-favikon / "; s: 8:" seksjoner "; a: 4: s: 11:" description "; s: 594:"

Nå kan du enkelt laste opp et favicon og apple touch-ikon for WordPress nettsted og dashboard.

Vennligst rapporter eventuelle feil du finner via http://www.dreamsonline.net/wordpress-plugins/custom-favicon/

Mine lenker

  • Twitter @harishchouhan
  • Google+ Harish Chouhan

Ikke veldig presentabel, men hei, i hvert fall dette er en god start å teste om API-en gir plugininformasjon raskt, som vi kan vise den måten vi liker.

Inntil dette punktet var det meste av det jeg gjorde bare basert på tilfeldige forsøk. Den eneste ressursen jeg kunne finne var http://dd32.id.au/projects/wordpressorg-plugin-information-api-docs/ som prøver å forklare de ulike alternativene og argumentene som kan brukes når du kommuniserer med denne API.

Så hvordan virker dette?

For å kommunisere med http://api.wordpress.org/plugins/info/1.0/ og tilbakekalle informasjon må du lage en $ POST forespørsel med 2 ting:

  1. Post Action - for eksempel, $ _POST [ 'handling']
  2. Post Body - som, $ _POST [ 'body'], som må være et serialisert objekt

De returnerte dataene fra API er et objekt i alle tilfeller (unntatt når du besøker API-lenken fra en nettleser). Selv i tilfelle en feil, er de returnerte dataene fortsatt et objekt, men med en enkelt egenskap, en feilstreng.

Mitt første forsøk på å tilbakestille plugininformasjon var noe som dette nedenfor:

Eksempel på å gjenopprette plugininformasjon ved hjelp av wp_remote_post HTTP API

 'tilpasset favicon'); $ request = array ('action' => 'plugin_information', 'timeout' => 15, 'request' => serialize ($ args)); $ url = 'http://api.wordpress.org/plugins/info/1.0/'; $ respons = wp_remote_post ($ url, array ('body' => $ forespørsel)); $ plugin_info = unserialize ($ respons ['body']); ekko '
'. print_r ($ plugin_info, true). '
'; ?>

Vi vil forklare koden senere, men for nå vil eksempelkoden ovenfor returnere informasjon om pluginet vårt i formatet som er vist nedenfor, dersom alt fungerer som ønsket:

stdClass Object ([name] => Custom Favicon [slug] => tilpasset favicon [version] => 1.0 [author] => Dreams Online Temaer [author_profile] => http://profiles.wordpress.org/hchouhan [bidragsytere ] => Array ([hchouhan] => http://profiles.wordpress.org/hchouhan [dreamsonline] => http://profiles.wordpress.org/dreamsonline [dreamsmedia] => http: //profileswordword. org / dreamsmedia) [krever] => 3.5 [testet] => 3.5.2 [kompatibilitet] => Array ([3.6] => Array ([1.0] => Array ([0] => 100 [1] => 1 [2] => 1))) [vurdering] => 100 [num_ratings] => 3 [nedlastet] => 2008 [last_updated] => 2013-05-27 [lagt til] => 2013-05-27 [hjemmeside ] => http://www.dreamsonline.net/wordpress-plugins/custom-favicon/ [sections] => Array ([description] => Nå kan du enkelt laste opp et favicon og et Apple Touch-ikon for ditt WordPress-nettsted og dashboard. rapporter eventuelle feil du finner via http://www.dreamsonline.net/wordpress-plugins/custom-favicon/ Mine lenker Twitter @harishchouhan Google+ Harish Chouhan Hvis du elsker pluginet, vær så snill å vurdere å vurdere det og klikke på "det fungerer" -knappen. [installasjon] => Last opp katalogen / tilpasset favicon / til / wp-innholdet / pluginene / katalogen Aktiver pluginet via "Plugins" -menyen i WordPress Klikk på "Custom Favicon" undermenyen under Innstillinger-menyen og last opp favicon [changelog] => = 1.0.0 * Dette er den første versjonen [faq] => Ta en titt på den offisielle "Custom Favicon" FAQ. Du kan også besøke støttesenteret og starte en diskusjon om nødvendig. ) [download_link] => http://downloads.wordpress.org/plugin/custom-favicon.zip [tags] => Array ([admin] => admin [apple-touch] => apple touch [apple-touch- ikon] => apple touch icon [blog] => blogg [favicon] => favicon [icon] => ikon [iphone] => iphone [tema] => tema [upload] => last opp [wordpress] => wordpress) [donate_link] => http://www.dreamsonline.net)

Hvis du bare vil vise nedlastingsrenten, kan du legge til slik:

ekko '

Nedlastet: '. print_r ($ plugin_info-> nedlastet, sant). 'tider

';

Merk: Dette er bare et testeksempel og er ikke ment å bli brukt i faktiske prosjekter, da det ikke er noen feilkontroll. Hvis sluggen er feil eller forbindelsen til WordPress.org ikke finner sted, vil koden ovenfor vise feil.

Vi kan fortsette å utvide dette eksemplet med feilkontroll, men er det en bedre måte? Og svaret er ja, med plugins_api funksjon.


De plugins_api Funksjon

De plugins_api funksjon er definert i wp-admin / includes /plugin_install.php.

per_page)) $ args-> per_page = 24; // Tillater at et plugin forstyrrer WordPress.org API helt. // Bruk filteret 'plugins_api_result' for å bare legge til resultater. // Vennligst kontroller at en gjenstand returneres fra følgende filtre. $ args = apply_filters ('plugins_api_args', $ args, $ action); $ res = apply_filters ('plugins_api', false, $ action, $ args); hvis (false === $ res) $ url = 'http://api.wordpress.org/plugins/info/1.0/'; hvis (wp_http_supports (array ('ssl'))) $ url = set_url_scheme ($ url, 'https'); $ request = wp_remote_post ($ url, array ('timeout' => 15, 'body' => array ('action' => $ handling, 'request' => serialize ($ args)))); hvis (is_wp_error ($ request)) $ res = ny WP_Error ('plugins_api_failed', __ ('Det oppstod en uventet feil. Noe kan gå galt med WordPress.org eller denne serverens konfigurasjon. Hvis du fortsatt har problemer, kan du prøve støttefora. '), $ request-> get_error_message ());  ellers $ res = maybe_unserialize (wp_remote_retrieve_body ($ request)); hvis (! er_objekt ($ res) &&! is_array ($ res)) $ res = nytt WP_Error ('plugins_api_failed', __ ('Det oppstod en uventet feil. Noe kan gå galt med WordPress.org eller denne serverens konfigurasjon. for å få problemer, vennligst prøv støttefora. '), wp_remote_retrieve_body ($ request));  elseif (! is_wp_error ($ res)) $ res-> external = true;  return apply_filters ('plugins_api_result', $ res, $ action, $ args); ?>

parametere

De plugins_api funksjonen godtar 2 parametere: $ handling og $ args:

1. Den $ handling Parameter

Som kan være en av disse tre alternativene nedenfor:

  1. query_plugins
  2. plugin_information
  3. hot_tags

2. Den $ args Parameter

Argumenter er valgfrie, og hvis de er satt må de være en serialisert gjenstand. Argumenter for hver handling er forskjellige og forklares nærmere senere i denne artikkelen.

Data returnert

Dataene som returneres avhenger av hvilken handling som er valgt. Handlingen "plugin_information"returnerer et enkelt objekt mens de to andre handlingene returnerer en rekke objekter. I tilfelle av en feil som fravær av en handling eller slug parameter, plugin_api funksjon returnerer også et objekt med en enkelt egenskap "feil" og en verdi (streng) "Slug ikke oppgitt" eller "handling ikke implementert".

Et eksempel på bruk plugins_api Funksjon

Vi skal nå prøve det samme eksemplet vi brukte tidligere, men ved hjelp av plugins_api funksjon i stedet for wp_remote_post fra HTTP API.

 'tilpasset favicon')); / ** Kontroller feil og vis resultatene * / hvis (is_wp_error ($ call_api)) echo '
'. print_r ($ call_api-> get_error_message (), true). '
'; annet echo '
'. print_r ($ call_api, true). '
'; hvis (! tomt ($ call_api-> lastet ned)) echo '

Nedlastet: '. print_r ($ call_api-> nedlastet, sant). 'tider.

'; ?>

Ovennevnte kode vil returnere dataene på samme måte som vårt tidligere eksempel hadde. Som du kan se, krever dette noen linjer med kode og en tilkobling til WordPress.org Plugin API, unserializing det returnerte objektet og initial feilkontroll håndteres alle av plugins_api funksjon.

I begge eksemplene ovenfor brukte vi bare "plugin_information"handling og en slug uten andre argumenter som vår hensikt var bare å hente all mulig informasjon om vårt plugin.

2.1 Argumenter for query_plugins

2.1.1. bla

Den viser listen som ligner på http://wordpress.org/plugins/browse/popular/. De mulige verdiene er:

  • populær
  • ny
  • oppdatert
  • topp rangert

2.1.2. Søke

Begrepet å søke etter.

2.1.3. stikkord

Søk plugins med en tagg.

2.1.4. forfatter

Søk plugins fra en forfatter.

Merk: Mellom bla, Søke, stikkord og forfatter bare ett argument kan brukes om gangen.

2.1.5. side (valgfri)

Sidens nummer på resultatene.

2.1.6. per side (valgfri)

Antall resultater som skal vises per side.

2.1.7. Enger (valgfri)

Lik plugin_information feltene som er oppført nedenfor.

Eksempel på et spørsmål for de mest populære pluginene:

 $ call_api = plugins_api ('query_plugins', array ('browse' => 'topprangerte', 'side' => '1', 'per_page' => '5', 'fields' => array => false, 'rating' => false, 'description' => falskt, 'short_description' => false, 'donate_link' => false, 'tags' => > false, 'added' => false, 'last_updated' => false, 'kompatibilitet' => false, 'tested' => false, 'requires' => false, 'downloadlink' => true)));

Returnerer en rekke objekter som ligner på hva plugin_information avkastning.

2.2 Argumenter for plugin_information

2.2.1. slug

Sluggen av pluginet som vi trenger for å returnere informasjon.

2.2.2. Enger (valgfri)

Som standard er alle feltene fra readme.txt vises sammen med noen flere felt, for eksempel totalt antall nedlastinger, vurdering og nedlastingskobling. Men hvis du bare trenger å hente ut noen få felt, kan du overstyre dette ved å sende inn en rekke nøkkel / verdipar, hvor feltet er nøkkelen og sant / falskt som verdien avhengig av om du ønsker at feltet skal returneres eller ikke.

Eksempel på overordnede felt:

 / ** Forbered forespørselen * / $ call_api = plugins_api ('plugin_information', array ('slug' => 'tilpasset favicon', 'fields' => array ('downloaded' => false, 'rating' => false ,)));

Feltene som kan overstyres er:

  • la til
  • kompatibilitet
  • Download (Merk: at den faktiske nøkkelen er "DOWNLOAD_LINK"men for å ikke returnere disse dataene, må vi sette feltet som" downloadlink ")
  • donate_link
  • hjemmeside
  • sist oppdatert
  • vurdering
  • krever
  • seksjoner
  • tags
  • testet

2.3 Argumenter for hot_tags

2.3.1. Nummer

Antallet koder som skal returneres. Standardinnstillingen er 100.

hot_tags handlingseksempel:

 / ** Forbered forespørselen * / $ call_api = plugins_api ('hot_tags', array ('number' => '50',));

Dette vil returnere en rekke objekter med nøkkelen som taggen slug og hvert objekt vil inneholde:

  • Tagnavn
  • Tag Slug
  • Count - Antall plugins merket med denne taggen

Sammendrag

Internt WordPress-kjerne bruker plugins_api Funksjon for å vise en liste over plugins basert på søkeordet som brukes for søk, for å hente favorittplugins, og også for å vise informasjon om et bestemt plugin. Ved å endre handlingsparameteren, kan du bruke funksjonen til å utføre forskjellige oppgaver.

Informasjon om WordPress.org API er ikke allment tilgjengelig, og årsaken kan muligens være å unngå misbruk av systemet. Sørg derfor for at forespørsler til WordPress.org API er begrenset og gjort på riktig måte. Bruk Transients til å cache dataene, slik at du ikke trenger å gjøre en forespørsel på hver side last.

I en fremtidig opplæring vil vi opprette et plugin med en kortnummer for å vise nedlastingen av plugin-modulen din.