facebook SDK/APIハマリ道(その1)

facebook SDK/APIハマリ道(その1)

 facebookPHPSDKを使おうと思ってドキュメント探しても見つからないと思ったら本当に存在しないらしいとか、適当に検索で引っかかった記事を参考にテストコードを書いてみたら仕様が変わってて(多分)動かないとか、素敵仕様っぷりにイラッ☆ときたので、参考までにメモしておく。

(半年後に役に立たなくなってる可能性が高いけど)

認証(ログイン)時のパーミッションはreq_permsからscopeに変わったよ、多分。

 ログイン時に必要なパーミッションを取るためにreq_permsで指定してる記事をよく見かけますが(検索して上位に出てきたのは全部これだった)、今はscopeらしいです。これでしばらく悩んでましたよ。

 イマイチ見通しの悪い公式サイトの認証のとこ読んでようやく気付きましたが。

まっとうなテストユーザー管理ツールを見つけるまでの繋ぎ

 テストユーザーの作り方とか見かけるけど、コンソールで作るの面倒だし、んなのいいから管理ツール誰か作ってよ、というかどこかにあるんでしょ? とか思いつつ、PHP SDKを使ったものも見かけなかったので試しに作ったモノ。

 エラー処理とかは適当なので、外から見えるとこには置かない方がいいでしょう。

(追記:2011-07-07/名前の表示や削除機能を追加するなどしました)



	$app_id = '****';
	$secret = '****';

	require 'fb3.0.1/facebook.php';
	$facebook = new Facebook(array(
	   'appId' => $app_id,
	   'secret' => $secret,
	));

	function _search_user($testuser_list, $id) {
		foreach ($testuser_list as $testuser) {
			if ($testuser['id'] == $id) return $testuser;
		}
	}

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>facebook test-userstitle>
head>
<body>
<h3>test usersh3>

	$result = $facebook->api("/{$app_id}/accounts/test-users");
	$testuser_list = $result['data'];
?>
<ul>
 foreach ($testuser_list as $testuser): ?>

    $profile = $facebook->api("/{$testuser['id']}");
?>
	<li>
		<form method="POST" action=" echo $_SERVER['SCRIPT_NAME'] ?>" onSubmit="return confirm('本当に削除してもよろしいですか?')">
		<a href=" echo $testuser['login_url'] ?>"> echo $testuser['id'] ?>a>
		<span> echo $profile['name'] ?>span>
		<span>( echo $profile['gender'] ?>)span>
<input type="hidden" name="user_id" value=" echo $testuser['id'] ?>" />
<input type="submit" name="rm" value="remove user" />
		form>
	li>
 endforeach ?>
ul>
 if (isset($_POST['rm']) and $_POST['rm'] === 'remove user'): ?>

	$user_id = trim($_POST['user_id']);
	$remove_user = _search_user($testuser_list, $user_id);
	if ($remove_user) {
		$facebook->setAccessToken($remove_user['access_token']);
		$result = $facebook->api("/{$remove_user['id']}", 'DELETE');

		$msg = $result? "{$remove_user['id']}を削除しました": "削除に失敗しました";
?><p>
 echo $msg ?>
p>
	}
?>
 endif ?>

<h3>create userh3>
<form method="POST" action=" echo $_SERVER['SCRIPT_NAME'] ?>">
<input type="submit" name="rm" value="create user" />
form>
 if (isset($_POST['rm']) and $_POST['rm'] == 'create user'): ?>

	$result = $facebook->api("/{$app_id}/accounts/test-users", 'POST', array(
		'installed' => 1,
		//'permissions' => "offline_access,read_stream,publish_stream",
	));
?>
 if ($result): ?>
<p>作成したテストユーザーは以下の通りです:p>
<ul>
	<li>facebook id: <a href=" echo $result['login_url'] ?>"> echo $result['id'] ?>a>li>
	<li>access token:  echo $result['access_token'] ?>li>
	<li>email:  echo $result['email'] ?>li>
	<li>password:  echo $result['password'] ?>li>
ul>
 else: ?>
<p>作成に失敗しましたp>
 endif ?>
 endif ?>

<h3>make friendh3>
<form method="POST" action=" echo $_SERVER['SCRIPT_NAME'] ?>">
from:<input name="friend_from" size="20" /><br />
to:<input name="friend_to" size="20" /><br />
<input type="submit" name="rm" value="make friend" />
form>
 if (isset($_POST['rm']) and $_POST['rm'] == 'make friend'): ?>

	$from_user = _search_user($testuser_list, trim($_POST['friend_from']));
	$to_user = _search_user($testuser_list, trim($_POST['friend_to']));
?>
 if ($from_user and $to_user): ?>

	$facebook->setAccessToken($from_user['access_token']);
	$result = $facebook->api("/{$from_user['id']}/friends/{$to_user['id']}", 'POST');
	$msg = $result? "成功しました": "失敗しました";
?>
<p> echo $msg ?>p>
 else: ?>
<p>ユーザーが見つかりませんでしたp>
 endif ?>
 endif ?>
body>
html>

ところで、

 facebookの事はまったく分からないのだけれど、はてなダイアリーとかグループに付けるボタンは「いいね!」より「シェア」ボタンのほうがよくね? あんま関係ないの?

(や、違いがよー分からんので)