結構ハマったから、書いておきます。
やりたかったのは、
アプリからOAuth認証→掲示板に書き込みorLike自動押下。
まず、アプリからOAuth認証させるには?
アプリの設定で、OAuthを許可しなければいけません←最初のハマりポイント
デフォルトはNGなのです。
そのあと、キャンバスにOAuth認証用のリンクを発行します。
例えばPHPなら
$facebook->getLoginUrl();
しかし!このOAuthでは、ユーザー情報の読み込みしかできないのです。
ちなみに、これで発行されるURLはこんな感じ。
https://www.facebook.com/login.php?api_key={API_KEY}&cancel_url={CURRENT_PAGE}&display=page&fbconnect=0&next={CURRENT_PAGE}&return_session=1&session_version=3&v=1.0
いわゆる、りーどおんりー。
さらにリダイレクト先は、iFrameの本体のほうに行ってしまう。(まぁ、そこからリダイレクト処理を走らせればいいので、これは問題ないのですが)
他の権限を与えるために、引数が必要。
実際はこう
$facebook->getLoginUrl(array('req_perms' => 'publish_stream'));
これで、こんなのが発行される。
https://www.facebook.com/login.php?api_key={API_KEY}&cancel_url={CURRENT_PAGE}&display=page&fbconnect=0&next={CURRENT_PAGE}&return_session=1&session_version=3&v=1.0&req_perms=pulish_stream
この赤いところ重要。
これがついていると、掲示板に書き込み許可があるOAuth認証になる。
ちなみに、publish_stream以外にもカンマでつないで色々渡せる。例えば。
offline_access,manage_pages,user_checkins,friends_checkins,user_photos
全部は見てないけど、この辺に詳しく載っている。
http://developers.facebook.com/docs/authentication/permissions
user_checkinsとかこれから使うかもね。
あっ、ちなみに、req_perms以外にも引数渡せる。
'canvas' => 1
とかやると、アプリのページにiFrameに入れ子になった状態でリダイレクトされる。
まぁそんなわけで、これでOAuth認証がOK。
これでリダイレクトされると、AccessTokenというものが手に入る。
facebook->getAccessToken();
facebook->getSession();
たぶん、セッションにも入ってるかな。
これを使ってあとはポスト
curl -F 'access_token={access_token}' \
-F 'message=hello world' \
https://graph.facebook.com/{user_id}/feed
で、成功すると記事IDが返ってくる。
これにLIKEするには
curl -F 'access_token={access_token}' \
https://graph.facebook.com/{user_id}_{記事ID}/likes
user_idと記事IDをアンスコ(_)でつなげたものをPOST_IDというみたい。
user_idしかためしてないけど、ファンページならuser_idがpanpage_idになるのかな?
そこは要調査。
まぁ、そんなわけで掲示板投稿とLIKEが成功しましたとさ。
丸々2日かかりました。
ちなみに、API越しに投稿&LIKEしたのがこれです。
http://www.facebook.com/profile.php?id=1306381669&v=wall&story_fbid=123768044343116
日に日に英語が読めるようになっている気がする。。。
やりたかったのは、
アプリからOAuth認証→掲示板に書き込みorLike自動押下。
まず、アプリからOAuth認証させるには?
アプリの設定で、OAuthを許可しなければいけません←最初のハマりポイント
デフォルトはNGなのです。
そのあと、キャンバスにOAuth認証用のリンクを発行します。
例えばPHPなら
$facebook->getLoginUrl();
しかし!このOAuthでは、ユーザー情報の読み込みしかできないのです。
ちなみに、これで発行されるURLはこんな感じ。
https://www.facebook.com/login.php?api_key={API_KEY}&cancel_url={CURRENT_PAGE}&display=page&fbconnect=0&next={CURRENT_PAGE}&return_session=1&session_version=3&v=1.0
いわゆる、りーどおんりー。
さらにリダイレクト先は、iFrameの本体のほうに行ってしまう。(まぁ、そこからリダイレクト処理を走らせればいいので、これは問題ないのですが)
他の権限を与えるために、引数が必要。
実際はこう
$facebook->getLoginUrl(array('req_perms' => 'publish_stream'));
これで、こんなのが発行される。
https://www.facebook.com/login.php?api_key={API_KEY}&cancel_url={CURRENT_PAGE}&display=page&fbconnect=0&next={CURRENT_PAGE}&return_session=1&session_version=3&v=1.0&req_perms=pulish_stream
この赤いところ重要。
これがついていると、掲示板に書き込み許可があるOAuth認証になる。
ちなみに、publish_stream以外にもカンマでつないで色々渡せる。例えば。
offline_access,manage_pages,user_checkins,friends_checkins,user_photos
全部は見てないけど、この辺に詳しく載っている。
http://developers.facebook.com/docs/authentication/permissions
user_checkinsとかこれから使うかもね。
あっ、ちなみに、req_perms以外にも引数渡せる。
'canvas' => 1
とかやると、アプリのページにiFrameに入れ子になった状態でリダイレクトされる。
まぁそんなわけで、これでOAuth認証がOK。
これでリダイレクトされると、AccessTokenというものが手に入る。
facebook->getAccessToken();
facebook->getSession();
たぶん、セッションにも入ってるかな。
これを使ってあとはポスト
curl -F 'access_token={access_token}' \
-F 'message=hello world' \
https://graph.facebook.com/{user_id}/feed
で、成功すると記事IDが返ってくる。
これにLIKEするには
curl -F 'access_token={access_token}' \
https://graph.facebook.com/{user_id}_{記事ID}/likes
user_idと記事IDをアンスコ(_)でつなげたものをPOST_IDというみたい。
user_idしかためしてないけど、ファンページならuser_idがpanpage_idになるのかな?
そこは要調査。
まぁ、そんなわけで掲示板投稿とLIKEが成功しましたとさ。
丸々2日かかりました。
ちなみに、API越しに投稿&LIKEしたのがこれです。
http://www.facebook.com/profile.php?id=1306381669&v=wall&story_fbid=123768044343116
日に日に英語が読めるようになっている気がする。。。