WordPress.org API - Получение избранных плагинов авторов

17 мая 2012 г., 20:44:18
Просмотры: 984
Голосов: 7

В репозитории плагинов WordPress.org недавно появились новые функции. Наиболее заметные изменения касаются страницы плагина и профиля автора, где теперь отображаются избранные плагины автора.

Я хочу создать виджет для сайдбара, который будет показывать избранные плагины авторов. Я знаю, как использовать API для получения статистики плагинов, а также ознакомился с документацией API от DD32, но не нашел информации о профилях или о том, существует ли вообще API для профилей.

Я попытался использовать wp_remote_get и смог получить HTML-код страницы профиля, но пока не пробовал его парсить, так как этот способ кажется слишком громоздким. Было бы здорово получить данные профиля в формате XML или JSON.

Существуют ли какие-то методы, которые я упускаю, или API для профилей действительно нет?

Обновление:

Я выложил бета-версию на GitHub, использующую парсер SimpleHTML Dom. Думаю, мне не удастся получить рейтинги в виде звездочек, но я доволен первыми результатами без использования API.

WordPress.org запрещает парсинг контента и может заблокировать доступ (via @otto). Поэтому этот вариант не подходит, пока не будет выпущен публичный API.

4
Комментарии

В качестве временного решения, пока Otto не реализует API профилей - используйте SimpleHTMLDom Parser для парсинга нужного вам контента. Если вы можете программно получить URL профиля автора, то вы на правильном пути. Позже замените на официальные вызовы API, когда они будут готовы. http://simplehtmldom.sourceforge.net/ & http://simplehtmldom.sourceforge.net/manual.htm

Adam Adam
17 мая 2012 г. 22:20:24

Отличная идея. Я уже могу формировать URL-адреса и получать HTML-код страницы.

Chris_O Chris_O
17 мая 2012 г. 22:28:35

Вы можете получить рейтинг в виде звезд, скопировав CSS-свойства для селекторов div.star-holder .star-rating и подключив их из таблицы стилей плагина. Убедитесь, что вы также скопировали фоновое изображение для звезд рейтинга. Затем, когда вы парсите элемент <div class="star-rating" style="width:??px"></div>, ваши CSS-свойства будут отображать звезды (с любым рейтингом), так как их отображение контролируется шириной div. Легко и просто.

Adam Adam
18 мая 2012 г. 14:49:03

Кроме того, чтобы дифференцировать звезды, просто измените их цвет в Photoshop, чтобы это не была прямая копия синего цвета WordPress. Или, если вы хотите подойти к вопросу более оригинально, создайте серию цветовых вариаций, из которых пользователи смогут выбирать, чтобы они соответствовали эстетике их сайта. Я часто использую SimpleHTMLDom Parser в случаях, когда нет API или, скажем, RSS-ленты (если это моя цель). Он так же эффективен, как и настоящий API, хотя если что-то изменится, вам придется обновить свой код, чтобы это учесть. Но при отсутствии реального доступа к API он может предоставить вам доступ к контенту.

Adam Adam
18 мая 2012 г. 14:52:32
Все ответы на вопрос 2
1

Ещё нет.

Отто сказал «скоро» в среду. Но в эти выходные он отправился на барбекю, так что «скоро», вероятно, означает «в этом месяце». ;)

Редактирование:

Otto42: @Ipstenu @EricMann У меня есть код для этого, но он ещё не развёрнут. Идут споры о наилучшем способе. Это появится со временем.

17 мая 2012 г. 20:50:39
Комментарии

Понял... BBQ всегда важнее WordPress.

Chris_O Chris_O
17 мая 2012 г. 20:52:03
0

Избранные плагины были добавлены в 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/

30 сент. 2012 г. 00:33:15