Pocket APIを使ってOAuth2.0を理解する。


pocket-authorize-9

TwitterやFacebookはもちろん、有名なWebサービスには開発用APIが用意されています。このAPIを使って世界中の開発者は自分のアプリとWebサービスをつなげることができます。

APIを使うことでの最初の難関はやはり認証周りではないでしょうか。各サービスの認証はOAuth2.0を採用しているところがほとんどです。今回は「後で読む」でおなじみのWebサービス、PocketのAPIを使ってOAuth2.0の仕組みを理解していきます。

[スポンサーリンク]

こんかいやることの概要

  1. 事前準備
  2. OAuth2.0をおさらいする。
  3. Pocket APIをコールするクライアントを用意する。
  4. Pocket APIが使えるように設定する。
  1. Pocket APIの実行手順
  2. リクエストトークンを取得する
  3. Pocketで認証処理を実施する
  4. アクセストークンを取得する
  5. Pocketに登録したデータを取得する

まずPocket APIを使うまえにOAuth2.0を簡単におさらいしておきましょう。
こちらのページの画面真ん中あたりにあるOAuth2.0の流れの図が非常にわかりやすいです。
Pocket APIの認証もこの流れの通りに行っていきます。
OAuth 2.0でWebサービスの利用方法はどう変わるか

Pocketの認証系APIは「Post」のみを許可しているためブラウザのURL直接入力では呼び出すことができません。
今回はChrome Extention「Advanced REST client」を使って認証APIをコールします。

pocket-authorize-7

Pocketにはもちろん登録していますよね?Pocket APIを使うには会員登録が必要です。登録したあと、コチラのページへアクセスします。
ここでPocket APIを使うための設定をしていきます。

pocket-authorize-1

続いて必要な情報を入力して。
pocket-authorize-2

入力し終わると認証APIを呼び出すのに必要な「consumer_key」が取得できます。こちら超重要。
あと認証後にリダイレクトされるURLも必要になってきます。とりあえず今はlocalhostにしておきましょう。
pocket-authorize-3

さて準備も終わったのでいよいよAPIをコールしていきます。
では先ほどインストールした「Advanced REST client」を開いて下さい。

pocket-authorize-4

まずはリクエストトークンを取得を取得していきます。
リクエストするURLは、https://getpocket.com/v3/oauth/request

リクエストを送る際のContent-Typeは、application/x-www-form-urlencodedを指定して下さい。
送るパラメータは以下2つです。
1:consumer_key=先ほどアプリ登録をした時に取得した「consumer_key」
2:redirect_uri=http://localhost

上記の情報をPOSTするとcode=d0000000-0000-0000-0000-00000のようなものが返ってきます。これがリクエストトークンとなります。
このリクエストトークンを使ってアクセストークンを取得していきます。

補足

Pocket APIの公式ドキュメントはコチラです。

x-www-form-urlencodedの説明はコチラを参考にしてください。

OAuth2.0のルールでは、認証処理は接続先のサードパーティサービスで実施します。
今回の例で言えば、認証処理自体は全てPocket側で行います。
したがって個人で作るアプリではユーザがPocketにログインする際のIDもパスワードも知る必要がありません。(知りたくてもわからないような仕組みになっています。)

Pocketの認証画面のアクセス方法はこちらのURLをブラウザからアクセスしてください。
https://getpocket.com/auth/authorize?request_token=先ほど取得し
たリクエストトークン
&redirect_uri=リダイレクトURL

例としてはこんなイメージです。

pocket-authorize-5
認証成功後はredirect_uriへ指定したURLへアクセスされます。
もしすでにPocketにログインしている状態だとこの画面は表示されずに直接redirect_uriへ指定したURLへアクセスされます。

さていよいよアクセストークンの取得です。
アクセストークンさえ取得できれば認証の部分は終了です。あとは自由にPoketの一覧をとったりすることができます。

アクセストークン取得もPostしか許可していないので「Advanced REST client」を使っていきます。

pocket-authorize-6

それではアクセストークンを取得を取得していきましょう。
リクエストするURLは、https://getpocket.com/v3/oauth/authorizeです。

こちらもリクエストを送る際のContent-Typeは、application/x-www-form-urlencodedを指定して下さい。
送るパラメータは以下2つです。
1:consumer_key=先ほどアプリ登録をした時に取得した「consumer_key」
2:code=さきほど取得したリクエストトークン「code=d0000000-0000-0000-0000-00000」のパラメータ部分

上記の情報をPOSTするとaccess_token=xxx000-x000-0000-0000-000000&username=XXXXXXのようなものが返ってきます。access_token部分がアクセストークンとなります。
Pocket一覧参照のようなPocket APIをコールするときにこのアクセストークンは毎回セットする必要があるのでここでは一旦アクセストークンをとっておきましょう。

これで認証の部分は終わりです。お疲れ様でした。

それでは認証も通ったことなので、実際にPocketへ登録しているデータをAPIを使って取得してみましょう。

Pocketへ登録されている最新の最初の1件を取得するには、こちらのAPIを実行します。
こちらはメソッドはGETとなっているので、そのままブラウザから実行しても大丈夫です。
https://getpocket.com/v3/get?consumer_key=$consumer_key&access_token=アクセストークン&sort=newest&count=1

$consumer_keyには、最初にPocketに登録した時に採番された「consumer_key」を指定します。
アクセストークンには、一つ上の部分で取得したaccess_token=xxx000-x000-0000-0000-000000を指定します。

こちらがAPIを実行したあとの結果です。
実際には改行やパディングは入っていません。1行で出力されます。

{
    "status": 1,
    "complete": 1,
    "list": {
        "18294": {
            "item_id": "18294",
            "resolved_id": "18294",
            "given_url": "http://www.yahoo.co.jp/",
            "given_title": "Yahoo! JAPAN",
            "favorite": "0",
            "status": "0",
            "time_added": "1466547955",
            "time_updated": "1466547953",
            "time_read": "0",
            "time_favorited": "0",
            "sort_id": 0,
            "resolved_title": "Yahoo! JAPAN",
            "resolved_url": "http://www.yahoo.co.jp/",
            "excerpt": "Yahoo! JAPANトップページの機能を正しくご利用いただくには、下記の環境が必要となります。 Windows:Internet Explorer 9.0以上 / Chrome 最新版 / Firefox 最新版 / Microsoft Edge Macintosh:Safari 5.",
            "is_article": "0",
            "is_index": "1",
            "has_video": "0",
            "has_image": "0",
            "word_count": "104"
        }
    },
    "error": null,
    "search_meta": {
        "search_type": "normal"
    },
    "since": 1466548059
}

Pocketへ登録しているデータをAPIの公式ドキュメントはコチラです。

世の中のWebサービスには開発者用にAPIを提供しているところがたくさんあります。API自体を使うことはさほど難しくはないように思うのですが、やはり最初の認証のところが最初で最大の関門になってくると思います。

認証まわりさえクリアしたらあとは色々なAPIを思いのままに使うことができるようになります。敷居はすこと高いかもしれませんが、とりあえず認証の壁はクリアするように頑張ってみましょう!

記事を短めに書こうと思ったのですが、少々長くなってしまいました。。

それでは!