これまでPocketには、URLがいくつ保存されているかを知るためのAPIが公式に公開されていませんでした。
そのため、別の方法で無理やり取得していましたが、Pocketの仕様変更によりこの方法が使用できなくなりました。
この記事では、さらに別の方法でPocketの保存数を取得する方法をご紹介します。
これまでの方法とは
これまでは、PocketボタンのHTMLを取得し、その中から保存数を無理やり抜き出してくる方法が取られていました。
しかし、PocketボタンのHTMLには、以前から以下のようなコメントが記載されていました。
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ボタンのHTMLの中にこれまであった保存数を記述したタグがなくなり、かわりに保存数を取得するjavascriptが記述され、javascriptを通して動的に取得するように変更されました。
これではこれまでの方法を使うことができません。
別の方法とは?
これまでの方法は使えなくなりましたが、Pocketボタンには正しく保存数が取得できていることから、仕様変更で追加されたjavascriptにはなにかヒントが有るに違いありません。
javascriptのソースコードで”count”で検索してみると、
getCount:function(t){return p()(y("/api/saves",{url:t}),b).then(function(t){return t.json()})}
というソースがありました。
“getCount”といういかにも数を取得していそうなコードです。
さらに、”/api/saves”という文字列も見つかり、urlというパラメータがあるようです。
ためしに、
https://widgets.getpocket.com/api/saves
でブラウザでアクセスしてみると、以下のようなjson形式の文字列が返ってきます。
{"saves":131}
どうもsavesというAPIがあるようです。
さらに、Pocketボタンと同様にurlというパラメータを付けてブラウザでアクセスしてみると、
https://widgets.getpocket.com/api/saves?url=https://google.com/
以下のような結果です。
{"saves":139476}
それらしい数です。
確認のため、PocketボタンのAPIで同様のURLパラメータでアクセスしてみると、
https://widgets.getpocket.com/v1/button?v=1&count=horizontal&url=https://google.com
javascriptが取得した結果は以下のように。
<div class="widget horizontal pocket left">
<a id="btn">
<span>
<em>130,476</em>
<i></i>
<u></u>
</span>
<b></b>
</a>
</div>
先程のsavesというAPIの結果と同じになりました。
Pocketの保存数の取得方法
PocketにはsavesというAPIが追加され、保存数を取得したいページのURLをurlというパラメータでアクセスすることで、保存数を取得することができます。
取得例は以下になります。
https://widgets.getpocket.com/api/saves?url=<保存数を取得したいページのURL>
{"saves":<保存数>}
これまでの無理やり抜き出す方法に比べると、簡単になりました。
Pocketの保存数が取得できなくなってお困りの方の参考になりましたら幸いです。