前回、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が利用できないソーシャルボタンのカウント取得方法は以下。