Cum să obții pluginurile favorite ale autorilor folosind API-ul WordPress.org

17 mai 2012, 20:44:18
Vizualizări: 984
Voturi: 7

Au fost câteva adăugiri recente în repository-ul de pluginuri WordPress.org. Cele mai notabile modificări sunt cele de pe pagina pluginului și pagina de profil a autorului, care acum afișează pluginurile favorite ale autorilor.

Doresc să creez un widget pentru bara laterală care să afișeze pluginurile favorite ale unui autor. Știu cum să utilizez API-ul pentru a obține statisticile pluginurilor și am citit de asemenea documentația API a lui DD32, dar nu cred că există documentație pentru profile sau dacă există un API pentru profile.

Am încercat să folosesc wp_remote_get și pot obține codul HTML al paginii de profil, dar nu am încercat încă să-l analizez, deoarece pare o metodă prea complicată. Ar fi minunat dacă aș putea obține profilul în XML sau JSON.

Există vreo metodă pe care o omit sau există un API pentru profile?

Edit:

Am o versiune beta pe GitHub care folosește parserul SimpleHTML Dom. Nu cred că voi putea obține rating-urile cu stele, dar sunt mulțumit de rezultatele obținute fără un API.

WordPress.org nu permite scraping-ul de conținut și te poate bloca (via @otto). Așadar, această metodă nu este viabilă până când nu va fi lansat un API public.

4
Comentarii

Ca soluție temporară până când Otto va implementa API-ul pentru profil - folosește SimpleHTMLDom Parser pentru a extrage conținutul de care ai nevoie. Dacă poți obține programatic URL-ul profilului autorului, atunci ești pe drumul cel bun. Înlocuiește cu apelurile oficiale către API când acesta va fi disponibil. http://simplehtmldom.sourceforge.net/ & http://simplehtmldom.sourceforge.net/manual.htm

Adam Adam
17 mai 2012 22:20:24

Excelentă idee. Deja pot forma URL-urile și obține conținutul HTML al paginii.

Chris_O Chris_O
17 mai 2012 22:28:35

Poți obține ratingul cu stele copiind proprietățile CSS pentru selectoarele div.star-holder .star-rating și servindu-le din fișierul de stil al pluginului. Asigură-te că copiezi și imaginea de fundal pentru ratingul cu stele. Apoi, când extragi elementul <div class="star-rating" style="width:??px"></div>, proprietatea ta CSS va afișa stelele (indiferent de ratingul lor), deoarece acesta este controlat de lățimea div-ului. Ușor ca bunica.

Adam Adam
18 mai 2012 14:49:03

Mai mult, pentru a diferenția stelele, pur și simplu schimbați-le culoarea în Photoshop, astfel încât să nu fie o copie directă a albastrului WordPress sau, alternativ, dacă doriți să fiți mai ingenios, creați o serie de variații de culori din care utilizatorii dvs. să poată alege pentru a se potrivi esteticii site-ului lor. Folosesc foarte mult SimpleHTMLDom Parser în cazurile în care nu există un API, nici să zicem un flux RSS (dacă acesta este scopul meu). Este la fel de eficient ca și varianta reală, cu condiția ca, dacă se schimbă ceva, va trebui să vă actualizați codul pentru a reflecta acele modificări. Dar în lipsa accesului la un API real, acesta vă poate oferi acces la conținut.

Adam Adam
18 mai 2012 14:52:32
Toate răspunsurile la întrebare 2
1

Încă nu.

Otto a spus "curând" miercuri. Dar a fost la un grătar în weekend, așa că "curând" înseamnă probabil "luna aceasta". ;)

Edit:

Otto42: @Ipstenu @EricMann Am codul pentru asta, dar nu e implementat încă. Există dezbateri privind cea mai bună metodă. Va fi disponibil într-un final.

17 mai 2012 20:50:39
Comentarii

Înțeles... Grătarul întotdeauna învinge WordPress.

Chris_O Chris_O
17 mai 2012 20:52:03
0

Pluginurile favorite au fost adăugate în API-ul WordPress.org. Există o nouă funcționalitate în versiunea 3.5 care vă permite să accesați favoritele dvs. din instalatorul de pluginuri.

Consultați http://core.trac.wordpress.org/ticket/22002 pentru informații despre modul în care este utilizată în nucleu.

API-ul vă permite să obțineți un obiect care conține fiecare plugin

  • nume
  • descriere
  • autor
  • evaluare
  • data ultimei actualizări
  • jurnal de modificări
  • versiune stabilă
  • compatibil cu versiunea wp

Pentru a obține obiectul

Faceți un apel către http://api.wordpress.org/plugins/info/1.0/ folosind wp_remote_post, transmitând un array de argumente, inclusiv acțiunea care ar fi 'query_plugins' și numele de utilizator wp.org pentru a prelua favoritele.

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

Înainte de a avea un obiect curat și organizat, trebuie să faceți o gestionare a erorilor și alte operații de parsare. Iată o funcție exemplu care va returna un obiect curat care conține toate detaliile pluginului.

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', __( 'A apărut o eroare neașteptată. Ceva poate fi în neregulă cu WordPress.org sau configurația acestui server. Dacă problemele persistă, încercați pe <a href="http://wordpress.org/support/">forumurile de suport</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', __( 'A apărut o eroare neașteptată. Ceva poate fi în neregulă cu WordPress.org sau configurația acestui server. Dacă problemele persistă, încercați pe <a href="http://wordpress.org/support/">forumurile de suport</a>.' ), wp_remote_retrieve_body( $request ) );
        }

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

Utilizare

Acest exemplu de utilizare vă va oferi o listă neordonată de pluginuri favorite, împreună cu un link către plugin pe WordPress.org, un link către autor și evaluarea cu stele.

$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( '(bazat pe %s evaluare)', '(bazat pe %s evaluări)', $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('De: ') ?></em> <?php echo links_add_target( $plugin->author, '_blank' ). '<br>'; ?>
            </li><?php
        }
        echo '</ul>';

Rezultat

Captură de ecran widget

Captură de ecran a widgetului din pluginul meu Favorite Plugins Widget: http://wordpress.org/extend/plugins/favorite-plugins-widget/

30 sept. 2012 00:33:15