Comunicare con l'API Plugin di WordPress.org

Nelle ultime settimane mi sono chiesto come estrarre dati dai miei plugin su WordPress.org e visualizzarli sul mio sito web. La prima cosa che mi è venuta in mente è stata "Web Scraping", ma francamente questo è un sacco di lavoro, sembra di tornare indietro nel tempo, e non è qualcosa che un buon web citizen dovrebbe fare. In alcuni casi, potrebbe essere illegale.

Poi mi sono imbattuto in un plug-in chiamato "I Make Plugins", sviluppato da Mark Jaquith, che voleva solo cercarlo recuperando i dati dal readme.txt file di un plugin. Funziona benissimo ma dal momento che WordPress ci permette di cercare i plugin direttamente dal back-end e anche di vedere i nostri plugin preferiti, sapevo che c'era un modo migliore (o The WordPress Way) e ulteriori ricerche mi hanno portato all'API WordPress.org. Nessuna documentazione dettagliata su questa pagina, ma sufficiente per iniziare a sapere che esiste un'API per farlo in modo più efficiente.


API dei plugin WordPress.org

L'URL in cui vengono effettuate tutte le chiamate relative a ricerca / aggiornamento di plug-in è http://api.wordpress.org/plugins/info/1.0/. Per avere un'idea veloce di come funziona, apri questo link in un browser e aggiungi il tuo plugin slug alla fine, ad es. http://api.wordpress.org/plugins/info/1.0/custom-favicon/ e guarda cosa viene restituito.

Questa richiesta GET basata su browser mostrava tutte le informazioni sui plugin per il plugin "Favicon personalizzato" nel seguente formato. Sostituendo l'ultimo percorso dell'URL con lo slug del tuo plugin, potrai vedere i dettagli specifici del tuo plugin.

O: 8: "stdClass": 20: s: 4: "nome"; s: 14: "Favicon personalizzato"; s: 4: "slug"; s: 14: "custom-favicon"; s: 7: "version"; s: 3: "1.0"; s: 6: "author"; s: 80: "Dreams Online Themes"; s: 14: "author_profile"; s: 38: "http: //profiles.wordpress .org / hchouhan "; s: 12:" collaboratori "un: 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: "richiede"; s: 3: "3,5"; s: 6: "testata"; s: 5: "3.5.2"; s: 13: "compatibilità", un: 2: s: 5:" 3.5.1 "; un: 1: s: 3:" 1,0" , un: 3: i: 0; i: 100; i: 1; i: 5; i: 2; i: 5; s : 3: "3,6", un: 1: s: 3: "1,0", un: 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: "scaricato"; i: 1995; s: 12: "LAST_UPDATED"; s: 10: "2013/05/27"; s: 5: "aggiunto"; s: 10: "2013/05/27"; s: 8: "pagina iniziale"; s: 61: "http://www.dreamsonline.net / wordpress-plugins / custom-favicon / "; s: 8:" sezioni "una: 4: s: 11:" descrizione "; s: 594:"

Ora puoi caricare facilmente un'icona di favicon e apple touch per il tuo sito Web e dashboard di WordPress.

Si prega di segnalare eventuali bug che trovate su http://www.dreamsonline.net/wordpress-plugins/custom-favicon/

I miei collegamenti

  • Twitter @harishchouhan
  • Google+ Harish Chouhan

Non molto presentabile, ma ciao, almeno questo è un buon inizio per testare se l'API fornisce rapidamente le informazioni sui plugin, che possiamo quindi mostrare come ci piacciono.

Fino a questo punto, la maggior parte di ciò che stavo facendo era basato solo su prove casuali. L'unica risorsa che ho trovato era http://dd32.id.au/projects/wordpressorg-plugin-information-api-docs/ che tenta di spiegare le varie opzioni e argomenti che possono essere utilizzati quando comunicano con questa API.

Quindi come funziona??

Per comunicare con http://api.wordpress.org/plugins/info/1.0/ e recuperare informazioni è necessario creare un $ POST richiesta con 2 cose:

  1. Pubblica azione - come, $ _POST [ 'action']
  2. Post Body - come, $ _POST [ 'corpo'], che deve essere un oggetto serializzato

I dati restituiti dall'API sono un oggetto in tutti i casi (tranne quando si visita il link API da un browser). Anche in caso di errore, i dati restituiti sono ancora un oggetto ma con una singola proprietà, una stringa di errore.

Il mio primo tentativo di recuperare informazioni sui plugin era qualcosa di simile al seguente esempio:

Esempio di utilizzo delle informazioni sul plug-in di ricezione wp_remote_post API HTTP

 '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' => $ request)); $ plugin_info = unserialize ($ response ['body']); eco '
'. print_r ($ plugin_info, true). '
'; ?>

Spiegheremo il codice in seguito ma per ora il codice di esempio sopra restituirà informazioni sul nostro plugin nel formato mostrato di seguito, nel caso in cui tutto funzioni come previsto:

