web-dev-qa-db-ja.com

WP.org API:プラグインダウンロードへのアクセス "Today"の価値?

私は開発者が彼らが開発したものに関して彼らのサイトに表示したいかもしれないダウンロードのための統計と他の様々な情報を表示するためのプラグインを開発しています。

私は私が必要とするものについての文書を見つけ、私が使うことができる他の文書化されていないリソースを掘り下げました、しかし私がまだ掘り出すことができなかった一つの事柄プラグインの統計ページ。

履歴テーブルの他のすべての統計は、以下の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.org APIのCodexのドキュメントはほとんど存在しません。システムについてある程度の知識を持っている人が、それをいくつか記入することができれば、それは素晴らしいことです。それがどのように機能するかは私にとって直感的ではないようです。

注:これは1週間、 wp.orgフォーラム に投稿されていたので、私は試してみると思いましたこれ以上のより良い結果

3
Dan

/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部分はオプションです。

また、Nice JSON形式でダウンロードの総数を取得するには、次のものを使用できます。

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

返事

ローカル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';
3
kaiser

これがひとつのアイデアです。

あなたはいつでもプラグインのダウンロード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は将来変更される可能性があることを覚えておいてください;-)

2
birgire

APIはこの情報を提供していないようです。プラグインを入手できる2つのデータセットは次のとおりです。

http://api.wordpress.org/plugins/info/1.0/[plugin name]
これは、1日あたりではなく、合計ダウンロードを返します。

http://api.wordpress.org/stats/plugin/1.0/[plugin name]
これはバージョンを返します

あなたはHTMLを削り取らなければならないでしょう。

1
Wyck