映画「ソーシャルネットワーク」を見て創作意欲が湧き、コードが書きたくなったwatanabeです。
今年はFacebook元年と言われており、Facebookを利用した販促や広告、キャンペーンなどが増えてくるでしょう。
その中でよく使われそうな「アルバムへの投稿」をピックアップして、実装してみました。
今回はFacebookのPHPのSDKを利用します。
https://github.com/facebook/php-sdk/
SDKならソーシャルグラフAPIを使うと便利です。
Graph API Reference
折角なので、FQLも使ってみましょう。
http://developers.facebook.com/docs/reference/fql/
早速、日曜大工的にコードを書いてみたので、見てみましょう。
クラス
<?php
include('lib/facebook.php');
class MyPhotoAlbumFacebook
{
const APP_ID = '000000';
const SECRET = 'xxxxxx';
var $facebook;
public function __construct()
{
$this->facebook = new Facebook(
array(
'appId' => self::APP_ID,
'secret' => self::SECRET,
'cookie' => true,
)
);
}
public function login()
{
if (!$this->facebook->getSession()) {
$loginParameters = array(
'canvas' => 1,
'fbconnect' => 0,
'req_perms' => 'status_update, publish_stream, user_photo_video_tags, friends_photo_video_tags, user_photos, friends_photos'
);
$url = $this->facebook->getLoginUrl($loginParameters);
echo "<script type='text/javascript'>top.location.href = '$url';</script>";
exit;
}
return true;
}
public function getFacebook()
{
return $this->facebook;
}
public function getMe()
{
return $this->facebook->api('/me');
}
public function postPhoto($source, $message = null, $tags = array())
{
$source = '@' . realpath($source);
try {
$requestParameters = array(
'access_token' => $this->facebook->getAccessToken(),
'message' => $message,
'source' => $source,
);
if ($tags) {
$requestParameters['tags'] = array($tags);
}
$this->facebook->setFileUploadSupport(true);
$response = $this->facebook->api('me/photos', 'POST', $requestParameters);
} catch (FacebookApiException $e) {
throw $e;
}
return $response;
}
public function getProfilePhoto($uid)
{
// use FQL. (http://developers.facebook.com/docs/reference/fql/)
$fql = 'SELECT pic_big FROM profile WHERE id = ' . $uid;
$url = 'https://api.facebook.com/method/fql.query?query=' . urlencode($fql);
$xml = simplexml_load_file($url);
if (!$xml || !$xml->profile) {
return false;
}
$source = (string)$xml->profile->pic_big;
// create local file.
$file = file_get_contents($source);
$tmpfname = tempnam('/tmp', 'source');
$handle = fopen($tmpfname, "w");
fwrite($handle, $file);
fclose($handle);
return $tmpfname;
}
}
コード
こちらのMyPhotoAdbumFacebookクラスを使い、下記のようにコードを書くだけで、
Facebookのアルバムに自分のプロフィールの写真を登録し、自分のタグをつけることができます。
$fb = new MyPhotoAlbumFacebook();
$fb->login();
$me = $fb->getMe();
$source = $fb->getProfilePhoto($me['id']);
$message = 'photo comment.';
$tags = array(
'tag_text' => $me['name'],
'tag_uid' => $me['id'],
'x' => 50,
'y' => 25,
);
$response = $fb->postPhoto($source, $message, $tags);
print_r($response);
補足
$tags = array( ‘
tag_text
’ => $me[‘name’], ‘tag_uid
’ => $me[‘id’], ‘x’ => 50, ‘y’ => 25, );
XとYはその方向の軸の割合の位置です。
横はセンタリング、縦は4分の1の位置を設定をしています。
もし人の写真だった場合、顔認識技術により自動的に位置が補正されるようです。(ドキュメント未確認)
$source = ‘@’ . realpath($source);
SDKのファイルアップロード機能では、リモートのファイルをアルバムに投稿できないようです。
@をつけたローカルファイルの絶対パスを指定することにより、POSTすることができるようです。
‘
req_perms
’ => ‘status_update
,publish_stream
,user_photo_video_tags
,friends_photo_video_tags
,user_photos, friends_photos
’
アプリケーションの認証の際に必要な権限を掲示しますが、そのスコープになります。
今回のケースでは、友達の写真やタグ付けを扱っていないので、friends_photo_video_tags
とfriends_photos
は不要になります。
下記のドキュメントを確認して、適切なスコープを選択してください。
http://developers.facebook.com/docs/authentication/permissions
サンプル
Manga BusinessCard Maker
http://apps.facebook.com/manga-card-maker/
カヤックのお年賀コンテンツの一つとして、Facebookアプリを作ってみました。
Facebookのプロフィール写真からカンタンに漫画風名刺をつくることができるジェネレーターです。
名刺デザインは、熱血風やお姫様風、KAYACのサービスキャラクターをつかったものなど多数用意しています。
あけましておめでとうございます(遅)
次回予告
次回はFBMLやDialogについて触れようと思います。
若干クセがあるので現状だと使いにくく、慣れが必要かもしれません。
・・・ということで、慣れたらご紹介したいと思います。