MENU

facebookのPHP-SDKで、ウォールに書き込んだり、フレンドリストを取得したり。

TwitterのAPIはほぼマスターしたんだけど、facebook APIはまだ触ってみたことなかったのでいざ挑戦!ってわけです。
まぁたまたまそういう仕事が来そうだったので予習です、予習。


facebook DEVELOPERSというサイトに各種ドキュメントがあります。

アプリ登録を行って、アプリIDとアプリの秘訣を取得する

「アプリの秘訣ってなんだよw」てな感じですが、まぁサイトにそう書いてるから仕方ねぇっすよ。

こちらでアプリの登録を行います。右上にある[+Create New App]というボタンからね。

アプリ名だけ入力すればOK。恐ろしく見えにくいCAPTCHAという難関を乗り越えれば、あっさりアプリIDとアプリの秘訣が取得できます。
で、「アプリの秘訣ってなんだよw」ですよね?
はいはい、App Secretのことです。訳の解らん和訳で「アプリの秘訣」ってなってるわけです、はい。

PHP SDKの取得

なんと親切!!こちらに各種プラットフォーム(言語?)向けSDKが用意されています。Javascript、iOS、Android、PHP、その他これから増えていきそうですね、知らんけど。

で、今回はPHP SDKを。今日現在(2011/06/30)では、githubから配信しています。これをまるっとダウンロード。実際使うのはsrcディレクトリ内の
- base_facebook.php
- facebook.php
- fb_ca_chain_bundle.crt
の3ファイルのみ。

さぁライブコーディーーーング!

あ、ブログに書いてる時点ですでに「ライブ」ではないんですけど……、まぁ……、気分です。

まずは、モジュールの読み込み。ボクの場合はsrcというディレクトリ名をsdkに変更して、そのままアップロードしたので、

sample.php

<?php

require_once 'sdk/facebook.php';

となりました。次に、アプリIDと秘訣を使ってfacebookオブジェクトを作ります。

$facebook = new Facebook(array(
	'appId' => '123456789012345',
	'secret' => '1234abcd1234abcd1234abcd1234abcd'
));

で、ログイン状態を取得します。

$fb_user = $facebook->getUser();

これでログイン状態が返ってくればログイン済み、でなければ未ログインとなりますね。ログインというよりユーザーによるアプリの許可です。

では、どうやればアプリの許可を得られるんでしょうか。
今回は、ウォールへの書き込みと、フレンドリストを取得するのが目的なので、

$par = array('scope' => 'publish_stream,read_friendlists');
$fb_login_url = $facebook->getLoginUrl($par);

とやって、ログイン用のURLが得られます。これだけ。ここで得られたURLをクリックするとfacebookに飛んで、あとはいい感じにfacebookがやってくれた後、勝手に元のページに戻ってくれます。

次に目的の「ウォールへの書き込み」

アプリの許可が得られたら、

$facebook->api('/me/feed', 'POST', array('message' => 'はじめましてこんにちは、ボクです。'));

……、こんだけ。

じゃぁ最後に「フレンドリストを取得する」は??

$fb_user_friends = $facebook->api('/me/friends');

……、……、こんだけ。

TwitterのAPIより取り回しが256倍くらい簡単です。ぶっちゃけこんなんじゃ仕事にはなっても儲けにはならんだろうな、きっと。

最後に上記のPHPソースを晒しておきます。

<?php

require_once 'sdk/facebook.php';

$facebook = new Facebook(array(
	'appId' => '123456789012345',
	'secret' => '1234abcd1234abcd1234abcd1234abcd'
));

//ログイン状態を取得
$fb_user = $facebook->getUser();

if ($fb_user)
{
	//ユーザープロファイルを取得
	try {
		$fb_user_profile = $facebook->api('/me');
	}
	catch (FacebookApiException $e)
	{
		//プロファイル取得に失敗
		error_log($e);
		$fb_user = null;
	}
	
	//フレンドリストを取得
	try {
		$fb_user_friends = $facebook->api('/me/friends');
	}
	catch (FacebookApiException $e)
	{
		//フレンドリスト取得に失敗
		error_log($e);
	}
}

//ログインURLとログアウトURLを取得
if ($fb_user)
{
	//ログアウトURL取得
	$fb_logout_url = $facebook->getLogoutUrl();
	
	//ついでに叫んでやるぜ!
	$facebook->api('/me/feed', 'POST', array('message' => 'はじめましてこんにちは、ボクです。('. date('r'). ')'));
}
else
{
	//ログインURL取得
	$par = array('scope' => 'publish_stream,read_friendlists');
	$fb_login_url = $facebook->getLoginUrl($par);
}

//ボクは〜ここ〜に〜い〜〜る〜〜〜♪
$motoo = $facebook->api('/hideyuki.motoo');

?><!DOCTYPE html>
<?php	if ($fb_user): ?>
	<a href="<?=$fb_logout_url;?>">Logout</a>
	<h3>You</h3>
	<img src="https://graph.facebook.com/<?=$fb_user;?>/picture">
	
	<h3>Your User Object (/me)</h3>
	<pre><?php print_r($fb_user_profile); ?></pre>
	
	<h3>Your Friends Object (/me/friends)</h3>
	<pre><?php print_r($fb_user_friends); ?></pre>
<?php	else: ?>
	<div>
	Login using OAuth 2.0 handled by the PHP SDK:
	<a href="<?=$fb_login_url;?>">Login with Facebook</a>
	</div>
	<strong><em>You are not Connected.</em></strong>
<?php	endif ?>

<h3>Public profile of hideyuki.motoo</h3>
<p>
<img src="https://graph.facebook.com/hideyuki.motoo/picture">
<?=$motoo['name'];?>
</p>

追記:PHP-SDKが使えない(PHP5.2未満)の場合のエントリーも追加しました。