Manul Tech

Facebookのユーザアクセストークンの取得方法はいっぱい見つかったけど、需要がないのかページのアクセストークンの取得についてはなかなかコレ、というのがなかったんで徹底的に調べた。


そもそも何でページのアクセストークンの必要があるのか

FacebookのページにAPIを利用して投稿するとき、ユーザのアクセストークンだとそのユーザ名が投稿者として出てしまうので。(ページからの投稿として表示したい)

そして、ページのアクセストークンだと従来のようにトークンが無期限で使えるっぽい。
(有効期限を「受け取らない」にできる)

どうやんの?

色々探したけど、以下の記事が簡潔且つ欲しい情報だった。


リンク先のやり方そのままだけど、改めて方法を書いておく。
(Facebookアプリの登録は済ませてある前提)

1. OAuth認証

以下のURLを作成・アクセスしてCODEを受け取る。

https://www.facebook.com/dialog/oauth?client_id=<アプリケーションID>&redirect_uri=<リダイレクト先URL>&scope=manage_pages%2Cpublish_stream&state=<ステート>

このURLにアクセスすると、<リダイレクト先URL>に「code」パラメータ付きでリダイレクトされるので、その「code」の値をコピっておく。
ちなみに<リダイレクト先URL>は、アプリの設定画面で設定してあるやつを指定すること。
※「state」パラメータは、無くてもOK。

2. 短命のアクセストークンを取得

1.のCODEを元に、短命のアクセストークンを取得する。

https://graph.facebook.com/oauth/access_token?client_id=<アプリケーションID>&client_secret=<アプリケーションシークレット>&redirect_uri=<リダイレクト先URL>&code=<1.のコード>

上記参照ページには「redirect_uri」パラメータが付いていないんだけど、付けないと

Missing redirect_uri parameter.


と怒られた。付けてみると今度は

Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request


と怒られた。
このエラーコードについて調べてみると、こちらの記事を発見。

どうやらリダイレクトURLには最後にスラッシュ(/)を付ける必要があるんだとか。1.のリダイレクトURLにはスラッシュいらなかったのに。(エラー吐くぐらいならプログラムで何とかして欲しい)
言うとおりにスラッシュを付加してURLを叩くと見事、短命のアクセストークンの取得に成功。

3. 長寿命のアクセストークンを取得

わらしべ長者よろしく、2.で取得した短命のアクセストークンをエサに今度は長寿命のアクセストークンを取りに行く。

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=<アプリケーションID>&client_secret=<アプリケーションシークレット>&fb_exchange_token=<2.で取得した短命のアクセストークン>

アクセストークンデバッガーに、3.で取得した長寿命のアクセストークンを入力してみると以下の通り有効期間が「受け取らない」になっている。

アクセストークンデバッガー

でもこれはページのアクセストークンではなく、ユーザのアクセストークン(だと思う)。
参照記事もロクに読み進めず、勝手にこれでいいと思い込んでいたんだけと、あと1ステップ残ってたよ。
(考えてみればここまでFacebookページの情報を何も入力していないのに、これで出来たら怖い)

4. Facebookページのアクセストークンを取得

これで最後。

https://graph.facebook.com/me/accounts?access_token=<長寿命のアクセストークン>

上記URLにアクセスすると、以下のようにJSON形式でデータの取得ができる。

{
   "data": [
      {
         "category": "Community",
         "name": "Manulneko",
         "access_token": <ページのアクセストークン>,
         "perms": [
            "ADMINISTER",
            "EDIT_PROFILE",
            ・
            ・
            ・
         ],
         "id": "1419995074910592"
      }
	]
}

複数ページの管理者の場合は「data」内容が下に続いていくよう。
「perms」(パーミッション)は設定次第でそれぞれ。
再度アクセストークンデバッガーで確認してみると、キャプチャのように「プロフィールID」という項目が増えている。これがページアクセストークンの証拠(なのか?)。

アクセストークンデバッガー2

たぶん、これで大丈夫なんだと思う。
もっとスラスラ英語が読めるようになりたい。

おまけ:アクセストークン取得のためのURLジェネレータ

ここまでの通り、ページアクセストークンを取得するまでには4種類ものURLを叩かなければならず面倒くさい。そこでせめて叩くURLを生成するやつを自分用に残しておく。
(滅多に使わないし、別に便利じゃない気もするんだけど)

1. OAuth認証用



2. 短命のアクセストークン取得用





3. 長寿命のアクセストークン取得用




4. Facebookページのアクセストークンを取得