WordPressテーマチェッカーでエラーの出ないPocketストックカウントの取得方法

前回、Wordpressのテーマチェッカーでもエラーの出ないGoogle+のカウント取得方法を書きました。

最近知ったんですが、Yahoo! Pipesが9月30日でサービス停止となるようです。 Yahoo Pipesを使った開発は今年の8月...

今回はそれのPocketバージョンです。

PocketもGoogle+と同様に、カウント取得用のAPIがありません。なので、ボタン表示用のHTMLを取得してそこから、カウント部分のみを抽出する必要があります。

photo by Heisenberg Media

スポンサーリンク
レクタングル(大)広告

Pocketでストックカウントの取得方法

Pocketでカウントを取得するには、PocketサーバーからカウントボタンのHTMLを取得する必要があります。

ただ、PHPで取得するようにfile_get_contentsをWordpress上で使用すると、Wordpressのテーマチェッカーで警告が出るので、別の手段をとりたいと思います。

今回は、WP_FileSystemのget_contentsメソッドを使って、外部ソースを取得したいと思います。

Google+で取得したときと同じようにwp_remote_get関数を用いても、テーマバリデーションでエラーは出ないと思います。どちらの方法でもOKかと思います。

functions.phpの編集

まずは、functions.phpにPocketのストックカウントを取得するための関数を書きます。

require_once(ABSPATH . 'wp-admin/includes/file.php');//WP_Filesystemの使用
 
//Pocketカウントの取得
function fetch_pocket_count($url) {
  if ( WP_Filesystem() ) {//WP_Filesystemの初期化
    global $wp_filesystem;//$wp_filesystemオブジェクトの呼び出し
    $query = 'http://widgets.getpocket.com/v1/button?v=1&count=horizontal&url=' . $url;
    //$wp_filesystemオブジェクトのメソッドとして呼び出す
    $html = $wp_filesystem->get_contents($query);
    $dom = new DOMDocument('1.0', 'UTF-8');
    $dom->preserveWhiteSpace = false;
    $dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    $result = $xpath->query('//em[@id = "cnt"]')->item(0);
    return isset($result->nodeValue) ? intval($result->nodeValue) : 0;
  }
  return 0;
}

以下では、Wordpressファイルシステム(WP_Filesystem)を呼び出すためのライブラリを読み込んでいます。

require_once(ABSPATH . 'wp-admin/includes/file.php');//WP_Filesystemの使用

WP_Filesystemから、Pocketボタンのソースさえ読み込んでしまえば、あとはxpathでも正規表現でも何でも良いので、カウント部分のテキストを取得します。

参考 WordPressでソーシャルメディアのカウント数を取得して表示する方法

WP_Filesystem不要のシンプルな書き方

wp_remote_get()でHTMLを取得後、正規表現で取得するには以下のように書きます。

//Pocketカウントの取得
function fetch_pocket_count($url) {
  $query = 'http://widgets.getpocket.com/v1/button?v=1&count=horizontal&url=' . $url;
  //URL(クエリ)先の情報を取得
  $result = wp_remote_get($query);
  // 正規表現でカウント数のところだけを抽出
  preg_match( '/<em id="cnt">([0-9.]+)<\/em>/i', $result["body"], $count );
  // 共有数を表示
  return isset($count[1]) ? intval($count[1]) : 0;
}

こちらの方がコード量が少なく、スッキリと書けるかもしれません。

WP_Filesystemを使った方法と、wp_remote_getを使った方法は、どちらともテーマチェッカーでエラーは出ないので、好みの方を利用してください。

カウント表示部分の編集

あとは、Pocketのストックカウント数を表示したい場所に、以下のように呼び出しコードを書くだけです。

fetch_pocket_count('カウントを取得したいページのURL')

例えば、single.phpでカウント数を取得したければ、以下のように書きます。

<?php echo fetch_pocket_count( get_permalink() ); ?>

コードを埋め込んだ場所に、そのページのPocketストック数が表示されます。

まとめ

今回のWordpress関数を利用した書き方だと、テーマチェッカーで警告され、20点減点されることはありません。

テーマバリデーションが満点

ただ別に、テーマチェッカーで、減点されたからといって、自分で使う分には全く問題ないかと思います。

何か、テーマなどを配布していて、なるべくバリデーションで減点されていないものを配布したいというときには、今回の書き方だと警告が出て減点されることはないと思います。(※テーマチェッカーの仕様が変わらない限りは)

今回は、Wordpress関数とPHPで、直接カウントを取得する方法を書きましたが、Ajaxで取得する方法をまた別の記事で書きたいと思います。

追記:クロスドメイン制約を回避したAjaxでのカウントの取得方法です。

先日、PHPとWordpress関数を利用して、テーマチェッカーでもエラーが出ない「Pocketストック数取得関数」を書きました。 今回...

その他のAPIが利用できないソーシャルボタンのカウント取得方法は以下。

最近知ったんですが、Yahoo! Pipesが9月30日でサービス停止となるようです。 Yahoo Pipesを使った開発は今年の8月...
以前feedlyの購読者数を「Yahoo! Pipes(サービス終了)」を経由して、Ajaxで取得する方法を書きました。 ただこの...