stdClass Object ([name] => Custom Favicon [slug] => custom-favicon [version] => 1.0 [author] => Dreams Online Themes [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) [requires] => 3.5 [testato] => 3.5.2 [compatibilità] => Array ([3.6] => Array ([1.0] => Array ([0] => 100 [1] => 1 [2] => 1))) [valutazione] => 100 [num_ratings] => 3 [scaricato] => 2008 [last_updated] => 2013-05-27 [aggiunto] => 2013-05-27 [homepage ] => http://www.dreamsonline.net/wordpress-plugins/custom-favicon/ [sections] => Array ([description] => Ora puoi caricare facilmente un'icona di favicon e apple touch per il tuo sito Web e dashboard di WordPress. segnala eventuali bug che trovi su http://www.dreamsonline.net/wordpress-plugins/custom-favicon/ I miei link Twitter @harishchouhan Google+ Harish Chouhan Se ti piace il plugin, per favore considera di valutarlo e cliccando sul pulsante "funziona". [installazione] => Carica la directory / custom-favicon / nella directory / wp-content / plugins / Attiva il plugin attraverso il menu 'Plugin' in WordPress Fai clic sul sottomenu "Custom Favicon" sotto il menu Impostazioni e carica la tua favicon [changelog] => = 1.0.0 * Questa è la prima versione [faq] => Dai un'occhiata alle FAQ "Favicon personalizzate" ufficiali. Puoi anche visitare il centro di supporto e avviare una discussione, se necessario. ) [download_link] => http://downloads.wordpress.org/plugin/custom-favicon.zip [tags] => Array ([admin] => admin [apple-touch] => apple touch [apple-touch- icona] => apple touch icon [blog] => blog [favicon] => favicon [icona] => icona [iphone] => iphone [tema] => tema [upload] => upload [wordpress] => wordpress) [donate_link] => http://www.dreamsonline.net)

Se si desidera visualizzare solo il conteggio dei download, è possibile aggiungere come segue:

eco '

Scaricato: '. print_r ($ plugin_info-> scaricato, vero). 'volte

';

Nota: Questo è solo un esempio di prova e non è destinato ad essere utilizzato in progetti reali in quanto non vi è alcun controllo degli errori. Se la lumaca è sbagliata o la connessione a WordPress.org non ha luogo, il codice sopra riportato mostrerà degli errori.

Possiamo continuare ad estendere questo esempio con il controllo degli errori ma c'è un modo migliore? E la risposta è , con il plugins_api funzione.


Il plugins_api Funzione

Il plugins_api la funzione è definita in wp-admin / include /plugin_install.php.

per_page)) $ args-> per_page = 24; // Permette a un plugin di sovrascrivere interamente l'API di WordPress.org. // Usa il filtro 'plugins_api_result' per aggiungere semplicemente risultati. // Assicurati che un oggetto venga restituito dai seguenti filtri. $ args = apply_filters ('plugins_api_args', $ args, $ action); $ res = apply_filters ('plugins_api', false, $ action, $ args); if (false === $ res) $ url = 'http://api.wordpress.org/plugins/info/1.0/'; if (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)))); if (is_wp_error ($ request)) $ res = new WP_Error ('plugins_api_failed', __ ('Si è verificato un errore imprevisto Qualcosa potrebbe essere sbagliato in WordPress.org o nella configurazione di questo server. Se continui ad avere problemi, prova il forum di supporto. '), $ request-> get_error_message ());  else $ res = maybe_unserialize (wp_remote_retrieve_body ($ request)); if (! is_object ($ res) &&! is_array ($ res)) $ res = new WP_Error ('plugins_api_failed', __ ('Si è verificato un errore imprevisto Qualcosa potrebbe essere sbagliato in WordPress.org o nella configurazione di questo server. per avere problemi, prova i forum di supporto. '), wp_remote_retrieve_body ($ request));  elseif (! is_wp_error ($ res)) $ res-> external = true;  return apply_filters ('plugins_api_result', $ res, $ action, $ args); ?>

parametri

Il plugins_api la funzione accetta 2 parametri: $ azione e $ args:

1. Il $ azione Parametro

Quale può essere una qualsiasi di queste 3 opzioni qui sotto:

  1. query_plugins
  2. plugin_information
  3. hot_tags

2. Il $ args Parametro

Gli argomenti sono facoltativi e, se impostati, devono essere un oggetto serializzato. Gli argomenti relativi a ciascuna azione sono diversi e vengono illustrati in dettaglio più avanti in questo articolo.

Dati restituiti

I dati restituiti dipendono dall'azione scelta. L'azione "plugin_information"restituisce un singolo oggetto mentre le altre due azioni restituiscono una matrice di oggetti. In caso di errore come l'assenza di un parametro action o slug, il plugin_api funzione restituisce anche un oggetto con una singola proprietà "errore" e un valore (stringa) "Slug non fornito" o "azione non implementata".

Un esempio di utilizzo plugins_api Funzione

