WP.org API:访问插件下载“今日”的价值?

时间:2013-02-02 作者:Dan

我正在开发一个插件,用于显示下载的统计数据以及开发人员可能希望在其网站上显示的关于他们所开发内容的各种其他信息。

我已经找到了一些我需要的文档,并挖掘了一些我可以使用的其他未记录资源,但有一件事我仍然无法挖掘,那就是我可以在哪里检索插件统计页面上显示的今天下载的信息。

可以从下面的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页面上刮取所需的数据,但除非真的没有其他选择(这似乎不太可能),否则我不希望采用这种方法。

作为旁注,WP的Codex中的文档。org-API几乎不存在。如果有人对这个系统有一定的了解,可以填写一些,那将是令人惊讶的!对我来说,它的很多工作原理似乎并不直观。

注意:这是之前发布在wp.org forum 一个星期没有任何回应,所以我想我会在这里争取更好的结果

4 个回复
SO网友:kaiser

迟交的答复

一个作为本地API的迷你插件,该插件在您填写存储库的slug之后,为您提供作为数组的下载统计信息。关键是日期、值和下载。

<?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\';

SO网友:scribu

这个/stats/plugin/1.0/downloads.php endpoint返回一个JSON列表,列出每天的下载次数:

http://api.wordpress.org/stats/plugin/1.0/downloads.php?slug={slug}&limit=1&callback=someJsFunction
更换{slug} 使用插件slug。

这个&limit=1 参数设置要返回的天数。最后一天大概是“今天”。

这个&callback=someJsFunction 零件是可选的。

还请注意,为了以一种好的JSON格式获得总下载次数,您可以使用:

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

SO网友:birgire

这里有一个想法:

您始终可以刮取插件的下载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\\u remote\\u get()并缓存结果。

下面是一个获取数据的函数,它将plugin\\u 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将来可能会更改;-)

SO网友:Wyck

API似乎没有提供此信息。您可以为插件获取的两个数据集是:

http://api.wordpress.org/plugins/info/1.0/[plugin name]
这将返回总下载量,而不是每天。

http://api.wordpress.org/stats/plugin/1.0/[plugin name]
这将返回版本

您将不得不删除HTML。

结束

相关推荐

我的AJAX API插件不起作用

我创建了一个小小的AJAX插件来计算文章的点击率并绕过缓存,但它不起作用,也没有抛出任何错误。你能看出我做错了什么吗?<?php add_action(\'wp_ajax_nopriv_LogHit_callback\', \'LogHit_callback\'); add_action(\'wp_ajax_LogHit_callback\', \'LogHit_callback\'); function HitCount() { ?>