あとで読みたいWebサイトの管理に「Pocket」を愛用してます。かれこれ8年目。
ついつい「あとで読む」を溜めすぎてしまうので、どれぐらいのペースで「あとで読む」を消化できているか可視化するために、以前、下記の記事を書きました。
1年半ぐらい問題なく動作していたのですが、突然2022年8月10日から未読数を取得できなくなってしまいました。自分でAPIを叩くのが面倒で第三者のサービスに依存していたのですが、こういうときに手も足も出なくなってしまうのが弱いところ。
やむを得ませんね。自分でAPIを叩いてみますか(重い腰を上げる)
Pocket APIを叩いて未読数を取得するまでの道のり
開発者用ページでアプリケーションを作成
https://getpocket.com/developer/ にログインして「Create a New App」からアプリケーションを作成します。作成後に「CONSUMER KEY」(コンシューマーキー)が表示されるのでメモしておきましょう。
<作成例>
curlでアクセストークンを取得
アクセストークンを取得するまでがちょっと大変でしたが、下記の記事を参考にしたらうまくいきました。
自分の環境で実行したコマンドを載せておきます。…といっても参考記事とほぼ同じ内容です。ローカルサーバーをpythonで起動してる点が違うぐらい。
# リクエストトークン取得 curl -X POST -H "Content-Type: application/json" -H "X-Accept: application/json" -d '{"consumer_key":"{コンシューマーキー}", "redirect_uri":"http://localhost:8080"}' https://getpocket.com/v3/oauth/request # リダイレクト先のローカルサーバーを起動 python -m http.server 8080 # 認可 open -a '/Applications/Google Chrome.app' https://getpocket.com/auth/authorize?request_token={リクエストトークン}&redirect_uri=http://localhost:8080 # アクセストークン取得 curl -X POST -H "Content-Type: application/json" -H "X-Accept: application/json" -d '{"consumer_key":"{コンシューマーキー}", "code":"{リクエストトークン}"}' https://getpocket.com/v3/oauth/authorize
<認可時の画面>
APIテスト
正常にアクセストークンを発行できていれば、下記コマンドで未読記事リストをJSON形式で取得できます。(膨大なのでhead -n 100
で先頭100行のみ表示してます)
curl -X POST -H "Content-Type: application/json" -H "X-Accept: application/json" -d '{"consumer_key":"{コンシューマーキー}", "access_token":"{アクセストークン}"}' https://getpocket.com/v3/get | jq | head -n 100
jq
がないよ!って怒られたら brew install jq
してください。
Google Apps Script(GAS) でAPIを叩く
Googleスプレッドシートを開き、A1セルに「date」、B1セルに「count」と入力します。そして 拡張機能>Apps Script から Google Apps Script(GAS) のエディターを起動して、下記のソースコードをコピペしてください。日時と未読数を取得して、Googleスプレッドシートの最終行の次の行に書き込むスクリプトです。
function countPocketUnreadArticles() { var date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy-MM-dd HH:mm:ss'); var count = countItems(); Logger.log(date + ' ' + count); var spreadsheet = SpreadsheetApp.openById('{GoogleスプレッドシートのID}'); var sheet = spreadsheet.getSheetByName('シート1'); var lastrow = sheet.getLastRow(); var recordrow = lastrow + 1; sheet.getRange("A" + recordrow).setValue(date); sheet.getRange("B" + recordrow).setValue(count); } function countItems() { const url = "https://getpocket.com/v3/get"; const consumer_key = "{コンシューマーキー}"; const access_token = "{アクセストークン}"; const data = { "consumer_key":consumer_key, "access_token":access_token }; const options = { "method" : "POST", "contentType" : "application/json", "payload" : JSON.stringify(data) }; const response = UrlFetchApp.fetch(url, options); const pocketItems = JSON.parse(response).list; const itemIds = Object.keys(pocketItems); return itemIds.length; }
{コンシューマーキー}
と{アクセストークン}
には先述のAPIテストで使った値を入力してください。{GoogleスプレッドシートのID}
には、GoogleスプレッドシートのURLのhttps://docs.google.com/spreadsheets/d/
の後ろの文字列を入力してください。
試しに「実行」ボタンを押してみて、うまくGoogleスプレッドシートに書き込まれたら成功です。
仕上げに、自動実行されるようにトリガーを設定しておきましょう。これで完成です!
<トリガーの設定例>
完成
最終的にはGoogleスプレッドシートにこんな感じで「あとで読む」の未読数が時系列順に蓄積されていきます。グラフは後付けでGoogleスプレッドシートの標準機能を使って描画しました。
これで再び「あとで読む」がどれだけ残っているか視覚的に把握できるようになりました。あとはひたすら「あとで読む」を消化するだけですね……(遠い目)