Ora proveremo lo stesso esempio che abbiamo usato in precedenza, ma utilizzando il plugins_api funzione al posto di wp_remote_post dall'API HTTP.

 'custom-favicon')); / ** Controlla gli errori e visualizza i risultati * / if (is_wp_error ($ call_api)) echo '
'. print_r ($ call_api-> get_error_message (), true). '
'; else echo '
'. print_r ($ call_api, true). '
'; if (! empty ($ call_api-> scaricato)) echo '

Scaricato: '. print_r ($ call_api-> scaricato, vero). 'volte.

'; ?>

Il codice sopra riportato restituirà i dati allo stesso modo del nostro esempio precedente. Come puoi vedere, questo richiede alcune righe di codice e una connessione all'API Plugin di WordPress.org, non serializzare l'oggetto restituito e il controllo degli errori iniziale viene gestito dal plugins_api funzione.

In entrambi gli esempi sopra, abbiamo usato solo il "plugin_information"azione e una lumaca senza altri argomenti come nostra intenzione era solo per recuperare tutte le informazioni possibili sul nostro plugin.

2.1 Argomenti per query_plugins

2.1.1. navigare

Visualizza l'elenco simile a http://wordpress.org/plugins/browse/popular/. I valori possibili sono:

  • popolare
  • nuovo
  • aggiornato
  • Più votati

2.1.2. ricerca

Il termine da cercare.

2.1.3. etichetta

Cerca i plugin per tag.

2.1.4. autore

Cerca plugin da un autore.

Nota: Fra navigare, ricerca, etichetta e autore solo un argomento può essere utilizzato alla volta.

2.1.5. pagina (opzionale)

Il numero di pagina dei risultati.

2.1.6. per pagina (opzionale)

Il numero di risultati da visualizzare per pagina.

2.1.7. i campi (opzionale)

Simile a plugin_information campi elencati di seguito.

Esempio di una query per i plugin più popolari:

 $ call_api = plugins_api ('query_plugins', array ('browse' => 'top-rated', 'page' => '1', 'per_page' => '5', 'fields' => array ('scaricato') => false, 'rating' => false, 'description' => false, 'short_description' => false, 'donate_link' => false, 'tags' => false, 'sezioni' => false, 'homepage' = > false, 'added' => false, 'last_updated' => false, 'compatibility' => false, 'tested = false,' requires '=> false,' downloadlink '=> true,)));

Restituisce una matrice di oggetti simile a cosa plugin_information ritorna.

2.2 Argomenti per plugin_information

2.2.1. lumaca

La lumaca del plugin per la quale abbiamo bisogno di restituire informazioni.

2.2.2. i campi (opzionale)

Di default tutti i campi dal readme.txt vengono visualizzati insieme ad alcuni campi aggiuntivi come il numero totale di download, la valutazione e il link per il download. Tuttavia, se è necessario recuperare solo alcuni campi, è possibile sovrascriverlo inviando una serie di coppie chiave / valore, dove il campo è la chiave e vero / falso come valore a seconda che si desideri che il campo sia restituito o non.

Esempio di campi prioritari:

 / ** Prepara la nostra query * / $ call_api = plugins_api ('plugin_information', array ('slug' => 'custom-favicon', 'fields' => array ('scaricato' => falso, 'valutazione' => falso ,)));

I campi che possono essere sostituiti sono:

  • aggiunto
  • Compatibilità
  • Link per scaricare (Nota: la chiave effettiva è "Link per scaricare"ma per non restituire questi dati, dobbiamo impostare il campo come" downloadlink ")
  • donate_link
  • homepage
  • ultimo aggiornamento
  • valutazione
  • richiedere
  • sezioni
  • tag
  • testato

2.3 Argomenti per hot_tags

2.3.1. numero

Il numero di tag da restituire. Il valore predefinito è 100.

hot_tags esempio di azione:

 / ** Prepara la nostra query * / $ call_api = plugins_api ('hot_tags', array ('numero' => '50',));

Ciò restituirà un array di oggetti con la chiave essendo il tag slug e ogni oggetto conterrà:

  • Nome tag
  • Tag Slug
  • Conteggio: numero di plug-in contrassegnati con questo tag

Sommario

Il nucleo di WordPress internamente utilizza il plugins_api funzione per visualizzare un elenco di plug-in basati sulla parola chiave utilizzata per la ricerca, per recuperare i plug-in preferiti e per visualizzare informazioni su qualsiasi plug-in specifico. Modificando il parametro action, è possibile utilizzare la funzione per eseguire attività diverse.

Le informazioni sull'API di WordPress.org non sono ampiamente disponibili e la ragione potrebbe essere quella di evitare l'abuso del sistema, quindi assicurati che le tue richieste alle API di WordPress.org siano limitate e fatte nel modo giusto. Utilizza Transients per memorizzare nella cache i dati in modo da non dover effettuare una richiesta su ogni caricamento della pagina.

In un futuro tutorial creeremo un plugin con uno shortcode per visualizzare il numero di download del plugin.