WP.org API: Accessing plugin downloads “Today” value?

I’m developing a plugin to display stats for downloads and various other information that developers might want to display on their sites about what they have developed.

I’ve found documentation on some of what I need and dug up some other undocumented resources I can use, but the one thing I still haven’t been able to dig up is where I can retrieve the downloads today information that is shown on a plugin’s stats page.

All the other stats in the history table could be parsed from the URL below, but that link provides no information on a day that is currently in progress: http://api.wordpress.org/stats/plugin/1.0/downloads.php?slug=[plugin-slug]

For those curious, the other APIs already being used are:

http://api.wordpress.org/stats/plugin/1.0/[plugin-slug] (plugin versions in use)

and

http://api.wordpress.org/stats/plugin/1.0/ (POST requests return a bunch of data about plugin)

I know there are some solutions out there that involve just scraping the HTML page for the data needed, but unless there really is no other option (which seems unlikely) I don’t wish to take that approach.

As a side note, the documentation in the Codex for the WP.org API is almost non-existent. It would be amazing if someone with some knowledge of the system could fill it out some! A lot of how it works doesn’t seem intuitive to me.

NOTE: This was previously posted on the wp.org forum for a week with zero responses so I thought I would try for a better result over here.

4 Answers
4

Late answer

A mini plugin as local API

This plugin gives you – after you filled in the slug of your repository – the downloads stats as array. The keys are the dates, the values the downloads.

<?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
    );
}

Usage

To get only the last day + the download number:

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

Leave a Comment