inohilog

/var/log/inohiro.log

Facebook Graph API での投稿(Post)にハマった件

  • 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 )

2) なんだかよくわからない投稿のバグを潰す

  • 最終的な原因は,Facebook Graph API が REST でなくなった,ということで良いのだろうか
  • これまで RestClient.post していたところを,RestClient.get するようにした
    • ただし,パラメータに "method=post" を付ける必要がある
  • それから "me/feed" としていたところを,"#{user_id}/feed" とすることになった
    • user_id は Facebook における id (integer), access_token があれば取得できる

得た知識