yikegaya’s blog

yikegayaのブログ

curlでPocketのアクセストークンを取得する

あとあと読みたいネットの記事のURLをPocketにどんどん放り込んでたんだけど、未読がたまっていく一方だったりして少し整理したりいい感じに管理できるプログラム作れないかな。。と思ってとりあえずPocketのAPI叩いてクリップした記事を取得してみた。

Pocket

Pocket

  • Read It Later, Inc
  • ニュース
  • 無料
apps.apple.com

Pocketの認証手順

他のFacebookとかTwitterOAuth認証と同じような流れ。割と面倒。

  1. Pocketにログインする。
  2. Developer向けのページにアクセスしてApplicationを登録する。 https://getpocket.com/developer/
  3. アプリケーションを登録するとコンシューマキーが発行されるので抑えておく
  4. コンシューマキーをbodyに含めてPocketのAPIにhttpリクエストを送ってリクエストークンを取得する
  5. リクエストークンを含んだURLをwebで開いて認証する。この時にリダイレクト先のWebページを用意しておく
  6. 認証されたリクエストークンを使って再びPocketのAPIにhttpリクエストを送ってアクセストークンを取得
  7. アクセストークンが取得できたらそのトークンを元にhttpリクエスト送って目的の記事検索やその他諸々ができるようになる。

curlでの取得例

リクエストークン取得

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

リクエストークン認証

この時にリダイレクト先のURLが必要なんだけど今回はCLI上で試してみたいだけなんで適当にlocalhostphpのサーバ実行してそこを指定する

# リダイレクト先のサーバ
php -S localhost:8080

# openコマンドでchromeからwebページを開く
open -a '/Applications/Google Chrome.app' https://getpocket.com/auth/authorize?request_token={リクエストトークン}&redirect_uri=http://localhost:8080

うまくいくとこんな感じのサイトが出るので認証 f:id:ikeyu0806720:20210509113004p:plain

アクセストークン取得

curl -X POST -H "Content-Type: application/json" -H "X-Accept: application/json"
-d '{"consumer_key":"{コンシューマキー}", "code":"{リクエストトークン}"}'
https://getpocket.com/v3/oauth/authorize

試しに記事1件取得してみる

curl -X POST -H "Content-Type: application/json" -H "X-Accept: application/json"
-d '{"consumer_key":"{コンシューマキー}", "code":"{リクエストトークン}"}'
https://getpocket.com/v3/oauth/authorize

結果

{
    "status": 1,
    "complete": 1,
    "list": {
        "3325624398": {
            "item_id": "3325624398",
            "resolved_id": "3325624398",
            "given_url": "https://togetter.com/li/1710737",
            "given_title": "【朗報】mRNAワクチンは、変異株にも相当効果が高い~「圧倒的すぎて専門家も引き気味」「ガラケー時代のiPhone」 - Togetter",
            "favorite": "0",
            "status": "0",
            "time_added": "1620527156",
            "time_updated": "1620527156",
            "time_read": "0",
            "time_favorited": "0",
            "sort_id": 0,
            "resolved_title": "【朗報】mRNAワクチンは、変異株にも相当効果が高い~「圧倒的すぎて専門家も引き気味」「ガラケー時代のiPhone」",
            "resolved_url": "https://togetter.com/li/1710737",
            "excerpt": "よく、この時代に間に合ったものだな…/※なお「こういう人もいる」的な感じで、リプ欄でみた、ちょっと賛同し難い意見も収録しています",
            "is_article": "0",
            "is_index": "0",
            "has_video": "0",
            "has_image": "0",
            "word_count": "0",
            "lang": "ja",
            "top_image_url": "https://s.togetter.com/ogp/9eb2843312e0379332e5717d0bb6165e-1200x630.png",
            "domain_metadata": {
                "name": "トゥギャッター公式",
                "logo": "https://logo.clearbit.com/togetter.com?size=800",
                "greyscale_logo": "https://logo.clearbit.com/togetter.com?size=800&greyscale=true"
            },
            "listen_duration_estimate": 0
        }
    },
    "error": null,
    "search_meta": {
        "search_type": "normal"
    },
    "since": 1620527161
}

とりあえず取得できたけどどう使おうかな。。