webentwicklung-frage-antwort-db.com.de

WP.org API: Zugriff auf Plugin-Downloads "Today" -Wert?

Ich entwickle ein Plugin, um Statistiken für Downloads und verschiedene andere Informationen anzuzeigen, die Entwickler auf ihren Websites über das, was sie entwickelt haben, anzeigen möchten.

Ich habe eine Dokumentation zu einigen der von mir benötigten Informationen gefunden und andere undokumentierte Ressourcen ausgegraben, die ich verwenden kann, aber das einzige, was ich immer noch nicht herausfinden konnte, ist, wo ich die Informationen zum heutigen Download abrufen kann, die auf einer angezeigt werden Die Statistikseite des Plugins.

Alle anderen Statistiken in der Verlaufstabelle können über die unten stehende URL analysiert werden. Dieser Link enthält jedoch keine Informationen zu einem aktuellen Tag: http://api.wordpress.org/stats/plugin/1.0/downloads.php?slug=[plugin-slug]

Für die Neugierigen sind die anderen APIs, die bereits verwendet werden:

http://api.wordpress.org/stats/plugin/1.0/[plugin-slug] (verwendete Plugin-Versionen)

und

http://api.wordpress.org/stats/plugin/1.0/ (POST-Anfragen geben eine Reihe von Daten zum Plugin zurück)

Ich weiß, dass es einige Lösungen gibt, bei denen nur die HTML-Seite nach den benötigten Daten durchsucht wird, aber ich möchte diesen Ansatz nicht wählen, es sei denn, es gibt wirklich keine andere Option (was unwahrscheinlich erscheint).

Als Randnotiz ist die Dokumentation im Codex für die WP.org-API fast nicht vorhanden. Es wäre erstaunlich, wenn jemand, der etwas über das System weiß, es ausfüllen könnte! Ein Großteil der Funktionsweise erscheint mir nicht intuitiv.

HINWEIS: Dies wurde zuvor im wp.org-Forum für eine Woche mit null Antworten gepostet, sodass ich dachte, ich würde hier ein besseres Ergebnis erzielen .

3
Dan

Der /stats/plugin/1.0/downloads.php-Endpunkt gibt eine JSON-Liste mit der Anzahl der Downloads für jeden Tag zurück:

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

Ersetze {slug} durch deinen Plugin-Slug.

Der Parameter &limit=1 legt fest, wie viele Tage Sie zurücklegen möchten. Der letzte Tag ist vermutlich "heute".

Der Teil &callback=someJsFunction ist optional.

Beachten Sie auch, dass Sie Folgendes verwenden können, um die Gesamtzahl der Downloads in einem Nice JSON-Format zu erhalten:

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

Späte Antwort

Ein Mini-Plugin als lokale API

Dieses Plug-in gibt Ihnen - nachdem Sie den Slug Ihres Repositorys ausgefüllt haben - die Download-Statistiken als Array. Die Schlüssel sind die Daten, die Werte die 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
    );
}

Verwendungszweck

So erhalten Sie nur den letzten Tag und die Download-Nummer:

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

Hier ist eine Idee:

Sie haben immer die Möglichkeit, die Download-HTML-Seite des Plugins zu durchsuchen:

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

mit dem heutigen Download-Zähler haben Sie keine json/xml/rss-Quellen.

Der HTML-Teil, an dem Sie interessiert sind, hat folgende Form:

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

Sie können wp_remote_get () verwenden und die Ergebnisse zwischenspeichern.

Hier ist eine Funktion zum Abrufen der Daten, die einen plugin_slug (wie akismet) als Eingabe benötigt:

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

Du kannst es so benutzen:

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

und es gibt Ihnen Ergebnisse wie:

 Downloads today: 7,397

ps: denk nur daran, dass sich das html der seite in zukunft ändern kann ;-)

2
birgire

Die API scheint diese Informationen nicht bereitzustellen. Die zwei Datensätze, die Sie für Plugins abrufen können, sind:

http://api.wordpress.org/plugins/info/1.0/[plugin name]
Dies gibt total Downloads zurück, nicht pro Tag.

http://api.wordpress.org/stats/plugin/1.0/[plugin name]
Dadurch werden die Versionen zurückgegeben

Sie müssen das HTML kratzen.

1
Wyck