Comunicarea cu API-ul Plugin WordPress.org

În ultimele săptămâni mă întrebam cum să pot trage datele despre pluginurile mele găzduite pe WordPress.org și să le afișez pe site-ul meu. Primul lucru care a venit în minte a fost "Web Scraping", dar sincer, aceasta este o mulțime de lucruri, se simte ca întoarcerea în timp și nu este ceva ce un cetățean bun de web ar trebui să facă. În unele cazuri, ar putea fi ilegal.

Apoi am descoperit un plugin numit "I Make Plugins", dezvoltat de Mark Jaquith, care tocmai dorea să-mi doream să-mi aduc datele de la readme.txt fișierul unui plugin. Funcționează foarte bine, dar WordPress ne permite să căutăm pluginuri direct din backend și să vedem pluginurile noastre preferate, știam că există o modalitate mai bună (sau modul The WordPress Way) și căutarea suplimentară ma condus la API-ul WordPress.org. Nicio documentație detaliată pe această pagină, dar suficientă pentru a începe să știți că există un API pentru a face acest lucru mai eficient.


WordPress.org Plugin-uri API

Adresa URL unde se efectuează toate apelurile legate de căutarea / actualizarea pluginului este http://api.wordpress.org/plugins/info/1.0/. Pentru a obține o idee rapidă despre cum funcționează acest lucru, deschideți acest link într-un browser și adăugați pluginul la sfârșit, de ex. http://api.wordpress.org/plugins/info/1.0/custom-favicon/ și vedeți ce este returnat.

Această solicitare GET bazată pe browser afișează toate informațiile despre plugin pentru pluginul "Custom Favicon" în formatul de mai jos. Prin înlocuirea ultimei căi a adresei URL cu slugul pluginului, veți putea vedea detalii specifice pluginului.

O: 8: "stdClass": 20: s: 4: "nume"; s: 14: "custom favicon"; s: "s: 14:" autor_profile "; s: 38:" http: //profiles.wordpress "; s: 3:" 1.0 "; .org / hchouhan "; s: 12:" contribuitori "; 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: "cere"; s: 3: "3.5"; s: 6: "testat"; s: 5: "3.5.2"; s: 13: "compatibilitate"; 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: "descărcat"; i: 1995; s: 12: "LAST_UPDATED"; s: 10: "2013-05-27"; s: 5: "adăugat"; s: 10: "2013-05-27"; s: 8: "prima pagina"; s: 61: "http://www.dreamsonline.net / WordPress-plugins / custom-favicon / "; s: 8:" secțiuni "; a: 4: s: 11:" description "; s: 594:"

Acum, încărcați cu ușurință o pictogramă favicon și Apple touch pentru site-ul WordPress și tabloul de bord.

Raportați toate erorile pe care le găsiți prin http://www.dreamsonline.net/wordpress-plugins/custom-favicon/

Link-urile mele

  • Twitter @harishchouhan
  • Google+ Harish Chouhan

Nu este foarte prezentabil, dar hei, cel puțin acesta este un început bun pentru a testa dacă API furnizează rapid informații despre plugin-uri, pe care le putem afișa după cum ne place.

Până în acest moment, majoritatea a ceea ce făceam era doar bazată pe studii aleatorii. Singura resursă pe care am putut-o găsi a fost http://dd32.id.au/projects/wordpressorg-plugin-information-api-docs/ care încearcă să explice diferitele opțiuni și argumente care pot fi folosite la comunicarea cu acest API.

Deci, cum funcționează acest lucru?

Pentru a comunica cu http://api.wordpress.org/plugins/info/1.0/ și pentru a retriva informațiile pe care trebuie să le faceți $ POST cerere cu 2 lucruri:

  1. Acțiune post - cum ar fi, $ _POST [ 'acțiune']
  2. Organismul Post - cum ar fi, $ _POST [ 'organism'], care trebuie să fie un obiect serializat

Datele returnate din API reprezintă un Obiect în toate cazurile (cu excepția cazului în care accesați linkul API dintr-un browser). Chiar și în cazul unei erori, datele returnate sunt încă un obiect, dar cu o singură proprietate, un șir de erori.

Prima mea încercare de a returna informațiile despre plugin-uri a fost ceva de genul exemplului de mai jos:

Exemplu de retrimitere a informațiilor despre plugin-uri utilizând wp_remote_post HTTP API

 "custom-favicon"); $ request = array ('action' => 'plugin_information', 'timeout' => 15, 'request' => serialize ($ args)); $ url = 'http://api.wordpress.org/plugins/info/1.0/'; $ response = wp_remote_post ($ url, array ('body' => solicitare $)); $ plugin_info = neserializați ($ response ['body']); echo "
". print_r ($ plugin_info, true). '
„; ?>

Vom explica codul mai târziu, dar pentru moment codul de mai sus va returna informații despre plugin-ul nostru în formatul indicat mai jos, în cazul în care totul funcționează conform destinației:

