web-dev-qa-db-ja.com

WordPress.org API - プラグインの作者にお気に入りのプラグインを入手する

最近WordPress.orgプラグインリポジトリにいくつか追加されました。最も注目に値するのは、プラグインページと作者のプロフィールページへの変更で、 authorsのお気に入りのプラグインが表示されます

プラグインの作者のお気に入りを表示するサイドバーウィジェットプラグインを作成したいです。 APIを使用してプラグインの統計情報を取得する方法を知っていて、また DD32のAPI Docs を読んでいますが、プロファイルがプロファイルに存在する場合、またはプロファイルAPIが存在する場合でも信じられません。

私はwp_remote_getを使おうとしました、そして、私はプロフィールページからボディのhtmlを得ることができますが、それをそれをめちゃくちゃにする方法のように思われるのでまだそれを試みて解析しようとしませんでした。 XMLまたはjsonでプロファイルを取得できれば素晴らしいでしょう。

私が欠けている、またはプロファイルAPIが存在するというメソッドはありますか?

編集する

わかりました。私はSimpleHTML Domパーサーを使ってgithubにベータ版をアップしました。私は私が星評価を得ることができるとは思わないが、私はAPIなしで最初の試みとして結果にかなり満足している。

WordPress.orgはコンテンツの廃棄を許可しておらず、あなたを禁止します(@otto経由)。そのため、パブリックAPIがリリースされるまではこれで終わりです。

7
Chris_O

お気に入りのプラグインはWordPress.org APIに追加されました。 3.5には、プラグインインストーラからお気に入りにアクセスできるようにする新機能があります。

コアでの使用方法については、 http://core.trac.wordpress.org/ticket/22002 を参照してください。

APIを使用すると、各プラグインを含むオブジェクトを取得できます。

  • 説明
  • 著者
  • 評価
  • 最終更新日
  • 変更履歴
  • 安定版
  • wP版で動作します

オブジェクトを取得する

Wp_remote_postを使用して http://api.wordpress.org/plugins/info/1.0/ への呼び出しを行います。お気に入りを取得する 'query_plugins'とwp dot orgのユーザー名を指定します。

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

Nice cleanオブジェクトを作成する前に、エラー処理やその他の解析を行う必要があります。これは、すべてのプラグインの詳細を保持するNiceクリーンオブジェクトを返す関数例です。

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

使用法

この使用例では、ドットオルガンのプラグインへのリンク、作者のuriへのリンク、星の評価とともに、お気に入りのプラグインの順不同リストを提供します。

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

結果

enter image description here

私のお気に入りプラグインからのウィジェットのスクリーンショットウィジェットプラグイン: http://wordpress.org/extend/plugins/favorite-plugins-widget/

5
Chris_O

未だに。

オットーは水曜日に「間もなく」と言った。しかし、彼は今週末にバーベキューに行ったので、「すぐに」はおそらく「今月」です。 ;)

編集する

Otto42:@Ipstenu @EricMannそのためのコードはありますが、まだデプロイされていません。最良の方法についていくつかの議論があります。それは結局そこにあるでしょう。

4
Ipstenu