web-dev-qa-db-de.com

WordPress.org API - Holen Sie sich die Lieblings-Plugins der Plugin-Autoren

Das WordPress.org-Plugin-Repository wurde kürzlich um einige Elemente erweitert. Vor allem die Änderungen an der Plugin-Seite und der Autoren-Profil-Seite, auf der jetzt ein Lieblings-Plugin des Autors angezeigt wird.

Ich möchte ein Seitenleisten-Widget-Plugin erstellen, das die Favoriten eines Plugins des Autors anzeigt. Ich weiß, wie man die API verwendet, um Plugin-Statistiken zu erhalten, und habe auch DD32s API-Dokumente gelesen, aber ich glaube nicht, dass Dokumente in Profilen existieren oder ob es überhaupt eine Profil-API gibt.

Ich habe versucht, wp_remote_get zu verwenden und bin in der Lage, den HTML-Text von der Profilseite abzurufen, habe aber noch nicht versucht, ihn zu analysieren, da dies eine Art und Weise zu chaotisch zu sein scheint. Es wäre toll, wenn ich das Profil in XML oder JSON bekommen könnte.

Gibt es Methoden, die mir fehlen oder gibt es eine Profil-API?

Bearbeiten:

Ok, ich habe eine Betaversion von Github, die den SimpleHTML Dom-Parser verwendet. Ich glaube nicht, dass ich in der Lage sein werde, die Sternebewertung zu erhalten, aber ich bin ziemlich zufrieden mit den Ergebnissen, wenn ich zum ersten Mal ohne API auskomme.

WordPress.org erlaubt kein Scrapen von Inhalten und verbietet Sie (via @otto). Dies ist also ein No Go, bis eine öffentliche API veröffentlicht wird.

7
Chris_O

Die bevorzugten Plugins wurden der WordPress.org-API hinzugefügt. In 3.5 gibt es eine neue Funktion, mit der Sie über das Plugin-Installationsprogramm auf Ihre Favoriten zugreifen können.

Informationen zur Verwendung in Core finden Sie unter http://core.trac.wordpress.org/ticket/22002 .

Mit der API können Sie ein Objekt abrufen, das alle Plugins enthält

  • name
  • beschreibung
  • autor
  • bewertung
  • datum der letzten Aktualisierung
  • änderungsprotokoll
  • stabile Version
  • funktioniert mit wp version

Das Objekt abrufen

Rufen Sie http://api.wordpress.org/plugins/info/1.0/ mit wp_remote_post an und übergeben Sie eine Reihe von Argumenten, einschließlich der Aktion 'query_plugins' und des Benutzernamens der wp dot org, um die Favoriten abzurufen von.

$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );

Bevor Sie ein Nizza sauberes Objekt haben, müssen Sie einige Fehlerbehandlung und andere Analyse durchführen. Hier ist eine Beispielfunktion, die ein Nice Clean-Objekt zurückgibt, das alle Plugin-Details enthält.

function api( $action, $args ) {
        if ( is_array( $args ) )
            $args = (object) $args;

        $request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
        if ( is_wp_error($request) ) {
            $res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), $request->get_error_message() );
        } else {
            $res = maybe_unserialize( wp_remote_retrieve_body( $request ) );
            if ( ! is_object( $res ) && ! is_array( $res ) )
                $res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), wp_remote_retrieve_body( $request ) );
        }

        return apply_filters( 'c3m_favorite_results', $res, $action, $args );
    }

Verwendungszweck

In diesem Beispiel erhalten Sie eine ungeordnete Liste der bevorzugten Plugins sowie einen Link zum Plugin auf dot org, einen Link zum Autor uri und die Sternebewertung.

$api_data = api( 'query_plugins', array( 'user' => 'my_dot_org_username' ) );
$api_plugins = $api_data->plugins;

echo '<ul class="c3m-favorites">';
        foreach( $api_plugins as $plugin ) {

            $name = $plugin->name; ?>
            <li><strong><a target="_blank" href="http://wordpress.org/extend/plugins/<?php echo $plugin->slug ?>/"><?php echo esc_html( $name ); ?></a></strong><br>

                <div class="star-holder" title="<?php printf( _n( '(based on %s rating)', '(based on %s ratings)', $plugin->num_ratings ), number_format_i18n( $plugin->num_ratings ) ); ?>">
                <div class="star star-rating" style="width: <?php echo esc_attr( str_replace( ',', '.', $plugin->rating ) ); ?>px"></div></div>

                <em><?php _e('By: ') ?></em> <?php echo links_add_target( $plugin->author, '_blank' ). '<br>'; ?>
            </li><?php
        }
        echo '</ul>';

Ergebnis

enter image description here

Widget Screenshot von meinem Lieblings Plugin Widget Plugin: http://wordpress.org/extend/plugins/favorite-plugins-widget/

5
Chris_O

Noch nicht.

Otto sagte am Mittwoch "bald". Aber er ging an diesem Wochenende zum Grillen, also ist 'bald' wahrscheinlich 'Diesen Monat'. ;)

Bearbeiten:

Otto42: @Ipstenu @EricMann Ich habe Code, um das zu tun, aber noch nicht bereitgestellt. Einige Debatten über den besten Weg. Es wird irgendwann da sein.

4
Ipstenu