StdClass Object ([name] => Custom Favicon [slug] => custom-favicon [versiune] => 1.0 [author] => Dreams Online Drepturi [author_profile] => http://profiles.wordpress.org/hchouhan [contributors ] => Array ([hchouhan] => http://profiles.wordpress.org/hchouhan [dreamsonline] => http://profiles.wordpress.org/dreamsonline [dreamsmedia] => http: //profiles.wordpress. org / dreamsmedia) [necesită] => 3.5 [testat] => 3.5.2 [compatibilitate] => Array ([ 1 [2] => 1))) [rating] => 100 [num_ratings] => 3 [descărcat] => 2008 [last_updated] => 2013-05-27 [added] => 2013-05-27 [pagina principală ] => http://www.dreamsonline.net/wordpress-plugins/custom-favicon/ [secțiuni] => Array ([description] => Acum încărcați ușor o pictogramă favicon și Apple touch pentru site-ul dvs. WordPress și tabloul de bord. raportați orice bug-uri pe care le găsiți prin http://www.dreamsonline.net/wordpress-plugins/custom-favicon/ Link-urile mele Twitter @harishchouhan Google+ Harish Chouhan Dacă vă place pluginul, vă rugăm să ia în considerare rating-ul și faceți clic pe butonul "it works". [install] => Încărcați directorul / custom-favicon / în directorul / wp-content / plugins / Activează pluginul prin meniul "Plugins" din WordPress Faceți clic pe submeniul "Custom Favicon" din meniul Settings și încărcați faviconul [changelog] => = 1.0.0 * Aceasta este prima versiune [faq] => Aruncați o privire la întrebările oficiale "Custom Favicon". De asemenea, puteți vizita centrul de asistență și puteți începe o discuție dacă este necesar. ) [download_link] => http://downloads.wordpress.org/plugin/custom-favicon.zip [tags] => Array ([admin] => admin [apple-touch] pictograma] => pictograma touch app [blog] => blog [favicon] => favicon [icon] => icon [iphone] => iphone [theme] [donate_link] => http://www.dreamsonline.net)

Dacă doriți doar să afișați numărul de descărcări, puteți adăuga astfel:

echo "

Descărcat: '. print_r ($ plugin_info-> descărcat, adevărat). "ori

„;

Notă: Acesta este doar un exemplu de testare și nu este destinat a fi utilizat în proiecte reale, deoarece nu există nici o verificare a erorilor. În cazul în care gunoiul este greșit sau conexiunea la WordPress.org nu are loc, codul de mai sus va afișa erori.

Putem continua să extindem acest exemplu cu verificarea erorilor, dar există o cale mai bună? Și răspunsul este da, cu plugins_api funcţie.


plugins_api Funcţie

plugins_api funcția este definită în wp-admin / include /plugin_install.php.

per_page)) $ args-> per_page = 24; // Permite unui plugin să înlocuiască în întregime API-ul WordPress.org. // Utilizați filtrul "plugins_api_result" pentru a adăuga doar rezultate. // Asigurați-vă că un obiect este returnat de la următoarele filtre. $ args = apply_filters ('plugins_api_args', $ args, $ acțiune); $ res = apply_filters ('plugins_api', false, $ acțiune, $ args); dacă (false === $ res) $ url = 'http://api.wordpress.org/plugins/info/1.0/'; dacă (wp_http_supports (array ('ssl'))) $ url = set_url_scheme ($ url, 'https'); $ request = wp_remote_post ($ url, array ('timeout' => 15, 'body' => array ('action' => $ action, 'request' => serialize ($ args)))); dacă (is_wp_error ($ request)) $ res = new WP_Error ('plugins_api_failed', __ ('A apărut o eroare neașteptată. forum de asistență. '), $ request-> get_error_message ());  altceva $ res = maybe_unserialize (wp_remote_retrieve_body ($ request)); dacă este (! is_object ($ res) &&! is_array ($ res)) $ res = new WP_Error ('plugins_api_failed', __ ('A apărut o eroare neașteptată. pentru a avea probleme, vă rugăm să încercați forumurile de asistență. '), wp_remote_retrieve_body ($ request));  altfel (! is_wp_error ($ res)) $ res-> external = true;  return apply_filters ('plugins_api_result', $ res, $ action, $ args); ?>

Parametrii

plugins_api Funcția acceptă 2 parametri: acțiune $ și $ args:

1. The acțiune $ Parametru

Care poate fi una dintre aceste 3 opțiuni de mai jos:

  1. query_plugins
  2. plugin_information
  3. hot_tags

2. The $ args Parametru

Argumentele sunt opționale și, dacă sunt setate, trebuie să fie un obiect serializat. Argumentele pentru fiecare acțiune sunt diferite și sunt explicate în detaliu mai târziu în acest articol.

Datele returnate

Datele returnate depind de acțiunea aleasă. Actiunea "plugin_information"returnează un singur obiect, în timp ce celelalte două acțiuni returnează o serie de obiecte. În cazul unei erori, cum ar fi absența unui parametru de acțiune sau de tip slug, plugin_api funcția returnează de asemenea un obiect cu o singură proprietate "error" și o valoare (șir) "Slug not provided" sau "action not implemented".

Un exemplu de utilizare plugins_api Funcţie

