2011.10.28 achamaro
最近先輩方がfacebook絡みの事やってるのをみて
ちょっとやってみたところ
はまりました。
参考にしたのは
「fasebook アプリ ウォール 投稿」でググって一番最初に出てきた
とりあえずここからSDK落としてきて参考サイトのコードをコピペして動かしてみると
getSessionという関数がないよってエラーがでる。
どうもSDKのバージョンが違うみたい。
とりあえずファンページは無視して自分のウォールに投稿してみるコードを書いてみた
require_once('facebook-php-sdk/src/facebook.php'); $fb = new Facebook(array( 'appId' => "アプリのID", 'secret' => "アプリの秘密鍵(Facebookページではアプリの秘訣ってなってました)", )); $uid = $fb->getUser(); $error=""; // ユーザが取得できた場合 if ($uid) { $btn_message = "ログアウト"; $btn_url = $fb->getLogoutUrl(); try { $me = $fb->api('/me'); // メッセージがPOSTされた場合 if (isset($_POST['message']) && $message = $_POST['message']) { $param = array( 'message' => $message, 'name' => $me['name'] . " from achamaro api", 'access_token' => $fb->getAccessToken() ); $fb->api("/$uid/feed", 'POST', $param); } } catch (FacebookApiException $e) { $error = $e->getMessage(); } } // ユーザが取得できなかった場合 else { $btn_message = "ログイン"; $btn_url = $fb->getLoginUrl(array('req_perms'=>'status_update,publish_stream')); }
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>ウォールに投稿してみる <body> "><?= $btn_message?> <?php if ($uid):?><?=$error?>
<?php endif;?> </body> </html>
※注 hrefとsrcを都合上href、srcとしています
これでやってみたところ
#200 The user hasn't authorized the application to perform this action.
というエラーが返ってきました。。。
アプリの設定をいじってみたり、色々さわってみたりしてもさっぱり
エラー文言でググってもそれっぽいのが見つからない。。
そんな中たまたま、デベロッパーページのアプリの設定ページにある
「Graph API Explorer」を触っていると、どうも認証に行くときにどうやら
権限が「scope」というパラメータ名で渡されている事に気づく!
えーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
試しに、
$fb->getLoginUrl(array('scope'=>'status_update,publish_stream'));
と変更してみたところ、 認証画面で今まで出てなかった、「ウォールへの投稿」が出てきた。 認証後のページでメッセージPOSTしたら自分のウォールに投稿されました。 めでたしめでたし。
にしてもSDKのバージョンでAPIのパラメータ名変えるのって;;;;;
因みにSDKのバージョンはユーザーエージェントとして送られてるみたいです。
ログアウトしてもgetUserでIDとれる時あるみたいですが、そこはSDKについてきたexample.phpとロジックは同じなのでおいおい見ようと思います