plugins_apiでWordPress.orgに公開したプラグインのDL数を取得する

前から宮内さんのサイト下部にある公式ディレクトリに登録されたプラグインのDL数を表示させるウィジェットを作ってみたかったので、手探りで色々と試してみた覚書です。 Plugins APIとは? こんな感じで使う(みたい) […]

広告ここから
広告ここまで

目次

    前から宮内さんのサイト下部にある公式ディレクトリに登録されたプラグインのDL数を表示させるウィジェットを作ってみたかったので、手探りで色々と試してみた覚書です。

    Plugins APIとは?

    こんな感じで使う(みたい)

    [php]
    require_once ABSPATH.’wp-admin/includes/plugin-install.php’;
    $query = ‘query_plugins’;
    $arg[‘author’] = "hideokamoto";
    $arg[‘fields’] = array(
    ‘downloaded’ => true,
    ‘rating’ => true,
    );
    $plugins = plugins_api($query,$arg)->plugins;
    var_dump($plugins);
    [/php]

    WP-CLI用のものを見ながら作ったので、余計なコードとか混ざっているかもです。

    plugins_apiの引数について

    第一引数に使えるのは「query_plugins、plugin_information、hot_tags」の3つで、取得する情報の種類を選べるみたいです。

    第二引数が取得するデータを絞り込みするためのものの様子で、author,fields,searchなどのキーを使って配列形式でデータを入れていくことになります。

    英語のドキュメントですが、引数についての詳細はこちらの記事が詳しいです。

    plugins_apiで取得したもの

    [php]
    array(2) {
    [0]=>
    object(stdClass)#454 (16) {
    ["name"]=>
    string(26) "Structured Data of JSON-LD"
    ["slug"]=>
    string(24) "ejls-easy-json-ld-setter"
    ["version"]=>
    string(3) "2.0"
    ["author"]=>
    string(51) "Hidetaka Okamoto"
    ["author_profile"]=>
    string(36) "//profiles.wordpress.org/hideokamoto"
    ["contributors"]=>
    array(1) {
    ["hideokamoto"]=>
    string(36) "//profiles.wordpress.org/hideokamoto"
    }
    ["requires"]=>
    string(9) "4.0-alpha"
    ["tested"]=>
    string(5) "4.1.1"
    ["compatibility"]=>
    array(1) {
    ["4.1"]=>
    array(1) {
    ["2.0"]=>
    array(3) {
    [0]=>
    int(100)
    [1]=>
    int(1)
    [2]=>
    int(1)
    }
    }
    }
    ["rating"]=>
    int(0)
    ["num_ratings"]=>
    string(1) "0"
    ["ratings"]=>
    array(5) {
    [1]=>
    int(0)
    [2]=>
    int(0)
    [3]=>
    int(0)
    [4]=>
    int(0)
    [5]=>
    int(0)
    }
    ["downloaded"]=>
    int(110)
    ["homepage"]=>
    string(54) "https://wordpress.org/plugins/ejls-easy-json-ld-setter/"
    ["description"]=>
    string(280) "
    Set Structured Data of "JSON-LD" to your WebSite.

    Schema type that you can use is "Article","Person","WebSite" and "searchAction".

    If Front Page, you can use "WebSite" and "searchAction".

    IF post.php and page.php, you can use "Article" and "Person".

    "
    ["short_description"]=>
    string(57) "Set Structured Data of "JSON-LD" to your WebSite."
    }
    [/php]

    せっかくなので表示させてみる

    せっかく取得したので、プラグイン名とダウンロード数を取り出してみます。

    [php]
    ///先ほどのコードの真下に書く
    $t = "<dl>";
    foreach($plugins as $plugin){
    $t .= "<dt>{$plugin->name}</dt><dd>{$plugin->downloaded}</dd>";
    }
    $t .= "</dl>";
    echo $t;
    [/php]

    取得した値をただforeachしてるだけですね。

    総DL数を取りたい場合は、ここで$plugin->downloadedを加算していけば良いと思います。

    スクリーンショット_031615_024516_PM

    Twenty Fifteenだとこんな感じで表示されます。

    ちなみに:plugins_apiがやってること

    WordPress/plugin-install.phpを見ればわかるのですが、WordPress.orgの情報をwp_remote_postで取得しているだけだったりします。

    ページを丸々POSTで取得してる分処理速度的なところはかなり微妙です。

    なのでプラグインをいっぱい公開されている方や、表示速度をこれ以上遅くしたくない方はリアルタイム性を捨ててどこかにデータを保持させたほうが良さそうです。

    というか宮内さんもAWSを間にかませているみたいな話をされていたので、たぶんそうされているのかなと思います。

    参考

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark