Facebookで無期限のPage Access Token(アクセストークン)を作るまで
Facebookページのフィードを取得してデザインに当てはめたいっていうのはよくあります。
取得だけなら簡単ですが、アクセストークンには有効期限があります。
それをなんとか無期限にして取得したい!
ってことで調べてまたメモ用にここに記載しておこう。
ここで注意していただきたい。
ここで作るのは"無期限"の"Page Access Token"である。
"無期限"の"User Access Token"ではないのでご注意を。
必要なもの
FacebookのAPIなんでまずはDevelopersに登録しておきます。
https://developers.facebook.com/apps/
Facebook API 経由でFacebookページを操作するために必要なもの
- App ID(数字だけが羅列してるやつ)
- App Secret(設定のベーシックにある●●●●●●ってやつ)
- Page Access Token(これから取得する)
ここで注意
Page Access Tokenを取得するので、
「設定」から
「ベーシック」で
「プラットフォームを追加」
「ウェブサイト」を選択して
「サイトURL」にFacebookのフィードを載せるURLなんかを登録しておく。
アプリドメインも登録しておきましょう。
アプリドメインはサイトURLのドメイン・サブドメイン部分を登録すれば良いはず。
それから「プロダクト」から「Facebookログイン」を作成。
クイックスタートはテキトーに流して。
こいつの「設定」に「有効なOAuthリダイレクトURI」ってのがあるのでこれも登録してきます。
ちなみに、このOAuth設定ですが、ある時期からhttpsが必須になったらしいです。
なので、facebookのAPIを使ったりするならSSL化が条件になりますので忘れないようにしないと。
ここまでしないと、ちゃんとAPIがデータを取得してくれませんでした…
(もしかしたら自分のやり方がおかしかったのかも…)
アプリの認証から
ここまでできたらアプリの認証から行う。
https://www.facebook.com/dialog/oauth?client_id={App ID}&redirect_uri={サイトURL}
client_id : App IDのこと redirect_uri : 設定のベーシックで登録したサイトURL
上記のURLでアクセスしたら記載したサイトURLにリダイレクトされます。
そうするとURLにクエリでcode=~~~
と追加されています。
これがアプリの認証コードになるのでメモっておきましょ。
User Access Tokenの取得
次は認証コードをを使ってUser Access Tokenを取得します。
https://graph.facebook.com/oauth/access_token?client_id={App ID}&redirect_uri={サイトURL} &client_secret={App Secret}&code={Code}
client_id : App IDのこと redirect_uri : 設定のベーシックで登録したサイトURL client_secret : App Secretのこと code : さっき取得した認証コードのこと
上記のURLでまたアクセスする。 すると下記のような配列で返してくれます。
{"access_token":"1234567890ABCDEF","token_type":"bearer"}
このaccess_token
がUser Access Tokenになります。
Page Access Tokenを取得
取得したUser Access Tokenを使います。
https://graph.facebook.com/me/accounts?access_token={User Access Token}
access_token : さっき取得したUser Access Tokenを入れる。
上記のURLでアクセスするとまた配列でFacebookページの一覧で返ってきます。
{ "data": [ { "access_token": "Page Access Token", "category": "category", "name": "name", "id": "1234567890", "perms": [ ] } ], "paging": { } } }
ここでいうaccess_token
が取得したかったPage Access Tokenになります。
やったね。
一応、アクセストークンのデバッガーで確認しておきましょう。
https://developers.facebook.com/tools/debug/accesstoken/
ここで有効期限 受け取らないってなっていれば無期限のアクセストークンの取得が成功となります。
今回ハマったの
今回ハマったのはFacebookページを作っていなかったところですね。
別のアカウントが作ったFacebookページを使いたかったんだけど、自分の管理下で作成したFacebookページじゃないといけないっていうのに恐ろしく気づかなかった…
考えればわかることではあるんだけど、人間一つのことに詰まると周りが見えなくなってね…
言い訳もさておいて、これでとりあえず一安心しました。
他にも方法はいくつかあるようでした。
参考にさせていただいたのは↓
qiita.com
Facebook API: 有効期限の長い Access Token を取得する · GitHub
先人の知恵は偉大。ありがとうございました。