- Facebook Graph API を用いて,Rails なサービスから認証済みのユーザーのfeedに投稿したい
- これまで既に動いていて,今年の7-8月あたりのAPIの更新で動かなくなっていたっぽい
- 今回は,Facebook Graph API で用いる access_token の期限が有限になり,
- 1) 取得してから2時間という制限を60日に伸ばす,のと
- 2) なんでかよくわからないけど投稿できなくなった,というバグに対応した
1) access_token の期限を伸ばす
- イメージ
- oauth 認証するために,app_id, app_secret, service_url(https://graph.facebook.com/) にリクエストしてコードをもらう
- もらったコードを使って,実際に利用するユーザーにFacebookにリクエストしてもらって,アプリ利用の許可を得る
- 得られた access_token を使って,ユーザー情報の参照や,feed への投稿等を行う
- この access_token の期限が,2時間くらいになった.そのまま使うこともできるが,今回は60日(2ヶ月くらい)に伸ばす
- 期限を伸ばすリクエストをして,access_token の期限を伸ばす
params = {
:client_id => service.key,
:client_secret => service.secret,
:grant_type => fb_exchange_token,
:fb_exchange_token => EXISTING_ACCESS_TOKEN
}
response = RestClinet.get( 'https://graph.facebook.com/oauth/access_token', :params => params )
- access_token の期限などは下のページで確認することができる
2) なんだかよくわからない投稿のバグを潰す
- 最終的な原因は,Facebook Graph API が REST でなくなった,ということで良いのだろうか
- これまで RestClient.post していたところを,RestClient.get するようにした
- ただし,パラメータに "method=post" を付ける必要がある
- それから "me/feed" としていたところを,"#{user_id}/feed" とすることになった
- 遭遇したエラーメッセージ
- "400 Bad Access": パラメータとかが足りてない
- "This API call requires a valid app_id": method="post" を付けて,HTTP GET する
- "OAuthException: An active access token must be used to query information about the current user."
- "403 Forbidden": access_token がおかしいとか