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.
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/
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.
For å kommunisere med http://api.wordpress.org/plugins/info/1.0/ og tilbakekalle informasjon må du lage en $ POST
forespørsel med 2 ting:
$ _POST [ 'handling']
$ _POST [ 'body']
, som må være et serialisert objektDe 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:
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.
plugins_api
FunksjonDe 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); ?>
De plugins_api
funksjonen godtar 2 parametere: $ handling
og $ args
:
$ handling
ParameterSom kan være en av disse tre alternativene nedenfor:
query_plugins
plugin_information
hot_tags
$ args
ParameterArgumenter 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.
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".
plugins_api
FunksjonVi 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.
query_plugins
bla
Den viser listen som ligner på http://wordpress.org/plugins/browse/popular/. De mulige verdiene er:
populær
ny
oppdatert
topp rangert
Søke
Begrepet å søke etter.
stikkord
Søk plugins med en tagg.
forfatter
Søk plugins fra en forfatter.
Merk: Mellom bla
, Søke
, stikkord
og forfatter
bare ett argument kan brukes om gangen.
side
(valgfri)Sidens nummer på resultatene.
per side
(valgfri)Antall resultater som skal vises per side.
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.
plugin_information
slug
Sluggen av pluginet som vi trenger for å returnere informasjon.
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
hot_tags
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:
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.