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

7

Das Plugin-Repository von WordPress.org wurde kürzlich erweitert. Vor allem die Änderungen an der Plugin-Seite und der Autorenprofilseite, auf denen jetzt die bevorzugten Plugins eines Autors angezeigt werden .

Ich möchte ein Seitenleisten-Widget-Plugin erstellen, das die Favoriten der Autoren eines Plugins anzeigt. Ich weiß, wie man die API verwendet, um Plugin-Statistiken abzurufen, und habe auch die API-Dokumente von DD32 gelesen, aber ich glaube nicht, dass Dokumente in Profilen vorhanden sind oder ob überhaupt eine Profil-API vorhanden ist.

Ich habe versucht, es zu verwenden, wp_remote_getund ich bin in der Lage, das Body-HTML von der Profilseite abzurufen, habe aber noch nicht versucht, es zu analysieren, da es ein Weg zu einer unordentlichen Vorgehensweise 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 Beta-Version auf Github mit dem SimpleHTML Dom Parser. Ich glaube nicht, dass ich in der Lage sein werde, die Sternebewertung zu erhalten, aber ich bin ziemlich zufrieden mit den Ergebnissen als erstes ohne API.

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

Chris_O
quelle
1
Als vorübergehende Lösung, bis Otto die Profil-API implementiert - verwenden Sie SimpleHTMLDom Parser, um den benötigten Inhalt zu entfernen. Wenn Sie die URL des Autorenprofils programmgesteuert abrufen können, können Sie loslegen. Tauschen Sie sich mit offiziellen API-Aufrufen aus, wenn Sie bereit sind. simplehtmldom.sourceforge.net & simplehtmldom.sourceforge.net/manual.htm
Adam
Exzellente Idee. Ich kann bereits die URLs bilden und die HTML-Ausgabe von der Seite erhalten.
Chris_O
Sie können die Sternebewertung erhalten, indem Sie die CSS-Eigenschaften für div.star-holder .star-ratingSelektoren kopieren und diese aus dem Plugin-Stylesheet bereitstellen. Stellen Sie sicher, dass Sie auch das Hintergrundbild der Sternebewertung kopieren . Wenn Sie dann das <div class="star-rating" style="width:??px"></div>Element kratzen , gibt Ihre CSS-Eigenschaft die Anzeige von Sternen (unabhängig von ihrer Bewertung) aus, da sie durch die Breite des Elements gesteuert wird div. Kinderleicht.
Adam
Um die Sterne zu unterscheiden, ändern Sie einfach ihre Farbe in Photoshop, damit es kein direkter Riss des WordPress-Blaus ist. Alternativ können Sie, wenn Sie klug sein möchten, eine Reihe von Farbvarianten erstellen, aus denen Ihre Benutzer auswählen können Ästhetik ihrer Website. Ich verwende SimpleHTMLDom Parser häufig, wenn keine API vorhanden ist, und sagen wir auch keinen RSS-Feed (wenn dies mein Ziel ist). Es ist genauso effektiv wie das Original, vorausgesetzt, wenn sich etwas ändert, müssen Sie Ihren Code aktualisieren, um dies widerzuspiegeln. Wenn jedoch kein wirklicher Zugriff auf eine API besteht, können Sie auf Inhalte zugreifen.
Adam

Antworten:

5

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.

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

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

  • Name
  • Beschreibung
  • Autor
  • Bewertung
  • Datum der letzten Aktualisierung
  • Änderungsprotokoll
  • stabile Version
  • funktioniert mit wp version

Um das Objekt abzurufen

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

$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 schönes sauberes Objekt haben, müssen Sie einige Fehler behandeln und andere Analysen durchführen. Hier ist eine Beispielfunktion, die ein schönes, sauberes 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

Diese Beispielverwendung gibt Ihnen eine ungeordnete Liste der bevorzugten Plugins zusammen mit einem Link zum Plugin auf dot org, einem Link zum Autor uri und der 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

Geben Sie hier die Bildbeschreibung ein

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

Chris_O
quelle
4

Noch nicht.

Otto sagte am Mittwoch "bald". Aber er ist dieses Wochenende zum Grillen gegangen, also ist "bald" wahrscheinlich "diesen Monat". ;)

Bearbeiten:

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

Ipstenu
quelle
2
Verstanden ... BBQ übertrumpft immer WordPress.
Chris_O