
前回、Wordpressのテーマチェッカーでもエラーの出ないGoogle+のカウント取得方法を書きました。
今回はそれの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でのカウントの取得方法です。
その他のAPIが利用できないソーシャルボタンのカウント取得方法は以下。