[試] Pocketブックマーク数(ある意味シェア数)の取得方法 | Pocket公式APIないけどどうする?
![[試] Pocketブックマーク数(ある意味シェア数)の取得方法 | Pocket公式APIないけどどうする?](https://marubon.info/wp-content/uploads/method-to-get-pocket-share-count-01-1024x610.png)
SNSシェアボタンをオリジナルで作成されている方に贈る!これまでありそうでなかった方法。
Pocketのブックマーク数(ある意味シェア数)を取得する方法を紹介します。
スポンサーリンク
アウトライン
スポンサーリンク
Pocketブックマーク数取得の現状
現時点でPocketのブックマーク数単体取得に利用可能な公式APIは提供されていません。したがってブックマーク数を表示したい場合は、Pocket公式ボタンを使用せざる得ません。
しかしながら、公式ボタンは簡単に利用できる反面、デザインに制約があるためサイトの作り込みには不向きという課題があります。
Pocketのブックマーク数を含むシェアボタンを自由にデザインしたい。
公式APIがない中でもブックマーク数を取得できれば。。。。
そんなご要望にお応えします。
若干裏技的ではありますが、ブックマーク数のみを取得する方法を紹介します。
Pocketブックマーク数の取得方法
ブックマーク数をデータとして返してくれるAPIが公開されていないので、Pocketのサイトから公式ボタン(HTML)を取得し、そこからブックマーク数に該当するデータを抽出します。
以下、PHPコードの実装例です。
この関数は、Pocketのブックマーク数を取得したい記事のURLを引数に与えることでブックマーク数を返します。
技術的には、HTTP GETで対象記事のPocketボタンのHTMLソースを取得し、DOM及びXPathパーサーを利用してブックマーク数部分を抽出しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
function get_pocket_count($url) { //指定されたURLのPocketボタンを取得するクエリ $query = 'http://widgets.getpocket.com/v1/button?v=1&count=horizontal&url=' . $url; //HTTPでアクセスし、Pocketボタンのソースを取得 $html = file_get_contents($query); //DOMパーサーを作成 $dom = new DOMDocument('1.0', 'UTF-8'); // 余分な空白は削除 $dom->preserveWhiteSpace = false; //PocketボタンのHTMLソースを読み込む $dom->loadHTML($html); //XPathパーサーを作成 $xpath = new DOMXPath($dom); //XPathでブックマーク数にあたる要素を取得 $result = $xpath->query('//em[@id = "cnt"]')->item(0); //当該要素の中身が存在すれば、その数字を返し、存在しなければ0を返す return isset($result->nodeValue) ? intval($result->nodeValue) : 0; } |
WordPressであれば、上記関数をfunctions.phpに追記した上で、以下の様にその関数を呼び出すことでブックマーク数を取得可能です。
これはquery_postsやWP_Query等のループ中で使用する場合の例です。get_permalinkでループ中の現在の記事のパーマリンク(URL)を取得し、関数に渡しています。
1 |
<?php echo get_pocket_count(get_permalink($post->ID)); ?> |
尚、これらのソースにおいて厳密な例外処理は行っていません。利用される場合は、必要に応じてカスタマイズして下さい。
本コードは、HTTP GET処理にPHPで比較的ベーシックなfile_get_contents関数を使用していますが、WordPressで使用される場合は、例外処理対応のしやすさとセキュリティの観点からwp_remote_get関数の使用をおススメします。
この方法を利用する場合の注意点
Pocket公式ボタンのソースコードの仕様が変更されると想定したデータが取得できなくなるリスクが存在します。
通常目にすることはないと思いますが、公式ボタンのソースには下記コメントが記載されています。
Please do not scrape this for the Pocket count.
It is not relible for you to use and will likely change.
Contact us at api@getpocket.com for an official API.
Thanks!
従って上記方法を使用する場合は、今後表示されなくなるリスクが存在することを考慮の上で使用して下さい。今後Pocketボタンのソースに変更があった場合は、それに合わせて適宜取得コードを修正する必要があります。
まとめ
SNSのシェアボタンをオリジナルで作成されている方に贈る!これまでありそうでなかった方法。
Pocketのブックマーク数(ある意味シェア数)を取得する方法を紹介しました。
JavaScriptやjQuery等、よりフロントエンド側の言語でも同様の考え方でブックマーク数を取得可能ですので、必要に応じて応用してみて下さい。