web-dev-qa-db-fra.com

WP.org API: Accéder au téléchargement des plugins La valeur "Aujourd'hui"?

Je développe un plug-in pour afficher des statistiques sur les téléchargements et diverses autres informations que les développeurs pourraient vouloir afficher sur leurs sites concernant leurs développements.

J'ai trouvé de la documentation sur certains de mes besoins et trouvé d'autres ressources non documentées que je peux utiliser, mais la seule chose que je n'ai toujours pas été en mesure de creuser, c'est de pouvoir récupérer les téléchargements aujourd'hui. la page de statistiques du plugin.

Toutes les autres statistiques de la table d'historique peuvent être analysées à partir de l'URL ci-dessous, mais ce lien ne fournit aucune information sur un jour en cours: http://api.wordpress.org/stats/plugin/1.0/downloads.php?slug=[plugin-slug]

Pour ceux qui sont curieux, les autres API déjà utilisées sont:

http://api.wordpress.org/stats/plugin/1.0/[plugin-slug] (versions du plugin utilisées)

et

http://api.wordpress.org/stats/plugin/1.0/ (les requêtes POST renvoient un tas de données sur le plugin)

Je sais qu'il existe certaines solutions qui consistent simplement à gratter la page HTML pour les données nécessaires, mais à moins qu'il n'y ait vraiment aucune autre option (ce qui semble peu probable), je ne souhaite pas adopter cette approche.

En passant, la documentation dans le Codex pour l’API WP.org est presque inexistante. Ce serait étonnant si quelqu'un connaissant le système pouvait le remplir! Une grande partie de la façon dont cela fonctionne ne me semble pas intuitive.

NOTE: Cela a déjà été posté sur wp.org forum pendant une semaine avec zéro réponse, alors je pensais que je pourrais essayer d’obtenir un meilleur résultat ici.

3
Dan

Le noeud final /stats/plugin/1.0/downloads.php renvoie à une liste JSON le nombre de téléchargements pour chaque jour:

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

Remplacez {slug} par votre slug de plugin.

Le paramètre &limit=1 définit le nombre de jours de votre choix. Le dernier jour est vraisemblablement "aujourd'hui".

La partie &callback=someJsFunction est facultative.

Notez également que pour obtenir le nombre total de téléchargements au format JSON de Nice, vous pouvez utiliser:

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

Réponse tardive

Un mini plugin en tant qu'API locale

Ce plugin vous donne - après avoir renseigné le slug de votre référentiel - les statistiques de téléchargements sous forme de tableau. Les clés sont les dates, les valeurs les téléchargements.

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

Pour obtenir uniquement le dernier jour + le numéro de téléchargement:

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

Voici une idée:

Vous avez toujours la possibilité de supprimer la page HTML de téléchargement du plugin:

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

alors que vous n'avez aucune source json/xml/rss avec le compteur de téléchargement d'aujourd'hui.

La partie html qui vous intéresse a cette forme:

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

Vous pouvez utiliser wp_remote_get () et mettre en cache les résultats.

Voici une fonction pour récupérer les données, il faut un plugin_slug (comme akismet) en entrée:

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

Vous pouvez l'utiliser comme ceci:

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

et cela vous donnera des résultats comme:

 Downloads today: 7,397

ps: rappelez-vous que le code HTML de la page peut changer à l'avenir ;-)

2
birgire

L'API ne semble pas fournir ces informations. Les deux ensembles de données que vous pouvez récupérer pour les plugins sont:

http://api.wordpress.org/plugins/info/1.0/[plugin name]
Cela retournera total téléchargements, pas par jour.

http://api.wordpress.org/stats/plugin/1.0/[plugin name]
Ceci renverra les versions

Vous devrez gratter le code HTML.

1
Wyck