Intereting Posts
Плагин назначения не отображает все встречи Загружаемый контент только для подписчиков? Исключить сообщения из виджета, пока сообщение отображается на домашнем, одноместном и категориях Пользовательская таксономия создает нежелательные термины Integer при сохранении сообщения Получить ссылку на общую таксономию между несколькими типами сообщений категории на странице вложений Я сделал WordPress Multisite. И теперь все не отображается должным образом previous_posts_link возвращает null при запросе пользовательского типа сообщения Пользовательский цикл для пользовательского типа сообщения для текущего автора Как разрешить пользователям просматривать ожидающие сообщения определенного типа сообщений? Размещение CSS / JS в верхнем или нижнем колонтитуле (inline) – попытка применить к нескольким шаблонам Только показывать div на домашней странице / блоге в wordpress / php Просмотр темы WordPress 404 не работает на основном сайте на многопользовательском Можно ли удалить «стандартный» почтовый формат?

API WP.org: доступ к загрузке плагинов «Сегодня»?

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

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

Все остальные статистические данные в таблице истории можно разобрать по приведенному ниже URL, но эта ссылка не содержит информации о текущем дне: http://api.wordpress.org/stats/plugin/1.0/downloads.php?slug=[plugin-slug]

Для тех, кому интересно, другие API, которые уже используются:

http://api.wordpress.org/stats/plugin/1.0/[plugin-slug] (используются версии плагина)

а также

http://api.wordpress.org/stats/plugin/1.0/ (запросы POST возвращают кучу данных о плагине)

Я знаю, что есть некоторые решения, которые включают только очистку страницы HTML для необходимых данных, но если нет другого варианта (что кажется маловероятным), я не хочу использовать этот подход.

В качестве дополнительной заметки документация в Codex для WP.org API практически отсутствует. Было бы замечательно, если бы кто-то с некоторыми знаниями о системе мог заполнить его некоторыми! Многое, как это работает, не кажется мне интуитивным.

ПРИМЕЧАНИЕ. Это было ранее опубликовано на форуме wp.org в течение недели с нулевыми ответами, поэтому я подумал, что я попытаюсь найти лучший результат здесь.

Поздний ответ

Мини-плагин как локальный API

Этот плагин дает вам – после того, как вы заполнили пул вашего репозитория – статистика загрузки в виде массива. Ключами являются даты, значения загрузок.

 <?php /** Plugin Name: (#84254) Plugin stats API */ function wpse84254_get_download_stats() { $response = wp_remote_request( add_query_arg( 'slug' ,'YOUR-REPO-PLUGIN-SLUG' ,'http://wordpress.org/extend/stats/plugin-xml.php' ) ,array( 'sslverify' => false ) ); // Check if response is valid if ( is_wp_error( $response ) ) return $response->get_error_message(); if ( empty( $response ) OR 200 !== wp_remote_retrieve_response_code( $response ) OR 'OK' !== wp_remote_retrieve_response_message( $response ) ) return _e( 'No Stats available', 'pluginstats_textdomain' ); $response = wp_remote_retrieve_body( $response ); $response = (array) simplexml_load_string( $response )->children()->chart_data; $response = (array) $response['row']; $dates = (array) array_shift( $response ); $dates = $dates['string']; // Get rid of unnecessary prepended empty object array_shift( $dates ); $downloads = (array) array_pop( $response )->number; if ( count( $dates ) !== count( $downloads ) ) return; $result = array_combine( $dates ,$downloads ); return array_map( 'absint' ,$result ); } 

Применение

Чтобы получить только последний день + номер загрузки:

 $data = array_unshift( wpse84254_get_download_stats ); echo key( $data ).' had '.$data.' Downloads'; 

/stats/plugin/1.0/downloads.php точка /stats/plugin/1.0/downloads.php возвращает список JSON для количества загрузок за каждый день:

 http://api.wordpress.org/stats/plugin/1.0/downloads.php?slug={slug}&limit=1&callback=someJsFunction 

Замените {slug} своим плагином.

Параметр &limit=1 устанавливает, сколько дней назад вы хотите пойти. Последний день, по-видимому, «сегодня».

Часть &callback=someJsFunction является необязательной.

Также обратите внимание, что для того, чтобы получить общее количество загрузок в хорошем формате JSON, вы можете использовать:

 http://api.wordpress.org/plugins/info/1.0/{slug}.json 

Вот одна идея:

У вас всегда есть возможность очистить страницу загрузки html плагина:

 http://wordpress.org/extend/plugins/some-plugin-slug/stats/ 

в то время как у вас нет источников json / xml / rss с сегодняшним счетчиком загрузки.

Часть html, которую вы заинтересовали, имеет следующую форму:

 <div id="history" class="left"> <h4>History</h4> <table> <tr> <th scope="row">Today</th> <td>7,390</td> </tr> <tr> <th scope="row">Yesterday</th> <td>12,262</td> </tr> <tr> <th scope="row">Last Week</th> <td>130,130</td> </tr> <tr class="last-child"> <th scope="row">All Time</th> <td>13,639,901</td> </tr> </table> </div> 

Вы можете использовать wp_remote_get () и кэшировать результаты.

Вот функция для извлечения данных, в качестве входных данных требуется plugin_slug (например, akismet):

 function get_todays_downloads($plugin_slug){ $downloads_today="?"; $url="http://wordpress.org/extend/plugins/".$plugin_slug."/stats/"; // fetch the html page: // $response = wp_remote_get( $url ); if( is_wp_error( $response ) ) { $error_message = $response->get_error_message(); //echo "Something went wrong:". $error_message; // let's show "error" if we have problems fetching the page: // $downloads_today="error"; } else { // get the body of the page: // $html=$response['body']; // let's strip out the newlines and tabs: // $html=str_replace("\n","",$html); $html=str_replace("\t","",$html); // let's find this type of html string: // Today</th><td>12</td></tr> // preg_match('/Today<\/th><td>([0-9,]+)<\/td><\/tr>/i', $html, $matches); // check if we got a match: // if(isset($matches[1])){ $downloads_today=$matches[1]; } } return $downloads_today; } 

Вы можете использовать его следующим образом:

 // let's find out how many times the Akismet plugin has been downloaded today // echo "Downloads today: ".get_todays_downloads('akismet'); 

и он даст вам результаты, такие как:

  Downloads today: 7,397 

ps: просто помните, что html страницы может измениться в будущем 😉

API, похоже, не предоставляет эту информацию. Два набора данных, которые вы можете захватить для плагинов:

http://api.wordpress.org/plugins/info/1.0/[plugin name]
Это вернет общее количество загрузок, а не в день.

http://api.wordpress.org/stats/plugin/1.0/[plugin name]
Это вернет версии

Вам придется очистить HTML.