Vom încerca acum același exemplu pe care l-am folosit mai devreme, dar folosind plugins_api în loc de wp_remote_post de la API-ul HTTP.

 "custom-favicon")); / ** Verificați erorile și afișați rezultatele * / if (is_wp_error ($ call_api)) echo '
". print_r ($ call_api-> get_error_message (), true). '
„; altceva echo '
". print_r ($ call_api, true). '
„; dacă (! gol ($ call_api-> descărcat)) echo '

Descărcat: '. print_r ($ call_api-> descărcat, adevărat). "ori.

„; ?>

Codul de mai sus va returna datele în același mod după exemplul nostru anterior. După cum puteți vedea, acest lucru necesită câteva linii de cod și o conexiune la API-ul plug-in WordPress.org, neserializarea obiectului returnat și verificarea inițială a erorilor sunt toate manipulate de plugins_api funcţie.

În ambele exemple de mai sus, am folosit doar "plugin_information"acțiune și un blanc fără alte argumente, deoarece intenția noastră era doar să recuperăm toate informațiile posibile despre plugin-ul nostru.

2.1 Argumente pentru query_plugins

2.1.1. naviga

Afișează lista similară cu http://wordpress.org/plugins/browse/popular/. Valorile posibile sunt:

  • popular
  • nou
  • la curent
  • cel mai bine cotat

2.1.2. căutare

Termenul de căutare.

2.1.3. etichetă

Căutați pluginuri printr-o etichetă.

2.1.4. autor

Căutați pluginuri de la un autor.

Notă: Între naviga, căutare, etichetă și autor poate fi folosit un singur argument la un moment dat.

2.1.5. pagină (Opțional)

Numărul paginii al rezultatelor.

2.1.6. per pagină (Opțional)

Numărul de rezultate afișate pe pagină.

2.1.7. câmpuri (Opțional)

Similar cu plugin_information domeniile enumerate mai jos.

Exemplu de interogare pentru cele mai populare pluginuri:

 $ call_api = plugins_api ('query_plugins', array ('browse' => 'top rated', 'page' => '1', 'per_page' => => false, 'description' => false, 'description' => false, 'short_description' => false, 'donate_link' => false, > false, 'last_updated' => false, 'compatibility' => false, 'tested' => false, 'requires' => false, 'downloadlink' => true,)));

Returnează o serie de obiecte similare cu ceea ce plugin_information se intoarce.

2.2 Argumente pentru plugin_information

2.2.1. melc

Blocul pluginului pentru care avem nevoie pentru a returna informații.

2.2.2. câmpuri (Opțional)

Implicit toate câmpurile din readme.txt sunt afișate împreună cu câteva câmpuri suplimentare, cum ar fi numărul total de descărcări, evaluarea și linkul de descărcare. Totuși, dacă trebuie doar să recuperați doar câteva câmpuri, puteți să ignorați acest lucru trimițând o serie de perechi cheie / valoare, în care câmpul este cheia și valoarea adevărată / falsă ca valoare în funcție de dacă doriți ca câmpul să fie returnat sau nu.

Exemplu de câmpuri principale:

 / ** Pregătiți interogarea noastră * / $ call_api = plugins_api ('plugin_information', array ('slug' => 'custom-favicon', 'fields' => array ,)));

Câmpurile care pot fi înlocuite sunt:

  • adăugat
  • compatibilitate
  • downloadlink (Notă: cheia reală este "DOWNLOAD_LINK"dar pentru a nu returna aceste date, trebuie să setăm câmpul ca" downloadlink ")
  • donate_link
  • pagina principala
  • Ultima actualizare
  • evaluare
  • necesita
  • secțiuni
  • Etichete
  • testat

2.3 Argumente pentru hot_tags

2.3.1. număr

Numărul de etichete pentru a reveni. Valoarea implicită este 100.

hot_tags exemplu de acțiune:

 / ** Pregătiți interogarea noastră * / $ call_api = plugins_api ('hot_tags', array ('number' => '50',));

Aceasta va returna o serie de obiecte cu cheia fiind tag-ul slug și fiecare obiect ar conține:

  • Nume eticheta
  • Etichetă pentru slujbă
  • Count - Numărul de pluginuri marcate cu această etichetă

rezumat

Internul WordPress core utilizează plugins_api pentru a afișa o listă de pluginuri pe baza cuvântului cheie utilizat pentru căutare, pentru a prelua pluginurile dvs. preferate și, de asemenea, pentru a afișa informații despre orice plugin specific. Prin modificarea parametrului de acțiune, puteți utiliza funcția pentru a efectua diferite activități.

Informațiile despre API-ul WordPress.org nu sunt disponibile pe scară largă și motivul ar putea fi evitarea abuzului de sistem, prin urmare, asigurați-vă că cererile dvs. pentru API-ul WordPress.org sunt limitate și făcute corect. Utilizați Transients pentru a arhiva datele, astfel încât să nu trebuiască să faceți o solicitare la încărcarea fiecărei pagini.

Într-un tutorial viitor vom crea un plugin cu un scurtcod pentru a afișa numărul de descărcări ale pluginului.

Cod