« 02.06 ハッカソンに初参加 | ココ | 02.11 FQLでいいね!取り »
2011年2月 9日
Facebook Graph API でいいね!取り
さて、前回家に帰ってからうまくいかなくなってしまったAPIでのアクセス、とりあえずできるようになったので。AKB48で学ぶFacebookアプリとファンページの連携方法 (ref. web探検隊)を参考にしたことは、書いた通り。
<?php
require_once 'facebook-php-sdk/src/facebook.php';
// Create our Application instance.
$facebook = new Facebook(array(
'appId' => 'xxxxxxxxxxxxx',
'secret' => 'xxxxxxxxxxxxx',
'cookie' => false,
));$session = $facebook->getSession();
if (!$session) {
$url = $facebook->getLoginUrl(array(
'canvas' => 0,
'fbconnect' => 0,
'next' => 'http://localhost/h/', // 遷移先(ここではlocalhost)
// offline_accessオフラインでのアクセス許可
'req_perms' => 'offline_access,user_status,read_stream,user_likes,friends_likes'
));
// アプリ未登録ユーザーなら facebook の認証ページへ遷移
echo "<script type='text/javascript'>top.location.href = '$url';</script>";
exit();
}$me = $facebook->api('/me');
?>
<!doctype html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>php-sdk</title>
<style>
body {
font-family: 'Lucida Grande', Verdana, Arial, sans-serif;
}
h1 a {
text-decoration: none;
color: #3b5998;
}
h1 a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<h3>You</h3>
<img src="https://graph.facebook.com/<?php echo $me['id']; ?>/picture">
<?php echo $me['name']; ?><h3>Your User Object</h3>
<pre><?php print_r($session); ?></pre></body>
</html>
http://localhost/h/index.phpを↑のようにすると、最初にhttp://localhost/h/にアクセスしたときに認証を求める↓のようになる。
ここで、作業を落ち着いてできるように、そして今後バックグラウンドで処理することを考慮して、オフラインでのアクセス許可(offline_access)を要求するPermissionに含めておく。すると、画面上では赤で囲んだように出てくる。
許可すると、今後アクセスするために必要となるaccess_tokenを含むセッション情報が画面に表示されるのでコピる。
<?php
require_once 'facebook-php-sdk/src/facebook.php';
// Create our Application instance.
$facebook = new Facebook(array(
'appId' => 'xxxxxxxxxxxxx',
'secret' => 'xxxxxxxxxxxxx',
'cookie' => false,
));// さっき取ってきたアクセストークン
$access_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";// FB APIで友人の配列を取得
$friends = $facebook->api('/me/friends','GET',array('access_token'=>$access_token));
// FB APIで自分の投稿を取得
$myposts = $facebook->api('/me/posts','GET',array('access_token'=>$access_token));$like_users = array();
$like_user_ids = array();?>
<!doctype html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>php-sdk</title>
<style>
body {
font-family: 'Lucida Grande', Verdana, Arial, sans-serif;
}
h1 a {
text-decoration: none;
color: #3b5998;
}
h1 a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<h3>You</h3>
<img src="https://graph.facebook.com/<?php echo $me['id']; ?>/picture">
<?php echo $me['name']; ?><h3>Your posts</h3>
<?php foreach ($myposts['data'] as $post) { ?>
<h4><?php echo $post['id']; ?> : <?php echo $post['message']; ?></h4>
<pre>
<?php
// FB APIで投稿についての「いいね!」しているユーザーを取得
$likes = $facebook->api($post['id']."/likes",'GET',
array('access_token'=>$access_token));
foreach ($likes['data'] as $like) {
if (!$like_users[$like['name']]) {
$like_users[$like['name']] = 1;
$like_user_ids[$like['name']] = $like['id'];
} else {
$like_users[$like['name']]++;
}
echo $like['name']." ";
} ?></pre>
<?php } ?></body>
</html>
新しくPHPファイルを↑のように作ることで、↓のようなアクセス結果が得られる、と(これを前回出したかった!!)。
そして、$like_usersには(name => like数)、$like_user_idsには(name => user_id)が格納されるので、あとはこいつらを利用すると。けど…これは意外と遅い。そりゃ、投稿ごとに1回1回API呼び出してるんやから、意外というほどのことでもないけど。
まぁ、とりあえずこれで目的は達成したので今回はここまで。
前回のエラーののち、どうやって復旧させたかについて、メモ。どうも、Facebook APIでは、一度確立しているセッション($facebook->getSession())は、$facebook->getLogoutUrl(array('session_key' => $session['session_key']))とかやっても、セッションをリセットできないらしい…何度やっても、オフラインアクセスを有効にしている状態では同じアクセストークンが返ってきてしまうという、なんという仕様(FBアプリのシークレットコードを変更しても無駄だった)。
なので、アクセストークンをリセットするためには、ユーザー側でアプリを削除しないといけなかった。しかもその場所がややこしい。
左から、「アカウント>プライバシー設定」、「アプリ・ゲーム・ウェブサイト」、「利用しているアプリ」、赤で囲んだところをクリックしていくと見れるわけやけど…これ絶対見つけにくい。ここから、自分で作ったアプリを削除すると、セッション情報がきれいさっぱりなくなる。
By ただ at 21:02 カテゴリー ; PinMarch Samples , プログラミング単語帳 , プログラミングとか
« 02.06 ハッカソンに初参加 |
02月の記事
| 02.11 FQLでいいね!取り »
トラックバック
このエントリーのトラックバックURL:
http://pinmarch.sakura.ne.jp/mt/mt-tb.cgi/1715
このリストは、次のエントリーを参照しています: Facebook Graph API でいいね!取り:
We won my mum over to computers with spreadsheets and online banking (because...
トラックバック時刻: 2015年9月20日 19:16