WordPress.org API - Obtener los plugins favoritos de los autores
Recientemente se han añadido algunas novedades al repositorio de plugins de WordPress.org. Lo más destacado son los cambios en la página de plugins y el perfil de autor, que ahora muestra los plugins favoritos de los autores.
Quiero crear un widget para la barra lateral que muestre los plugins favoritos de un autor. Sé cómo usar la API para obtener estadísticas de plugins y también he leído la documentación de la API de DD32, pero no creo que exista documentación sobre perfiles o si incluso existe una API para perfiles.
Intenté usar wp_remote_get
y puedo obtener el HTML de la página de perfil, pero no he intentado analizarlo todavía porque parece un método demasiado complicado. Sería genial si pudiera obtener el perfil en XML o JSON.
¿Existen métodos que me esté perdiendo o existe una API de perfiles?
Edición:
Ok, tengo una versión beta en GitHub usando el analizador SimpleHTML Dom. No creo que pueda obtener las valoraciones con estrellas, pero estoy bastante satisfecho con los resultados como primer intento sin una API.
WordPress.org no permite el scraping de contenido y puede banear tu acceso (vía @otto). Así que esto no es viable hasta que se lance una API pública.

Todavía no.
Otto dijo "pronto" el miércoles. Pero se fue a una parrillada este fin de semana, así que "pronto" probablemente signifique "este mes". ;)
Edición:
Otto42: @Ipstenu @EricMann Tengo código para hacer eso, pero aún no está implementado. Hay debate sobre la mejor manera. Estará allí eventualmente.

Los plugins favoritos se han añadido a la API de WordPress.org. Hay una nueva característica en la versión 3.5 que te permite acceder a tus favoritos desde el instalador de plugins.
Consulta http://core.trac.wordpress.org/ticket/22002 para obtener información sobre cómo se está utilizando en el núcleo.
La API te permite recuperar un objeto que contiene cada plugin
- nombre
- descripción
- autor
- valoración
- fecha de última actualización
- registro de cambios
- versión estable
- compatible con la versión de WP
Para recuperar el objeto
Realiza una llamada a http://api.wordpress.org/plugins/info/1.0/ usando wp_remote_post pasando un array de argumentos que incluyan la acción que sería 'query_plugins' y el nombre de usuario de WordPress.org para recuperar los favoritos.
$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
Antes de obtener un objeto limpio y ordenado, necesitas manejar errores y hacer algún análisis. Aquí hay una función de ejemplo que devolverá un objeto limpio con todos los detalles 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', __( 'Ocurrió un error inesperado. Puede que haya un problema con WordPress.org o con la configuración de este servidor. Si continúas teniendo problemas, por favor prueba los <a href="http://wordpress.org/support/">foros de soporte</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', __( 'Ocurrió un error inesperado. Puede que haya un problema con WordPress.org o con la configuración de este servidor. Si continúas teniendo problemas, por favor prueba los <a href="http://wordpress.org/support/">foros de soporte</a>.' ), wp_remote_retrieve_body( $request ) );
}
return apply_filters( 'c3m_favorite_results', $res, $action, $args );
}
Uso
Este ejemplo de uso te dará una lista desordenada de plugins favoritos junto con un enlace al plugin en WordPress.org, un enlace al URI del autor y la valoración en estrellas.
$api_data = api( 'query_plugins', array( 'user' => 'mi_usuario_de_wordpress' ) );
$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( '(basado en %s valoración)', '(basado en %s valoraciones)', $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('Por: ') ?></em> <?php echo links_add_target( $plugin->author, '_blank' ). '<br>'; ?>
</li><?php
}
echo '</ul>';
Resultado
Captura de pantalla del widget de mi plugin Favorite Plugins Widget: http://wordpress.org/extend/plugins/favorite-plugins-widget/
