MENU

facebookのPHP-SDKを使わずに自力でウォール書き込みまで実装(´Д⊂ヽ

先日のエントリーで、PHP-SDK使えば超カンタンだぜ!的に書いたんですが、ワタクシのお客様がWebARENAの共用サーバを利用しておりまして、そのサーバのPHPのバージョンが5.1.6だったため、PHP-SDK自体が使えませんでした。・゚・(ノД`)・゚・。(まぁPHP4じゃないだけマシっちゃーマシですね)

どこにも書いてない(探せなかった)んですが、「json_decodeを使っている」ってことは「PHP 5 >= 5.2.0」なんですね。

てわけで、自力で実装してみました。
とは云ってもフルスクラッチは時間がかかって仕方ないので、PEARだけは使わせて頂きます!

※セキュリティに関する部分とかチェックとかは省略しているので、そのままコピペで使っちゃダメですよん。

まずは共通で使うパラメータを設定。

define('FACEBOOK_KEY', '123456789012345');
define('FACEBOOK_SECRET', '123456789abcdef123456789abcdef12');
define('FACEBOOK_CONNECT', 'http://test.com/_connect.php');

3行目は、アプリ登録時に指定したものでよければ、なくてもOK。

次にログインURLを取得。

//facebookログイン用URLを取得
session_start();
$_SESSION['facebook_state'] = md5(uniqid(rand(), TRUE));
$authorize_url = 'https://www.facebook.com/dialog/oauth?'
	. 'client_id='. FACEBOOK_KEY
	. '&redirect_uri='. rawurlencode(FACEBOOK_CONNECT)
	. '&scope='. rawurlencode('publish_stream')
	. '&state='. $_SESSION['facebook_state'];
echo $authorize_url;

次は、facebookの認証ページから帰ってきたときの処理。

session_start();
if ($_GET['state'] == $_SESSION['facebook_state'])
{
	$token_url = 'https://graph.facebook.com/oauth/access_token'
		. '?client_id='. FACEBOOK_KEY
		. '&redirect_uri='. urlencode(FACEBOOK_CONNECT)
		. '&client_secret='. FACEBOOK_SECRET
		. '&code='. $_GET['code'];
	
	$response = file_get_contents($token_url);
	$params = NULL;
	parse_str($response, $params);
	
	$_SESSION['facebook_access_token'] = $params['access_token'];
}

で、ユーザー情報取得とかウォールに書き込んだりとか。

session_start();
if ($_SESSION['facebook_access_token'])
{
	//ユーザー情報取得
	require_once 'Services/JSON.php';
	$json = new Services_JSON();
	$graph_url = 'https://graph.facebook.com/me'
		. '?access_token='. $_SESSION['facebook_access_token'];
	
	$user = $json->decode(@file_get_contents($graph_url));
	
	if ( ! $user)
	{
		echo 'error';
		unset($user);
		exit();
	}
	else
	{
		if (isset($user->username))
		{
			echo "USERNAME: {$user->username}\n";
		}
		echo "NAME: {$user->name}\n";
	}
	
	//ウォールに書きこんでみる
	$graph_url = 'https://graph.facebook.com/me/feed';
	try
	{
		require_once 'HTTP/Request2.php';
		$request = new HTTP_Request2();
		$request->setConfig('ssl_verify_peer', FALSE);
		$request->setUrl('https://graph.facebook.com/me/feed');
		$request->setMethod(HTTP_Request2::METHOD_POST);
		$request->addPostParameter(array(
			'message' => 'こんにちは、ボクです。PHPからウォールに書きこんでみるテスト。',
			'access_token' => $_SESSION['facebook_access_token'],
		));
		$result = $request->send();
	}
	catch(HTTP_Request2_Exception $e)
	{
		echo "Error: {$e->getMessage()}\n";
	}
	catch (Exception $e)
	{
		echo "Error: {$e->getMessage()}\n";
	}
	
	if (isset($result))
	{
		$response = $json->decode($result->getBody());
		if (isset($response->error))
		{
			echo "Error: {$response->error->message}\n";
		}
		else
		{
			echo "ID: {$response->id}\n";
		}
	}
}

てな感じでフィニッシュ。