API do WP.org: Acessando o valor “Today” dos downloads de plugins?

3

Estou desenvolvendo um plug-in para exibir estatísticas de downloads e várias outras informações que os desenvolvedores podem querer exibir em seus sites sobre o que eles desenvolveram.

Eu encontrei documentação sobre algumas das coisas que eu preciso e desenterrei alguns outros recursos não documentados que eu posso usar, mas a única coisa que eu ainda não consegui descobrir é onde eu posso recuperar os downloads hoje. mostrado na página de estatísticas de um plugin.

Todas as outras estatísticas na tabela de histórico podem ser analisadas a partir do URL abaixo, mas esse link não fornece informações sobre um dia que está em andamento no momento: http://api.wordpress.org/stats/plugin/1.0/downloads.php?slug=[plugin-slug]

Para os curiosos, as outras APIs já em uso são:

http://api.wordpress.org/stats/plugin/1.0/[plugin-slug] (versões do plug-in em uso)

e

http://api.wordpress.org/stats/plugin/1.0/ (as solicitações POST retornam um monte de dados sobre o plug-in)

Eu sei que existem algumas soluções que envolvem apenas raspar a página HTML para os dados necessários, mas a menos que realmente não haja outra opção (o que parece improvável), eu não quero adotar essa abordagem.

Como uma nota lateral, a documentação no Codex para a API do WP.org é quase inexistente. Seria incrível se alguém com algum conhecimento do sistema pudesse preenchê-lo! Muito do que funciona não parece intuitivo para mim.

NOTA: Isso foi publicado anteriormente no fórum do wp.org por uma semana com zero respostas, então pensei em tentar um resultado melhor aqui.

    
por Dan 02.02.2013 / 21:40

4 respostas

3

Resposta tardia

Um mini plugin como API local

Este plugin dá a você - depois de preencher o espaço do seu repositório - as estatísticas de downloads como array. As chaves são as datas, os valores os 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
    );
}

Uso

Para obter apenas o último dia + o número do download:

$data = array_unshift( wpse84254_get_download_stats );
echo key( $data ).' had '.$data.' Downloads';
    
por kaiser 07.02.2013 / 14:53
3

O ponto final /stats/plugin/1.0/downloads.php retorna uma lista JSON o número de downloads para cada dia:

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

Substitua {slug} pelo seu slug de plug-in.

O parâmetro &limit=1 define quantos dias você deseja ir. O último dia é presumivelmente "hoje".

A parte &callback=someJsFunction é opcional.

Observe também que, para obter o número total de downloads em um formato JSON interessante, você pode usar:

http://api.wordpress.org/plugins/info/1.0/{slug}.json
    
por scribu 08.04.2014 / 14:03
2

Aqui está uma ideia:

Você sempre tem a possibilidade de copiar a página de download do plugin:

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

enquanto você não tem nenhuma fonte json / xml / rss com o contador de downloads de hoje.

A parte html em que você está interessado tem este formulário:

<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>

Você pode usar o wp_remote_get () e armazenar os resultados em cache.

Aqui está uma função para buscar os dados, é necessário um plugin_slug (como akismet) como entrada:

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

Você pode usá-lo assim:

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

e lhe dará resultados como:

 Downloads today: 7,397

ps: lembre-se que o html da página pode mudar no futuro; -)

    
por birgire 03.02.2013 / 16:30
1

A API não parece fornecer essa informação. Os dois conjuntos de dados que você pode pegar para plugins são:

http://api.wordpress.org/plugins/info/1.0/[plugin name]
Isso retornará os downloads total , não por dia.

http://api.wordpress.org/stats/plugin/1.0/[plugin name]
Isso retornará as versões

Você terá que raspar o HTML.

    
por Wyck 03.02.2013 / 17:51