web-dev-qa-db-fra.com

API WordPress.org - Obtenir les plugins préférés des auteurs de plugins

Des ajouts récents ont été apportés au référentiel de plugins WordPress.org. Plus particulièrement, les modifications apportées à la page de plug-in et à la page de profil de l'auteur, qui affichent désormais les plug-ins préférés d'un auteurs .

Je veux créer un plug-in de widget de barre latérale qui montre les favoris d'un auteur de plug-in. Je sais comment utiliser l'API pour obtenir les statistiques de plug-in et j'ai également lu la documentation de l'API de DD32 mais je ne crois pas que la documentation existe sur les profils ou si une API de profil existe même.

J'ai essayé d'utiliser wp_remote_get et je suis en mesure d'obtenir le code HTML du corps à partir de la page de profil, mais je n'ai pas encore essayé de l'analyser car cela semble être un moyen désordonné de procéder. Ce serait génial si je pouvais obtenir le profil en XML ou json.

Y a-t-il des méthodes qui me manquent ou une API de profil existe-t-elle?

Modifier:

Ok, j’ai une version bêta sur github en utilisant l’analyseur SimpleHTML Dom. Je ne pense pas que je pourrai obtenir le classement des étoiles, mais je suis plutôt satisfait du résultat dès le début sans API.

WordPress.org n'autorise pas le raclage de contenu et vous bannira (via @otto). C'est donc un non-aller jusqu'à la publication d'une API publique.

7
Chris_O

Les plugins favoris ont été ajoutés à l'API WordPress.org. Une nouvelle fonctionnalité de la version 3.5 vous permet d'accéder à vos favoris à partir du programme d'installation du plug-in.

Voir http://core.trac.wordpress.org/ticket/22002 pour plus d’informations sur son utilisation dans le noyau.

L'API vous permet de récupérer un objet contenant chaque plugin

  • prénom
  • la description
  • auteur
  • évaluation
  • date de dernière mise à jour
  • changer le journal
  • version stable
  • fonctionne avec la version wp

Pour récupérer l'objet

Faites un appel à http://api.wordpress.org/plugins/info/1.0/ en utilisant wp_remote_post en transmettant un tableau d'arguments comprenant l'action qui serait 'query_plugins' et le nom d'utilisateur wp dot org pour récupérer les favoris. de.

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

Avant d'avoir un objet propre Nice, vous devez effectuer un traitement des erreurs et une autre analyse. Voici un exemple de fonction qui retournera un objet propre de Nice contenant tous les détails du plugin.

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

Usage

Cet exemple d'utilisation vous donnera une liste non ordonnée de plugins préférés ainsi qu'un lien vers le plugin sur dot org, un lien vers l'auteur uri et le classement par étoiles.

$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>';

Résultat

enter image description here

Capture d'écran du widget de mon plugin de plugins favoris: http://wordpress.org/extend/plugins/favorite-plugins-widget/

5
Chris_O

Pas encore.

Otto a dit "bientôt" mercredi. Mais il est allé à un barbecue ce week-end, alors "bientôt" est probablement "Ce mois-ci". ;)

Modifier:

Otto42: @Ipstenu @EricMann J'ai le code pour le faire, mais pas encore déployé. Certains débats sur la meilleure façon. Ce sera là éventuellement.

4
Ipstenu