2014.08.22追記
Please do not scrape this for the Pocket count.って書いてあった。
この方法は使っちゃダメみたいですね。
はじめに
自分の書いた記事がPocketでどのくらい登録されているかを調べたい人がいるかもしれないので、PHPでPocketの登録数を取得する方法を紹介します。
Pocketの登録者数を調べる
ブログパーツなどで利用されている。Pocket登録ボタンだけど、このボタンを生成しているJavascriptのソースを辿っていくとわかるんだけどそのJavascriptのソースでは、非同期にHTMLを取得してきて、ブログに表示するようになっている。このHTMLには登録数が書いてあるタグがある。結論的にはその、pocketのjavascriptが読み込んできたHTMLをクロールするといいわけだ。
Pocketのウィジェットから登録者数を調べる
試しにhttps://www.google.co.jp/の登録者数をPocketのAPIで調べてみます。
すると、以下のような画像とテキストが表示されます。
これをPHPでスクレイピングしてみます。
<?php $sample_url = 'https://www.google.co.jp/'; $apiURL = 'https://widgets.getpocket.com/v1/button?label=pocket&count=vertical&align=left&v=1&url='.rawurlencode($sample_url).'&src='.rawurlencode($sample_url).'&r=70462244'; $html = file_get_contents( $apiURL ); print $html; ?>
すると、以下のようなHTMLがとれます。
<html> <head> <link rel="stylesheet" type="text/css" href="https://d7x5nblzs94me.cloudfront.net/v1/c/button.css?v=6" /> <script type="text/javascript" src="https://d7x5nblzs94me.cloudfront.net/v1/j/shared.js?v=2"></script> </head> <body> <div class="widget vertical pocket left"> <a id="btn"> <!-- 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! --> <span><em id="cnt">11167</em><i></i><u></u></span> <b></b> </a> </div> <script type="text/javascript"> var POCKET_DOMAIN = 'getpocket.com'; var iLi = false; var btnData = {"url":"https:\/\/www.google.co.jp\/","ct":"668866439d1b8fbb6111a972770da8cc2b390fbe","ctn":"55e98aa2ca37b9e3213792dbfde04f7967ce881d","label":"pocket","count":"vertical","src":"https:\/\/www.google.co.jp\/"}; </script> <script type="text/javascript" src="https://d7x5nblzs94me.cloudfront.net/v1/j/button.js?v=4"></script> </body> </html>
<em id="cnt">11167</em>の部分をスクレイピングして、登録数のみ取得したい場合は、一度xmlに変換してパースすると良いです。
<?php $sample_url = 'https://www.google.co.jp/'; $apiURL = 'https://widgets.getpocket.com/v1/button?label=pocket&count=vertical&align=left&v=1&url='.rawurlencode($sample_url).'&src='.rawurlencode($sample_url).'&r=70462244'; $html = file_get_contents( $apiURL ); $domDocument = new DOMDocument(); //print $html; $domDocument->loadHTML($html); $xmlString = $domDocument->saveXML(); $xmlObject = simplexml_load_string($xmlString); //var_dump($xmlObject); $array = json_decode(json_encode($xmlObject), true); // 登録者数 $registNum = (string)$array['body']['div']['a']['span']['em']; print $registNum; ?>