Î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.
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/
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.
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:
$ _POST [ 'acțiune']
$ _POST [ 'organism']
, care trebuie să fie un obiect serializatDatele 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:
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); ?>
plugins_api
Funcția acceptă 2 parametri: acțiune $
și $ args
:
acțiune $
ParametruCare poate fi una dintre aceste 3 opțiuni de mai jos:
query_plugins
plugin_information
hot_tags
$ args
ParametruArgumentele 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 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".
plugins_api
FuncţieVom î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.
query_plugins
naviga
Afișează lista similară cu http://wordpress.org/plugins/browse/popular/. Valorile posibile sunt:
popular
nou
la curent
cel mai bine cotat
căutare
Termenul de căutare.
etichetă
Căutați pluginuri printr-o etichetă.
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.
pagină
(Opțional)Numărul paginii al rezultatelor.
per pagină
(Opțional)Numărul de rezultate afișate pe pagină.
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.
plugin_information
melc
Blocul pluginului pentru care avem nevoie pentru a returna informații.
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
hot_tags
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:
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.