WordPress.org API - Ottieni i plugin preferiti degli autori
Ci sono state alcune recenti aggiunte al repository dei plugin di WordPress.org. La più notevole è il cambiamento alla pagina dei plugin e al profilo dell'autore che ora mostra i plugin preferiti dagli autori.
Voglio creare un plugin widget per la sidebar che mostri i plugin preferiti di un autore. So come usare l'API per ottenere le statistiche dei plugin e ho anche letto la documentazione API di DD32, ma non credo esistano documentazioni sui profili o se esista davvero un'API per i profili.
Ho provato a usare wp_remote_get
e sono riuscito a ottenere il codice HTML della pagina del profilo, ma non ho ancora provato a parsarlo perché sembra un metodo troppo disordinato. Sarebbe fantastico se potessi ottenere il profilo in XML o json.
Ci sono metodi che mi sfuggono o esiste un'API per i profili?
Modifica:
Ho creato una versione beta su GitHub usando il parser SimpleHTML Dom. Non credo di poter ottenere le valutazioni a stelle, ma sono abbastanza soddisfatto dei risultati come primo tentativo senza un'API.
WordPress.org non permette lo scraping dei contenuti e potrebbe bannarti (via @otto). Quindi questa strada è impraticabile finché non verrà rilasciata un'API pubblica.

Non ancora.
Otto ha detto "presto" mercoledì. Ma è andato a un barbecue questo fine settimana, quindi "presto" probabilmente significa "questo mese". ;)
Modifica:
Otto42: @Ipstenu @EricMann Ho il codice per farlo, ma non è ancora stato distribuito. C'è qualche discussione sul modo migliore. Sarà disponibile prima o poi.

I plugin preferiti sono stati aggiunti all'API di WordPress.org. C'è una nuova funzionalità nella versione 3.5 che ti permette di accedere ai tuoi preferiti dall'installatore dei plugin.
Vedi http://core.trac.wordpress.org/ticket/22002 per informazioni su come viene utilizzato nel core.
L'API ti permette di recuperare un oggetto che contiene ogni plugin con:
- nome
- descrizione
- autore
- valutazione
- data ultimo aggiornamento
- log delle modifiche
- versione stabile
- compatibilità con la versione di wp
Per recuperare l'oggetto
Effettua una chiamata a http://api.wordpress.org/plugins/info/1.0/ utilizzando wp_remote_post passando un array di argomenti incluso l'action che sarebbe 'query_plugins' e lo username di wp.org da cui recuperare i preferiti.
$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
Prima di ottenere un oggetto pulito e ordinato, devi gestire gli errori e fare qualche parsing. Ecco una funzione di esempio che restituirà un oggetto pulito con tutti i dettagli del plugin.
function api( $action, $args ) {
if ( is_array( $args ) )
$args = (object) $args;
$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', 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 inaspettato. Potrebbe esserci un problema con WordPress.org o la configurazione di questo server. Se continui ad avere problemi, prova i <a href="http://wordpress.org/support/">forum di supporto</a>.' ), $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 inaspettato. Potrebbe esserci un problema con WordPress.org o la configurazione di questo server. Se continui ad avere problemi, prova i <a href="http://wordpress.org/support/">forum di supporto</a>.' ), wp_remote_retrieve_body( $request ) );
}
return apply_filters( 'c3m_favorite_results', $res, $action, $args );
}
Utilizzo
Questo esempio di utilizzo ti darà una lista non ordinata dei plugin preferiti insieme a un link al plugin su WordPress.org, un link all'URI dell'autore e la valutazione a stelle.
$api_data = api( 'query_plugins', array( 'user' => 'my_dot_org_username' ) );
$api_plugins = $api_data->plugins;
echo '<ul class="c3m-favorites">';
foreach( $api_plugins as $plugin ) {
$name = $plugin->name; ?>
<li><strong><a target="_blank" href="http://wordpress.org/extend/plugins/<?php echo $plugin->slug ?>/"><?php echo esc_html( $name ); ?></a></strong><br>
<div class="star-holder" title="<?php printf( _n( '(basato su %s valutazione)', '(basato su %s valutazioni)', $plugin->num_ratings ), number_format_i18n( $plugin->num_ratings ) ); ?>">
<div class="star star-rating" style="width: <?php echo esc_attr( str_replace( ',', '.', $plugin->rating ) ); ?>px"></div></div>
<em><?php _e('Di: ') ?></em> <?php echo links_add_target( $plugin->author, '_blank' ). '<br>'; ?>
</li><?php
}
echo '</ul>';
Risultato
Screenshot del widget dal mio plugin Favorite Plugins Widget: http://wordpress.org/extend/plugins/favorite-plugins-widget/
