マメな人はバカであれ

バカなりに考えて、バカなりに行動します

技術的なことや、趣味的なことや、私生活的なことを書いてきます

Facebookで無期限のPage Access Token(アクセストークン)を作るまで

Facebookページのフィードを取得してデザインに当てはめたいっていうのはよくあります。
取得だけなら簡単ですが、アクセストークンには有効期限があります。
それをなんとか無期限にして取得したい!

ってことで調べてまたメモ用にここに記載しておこう。


ここで注意していただきたい。

ここで作るのは"無期限"の"Page Access Token"である。

"無期限"の"User Access Token"ではないのでご注意を。


必要なもの

FacebookAPIなんでまずは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が必須になったらしいです。
なので、facebookAPIを使ったりするなら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

hirofukami.com

Facebook API: 有効期限の長い Access Token を取得する · GitHub

先人の知恵は偉大。ありがとうございました。