WordPress.org API - Получение избранных плагинов авторов
В репозитории плагинов WordPress.org недавно появились новые функции. Наиболее заметные изменения касаются страницы плагина и профиля автора, где теперь отображаются избранные плагины автора.
Я хочу создать виджет для сайдбара, который будет показывать избранные плагины авторов. Я знаю, как использовать API для получения статистики плагинов, а также ознакомился с документацией API от DD32, но не нашел информации о профилях или о том, существует ли вообще API для профилей.
Я попытался использовать wp_remote_get
и смог получить HTML-код страницы профиля, но пока не пробовал его парсить, так как этот способ кажется слишком громоздким. Было бы здорово получить данные профиля в формате XML или JSON.
Существуют ли какие-то методы, которые я упускаю, или API для профилей действительно нет?
Обновление:
Я выложил бета-версию на GitHub, использующую парсер SimpleHTML Dom. Думаю, мне не удастся получить рейтинги в виде звездочек, но я доволен первыми результатами без использования API.
WordPress.org запрещает парсинг контента и может заблокировать доступ (via @otto). Поэтому этот вариант не подходит, пока не будет выпущен публичный API.

Ещё нет.
Отто сказал «скоро» в среду. Но в эти выходные он отправился на барбекю, так что «скоро», вероятно, означает «в этом месяце». ;)
Редактирование:
Otto42: @Ipstenu @EricMann У меня есть код для этого, но он ещё не развёрнут. Идут споры о наилучшем способе. Это появится со временем.

Избранные плагины были добавлены в API WordPress.org. В версии 3.5 появилась новая функция, которая позволяет получать доступ к вашим избранным плагинам прямо из установщика плагинов.
Подробнее о том, как это используется в ядре WordPress, можно узнать по ссылке: http://core.trac.wordpress.org/ticket/22002.
API позволяет получить объект, содержащий информацию о каждом плагине:
- название
- описание
- автор
- рейтинг
- дата последнего обновления
- история изменений
- стабильная версия
- совместимость с версией WordPress
Как получить объект
Отправьте запрос к http://api.wordpress.org/plugins/info/1.0/ с помощью функции wp_remote_post
, передав массив аргументов, включая действие 'query_plugins'
и имя пользователя на WordPress.org, чьи избранные плагины нужно получить.
$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
Прежде чем получить удобный объект, необходимо выполнить обработку ошибок и другие преобразования. Вот пример функции, которая возвращает чистый объект со всеми деталями плагинов.
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', __( 'Произошла непредвиденная ошибка. Возможно, проблема связана с WordPress.org или настройками сервера. Если проблема сохраняется, попробуйте обратиться на <a href="http://wordpress.org/support/">форум поддержки</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', __( 'Произошла непредвиденная ошибка. Возможно, проблема связана с WordPress.org или настройками сервера. Если проблема сохраняется, попробуйте обратиться на <a href="http://wordpress.org/support/">форум поддержки</a>.' ), wp_remote_retrieve_body( $request ) );
}
return apply_filters( 'c3m_favorite_results', $res, $action, $args );
}
Пример использования
Этот пример выводит ненумерованный список избранных плагинов с ссылками на плагин на WordPress.org, ссылкой на автора и рейтингом в виде звезд.
$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( '(на основе %s оценки)', '(на основе %s оценок)', $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('Автор: ') ?></em> <?php echo links_add_target( $plugin->author, '_blank' ). '<br>'; ?>
</li><?php
}
echo '</ul>';
Результат
Скриншот виджета из плагина Favorite Plugins Widget: http://wordpress.org/extend/plugins/favorite-plugins-widget/
