Cum să obții pluginurile favorite ale autorilor folosind API-ul WordPress.org
Au fost câteva adăugiri recente în repository-ul de pluginuri WordPress.org. Cele mai notabile modificări sunt cele de pe pagina pluginului și pagina de profil a autorului, care acum afișează pluginurile favorite ale autorilor.
Doresc să creez un widget pentru bara laterală care să afișeze pluginurile favorite ale unui autor. Știu cum să utilizez API-ul pentru a obține statisticile pluginurilor și am citit de asemenea documentația API a lui DD32, dar nu cred că există documentație pentru profile sau dacă există un API pentru profile.
Am încercat să folosesc wp_remote_get
și pot obține codul HTML al paginii de profil, dar nu am încercat încă să-l analizez, deoarece pare o metodă prea complicată. Ar fi minunat dacă aș putea obține profilul în XML sau JSON.
Există vreo metodă pe care o omit sau există un API pentru profile?
Edit:
Am o versiune beta pe GitHub care folosește parserul SimpleHTML Dom. Nu cred că voi putea obține rating-urile cu stele, dar sunt mulțumit de rezultatele obținute fără un API.
WordPress.org nu permite scraping-ul de conținut și te poate bloca (via @otto). Așadar, această metodă nu este viabilă până când nu va fi lansat un API public.

Încă nu.
Otto a spus "curând" miercuri. Dar a fost la un grătar în weekend, așa că "curând" înseamnă probabil "luna aceasta". ;)
Edit:
Otto42: @Ipstenu @EricMann Am codul pentru asta, dar nu e implementat încă. Există dezbateri privind cea mai bună metodă. Va fi disponibil într-un final.

Pluginurile favorite au fost adăugate în API-ul WordPress.org. Există o nouă funcționalitate în versiunea 3.5 care vă permite să accesați favoritele dvs. din instalatorul de pluginuri.
Consultați http://core.trac.wordpress.org/ticket/22002 pentru informații despre modul în care este utilizată în nucleu.
API-ul vă permite să obțineți un obiect care conține fiecare plugin
- nume
- descriere
- autor
- evaluare
- data ultimei actualizări
- jurnal de modificări
- versiune stabilă
- compatibil cu versiunea wp
Pentru a obține obiectul
Faceți un apel către http://api.wordpress.org/plugins/info/1.0/ folosind wp_remote_post, transmitând un array de argumente, inclusiv acțiunea care ar fi 'query_plugins' și numele de utilizator wp.org pentru a prelua favoritele.
$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
Înainte de a avea un obiect curat și organizat, trebuie să faceți o gestionare a erorilor și alte operații de parsare. Iată o funcție exemplu care va returna un obiect curat care conține toate detaliile pluginului.
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', __( 'A apărut o eroare neașteptată. Ceva poate fi în neregulă cu WordPress.org sau configurația acestui server. Dacă problemele persistă, încercați pe <a href="http://wordpress.org/support/">forumurile de suport</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', __( 'A apărut o eroare neașteptată. Ceva poate fi în neregulă cu WordPress.org sau configurația acestui server. Dacă problemele persistă, încercați pe <a href="http://wordpress.org/support/">forumurile de suport</a>.' ), wp_remote_retrieve_body( $request ) );
}
return apply_filters( 'c3m_favorite_results', $res, $action, $args );
}
Utilizare
Acest exemplu de utilizare vă va oferi o listă neordonată de pluginuri favorite, împreună cu un link către plugin pe WordPress.org, un link către autor și evaluarea cu stele.
$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( '(bazat pe %s evaluare)', '(bazat pe %s evaluări)', $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('De: ') ?></em> <?php echo links_add_target( $plugin->author, '_blank' ). '<br>'; ?>
</li><?php
}
echo '</ul>';
Rezultat
Captură de ecran a widgetului din pluginul meu Favorite Plugins Widget: http://wordpress.org/extend/plugins/favorite-plugins-widget/
