pocketの記事をアーカイブするアプリをrubyで書こうとしたら、意外と良いサンプルなどがなかったのでまとめておく。
pocket developer apiを使うには、アカウントからアプリを登録しaccess tokenを発行して貰う必要がある。
これについてはすでにいろいろなところで、ここでは割愛する。
また、アーカイブするためにはpocket上に登録された記事のitem_id
が必要になる。
これは、別途APIから取得するか、webアプリ上で記事をクリックした際にURLにくっついているのでメモしておく。
実際の実装は以下のようになる。
require 'json' require 'net/https' CONSUMER_KEY = 'YOUR_CONSUMER_KEY' ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN' headers = { 'Content-Type' => 'application/json;charset=UTF-8', 'X-Accept' => 'application/json' } params = { actions: [{ action: 'archive', item_id: 'item_id'.to_i }].to_json, consumer_key: CONSUMER_KEY, access_token: ACCESS_TOKEN } req = Net::HTTP::Post.new('/v3/send', initheader = headers) req.set_form_data params http = Net::HTTP.new('getpocket.com', 443) http.use_ssl = true res = http.request req raise 'error: cannot get response.' unless res.is_a?(Net::HTTPOK) puts 'done'
通信に関してはnet/http
モジュールを使っているが、特に難しいことはしていないと思う。
公式のドキュメントにも書いてあるように、https://getpocket.com/v3/send
にリクエストを送ることで、記事に変更を加えることができる。
変更を加える内容は、パラメータにactions
というリストを持たせてそこで指定する。
今回の実装で一番困ったのはactionsのリストの中身をどうするかということ。
結果的にHashをjson文字列に変換することで可能だったが、rubyに慣れていないのとpocketのapiが返してくれるエラーメッセージが何も情報を持っていないので結構苦労した。
最近ではpocketに登録している内容をランダムに選んで配信してくれるサービスが軒並み閉鎖しているらしい。
こういったサービスは結構便利だったのでショックである。
登録・選択・更新の機能についてはAPIが公開されているので、自分で実装できる人は自分でアプリを書くことをおすすめする。