WordPress.org API - Ottieni i plugin preferiti degli autori

17 mag 2012, 20:44:18
Visualizzazioni: 984
Voti: 7

Ci sono state alcune recenti aggiunte al repository dei plugin di WordPress.org. La più notevole è il cambiamento alla pagina dei plugin e al profilo dell'autore che ora mostra i plugin preferiti dagli autori.

Voglio creare un plugin widget per la sidebar che mostri i plugin preferiti di un autore. So come usare l'API per ottenere le statistiche dei plugin e ho anche letto la documentazione API di DD32, ma non credo esistano documentazioni sui profili o se esista davvero un'API per i profili.

Ho provato a usare wp_remote_get e sono riuscito a ottenere il codice HTML della pagina del profilo, ma non ho ancora provato a parsarlo perché sembra un metodo troppo disordinato. Sarebbe fantastico se potessi ottenere il profilo in XML o json.

Ci sono metodi che mi sfuggono o esiste un'API per i profili?

Modifica:

Ho creato una versione beta su GitHub usando il parser SimpleHTML Dom. Non credo di poter ottenere le valutazioni a stelle, ma sono abbastanza soddisfatto dei risultati come primo tentativo senza un'API.

WordPress.org non permette lo scraping dei contenuti e potrebbe bannarti (via @otto). Quindi questa strada è impraticabile finché non verrà rilasciata un'API pubblica.

4
Commenti

Come soluzione temporanea fino a quando Otto non implementerà l'API del profilo - utilizza SimpleHTMLDom Parser per estrarre il contenuto di cui hai bisogno. Se riesci a ottenere l'URL del profilo dell'autore in modo programmatico, allora sei a posto. Sostituisci con chiamate API ufficiali quando saranno pronte. http://simplehtmldom.sourceforge.net/ & http://simplehtmldom.sourceforge.net/manual.htm

Adam Adam
17 mag 2012 22:20:24

Ottima idea. Posso già formare gli URL e ottenere l'output HTML dalla pagina.

Chris_O Chris_O
17 mag 2012 22:28:35

Puoi ottenere la valutazione a stelle copiando le proprietà CSS per i selettori div.star-holder .star-rating e includendoli nel foglio di stile del plugin. Assicurati di copiare anche l'immagine di sfondo per la valutazione a stelle. Poi, quando estrai l'elemento <div class="star-rating" style="width:??px"></div>, la tua proprietà CSS mostrerà la visualizzazione delle stelle (qualunque sia la loro valutazione) poiché è controllata dalla larghezza del div. Facile facile.

Adam Adam
18 mag 2012 14:49:03

Inoltre, per differenziare le stelle, basta cambiare il loro colore in Photoshop in modo che non sia una copia diretta del blu di WordPress o, in alternativa, se vuoi essere più creativo, crea una serie di variazioni di colore che i tuoi utenti possano scegliere per adattarsi all'estetica del loro sito. Uso molto SimpleHTMLDom Parser, nei casi in cui non esiste un'API, né diciamo un feed RSS (se quello è il mio obiettivo). È efficace quanto l'originale, a patto che se qualcosa cambia dovrai aggiornare il tuo codice per riflettere tali modifiche. Ma in assenza di un accesso reale a un'API, può fornirti l'accesso ai contenuti.

Adam Adam
18 mag 2012 14:52:32
Tutte le risposte alla domanda 2
1

Non ancora.

Otto ha detto "presto" mercoledì. Ma è andato a un barbecue questo fine settimana, quindi "presto" probabilmente significa "questo mese". ;)

Modifica:

Otto42: @Ipstenu @EricMann Ho il codice per farlo, ma non è ancora stato distribuito. C'è qualche discussione sul modo migliore. Sarà disponibile prima o poi.

17 mag 2012 20:50:39
Commenti

Capisco... il barbecue batte sempre WordPress.

Chris_O Chris_O
17 mag 2012 20:52:03
0

I plugin preferiti sono stati aggiunti all'API di WordPress.org. C'è una nuova funzionalità nella versione 3.5 che ti permette di accedere ai tuoi preferiti dall'installatore dei plugin.

Vedi http://core.trac.wordpress.org/ticket/22002 per informazioni su come viene utilizzato nel core.

L'API ti permette di recuperare un oggetto che contiene ogni plugin con:

  • nome
  • descrizione
  • autore
  • valutazione
  • data ultimo aggiornamento
  • log delle modifiche
  • versione stabile
  • compatibilità con la versione di wp

Per recuperare l'oggetto

Effettua una chiamata a http://api.wordpress.org/plugins/info/1.0/ utilizzando wp_remote_post passando un array di argomenti incluso l'action che sarebbe 'query_plugins' e lo username di wp.org da cui recuperare i preferiti.

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

Prima di ottenere un oggetto pulito e ordinato, devi gestire gli errori e fare qualche parsing. Ecco una funzione di esempio che restituirà un oggetto pulito con tutti i dettagli del 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', __( 'Si è verificato un errore inaspettato. Potrebbe esserci un problema con WordPress.org o la configurazione di questo server. Se continui ad avere problemi, prova i <a href="http://wordpress.org/support/">forum di supporto</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', __( 'Si è verificato un errore inaspettato. Potrebbe esserci un problema con WordPress.org o la configurazione di questo server. Se continui ad avere problemi, prova i <a href="http://wordpress.org/support/">forum di supporto</a>.' ), wp_remote_retrieve_body( $request ) );
        }

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

Utilizzo

Questo esempio di utilizzo ti darà una lista non ordinata dei plugin preferiti insieme a un link al plugin su WordPress.org, un link all'URI dell'autore e la valutazione a stelle.

$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( '(basato su %s valutazione)', '(basato su %s valutazioni)', $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('Di: ') ?></em> <?php echo links_add_target( $plugin->author, '_blank' ). '<br>'; ?>
            </li><?php
        }
        echo '</ul>';

Risultato

Schermata dei widget preferiti

Screenshot del widget dal mio plugin Favorite Plugins Widget: http://wordpress.org/extend/plugins/favorite-plugins-widget/

30 set 2012 00:33:15