PHPでFacebookアプリ 友達の写真を取得

ついにAV FaceFacebook連携機能を実装しました!
これで自分の友だちに似ているAV女優を簡単に見つけることができるようになりました。
一度やってみてくださいね(^^)

というわけで今回の記事ではPHPFacebook APIを叩く方法を紹介したいと思います。
AV Faceでは自分の友だちの写真のうち、一人で写っている写真だけを取得する処理をしていますのでその辺も含めて紹介します。

1. Facebook Developersへの登録
FacebookAPIをいじくるにはFacebook Developersへの登録が必要です。
登録はこちらからできます。

2. PHPFacebook API
今回はPHPでGraph APIをいじくるので、こちらからSDKをダウンロードします。
ダウンロードしたファイルの中にexamples/example.phpというファイルがあるのでそれを編集するところからスタートです。

3. アプリを登録
Facebook DevelopersのページのAppsから作りたいアプリの詳細を入力して登録します。
ここで注意してもらいたいのがアプリの名前!
当然私はAV Faceという名前で登録しようとしたのですが、エラーが出て登録できないのです。
ぐぐってみると、Facebookアプリの名前に"FACE"という文字を含んではいけないと…
仕方なく"AV Faith"という名前で登録しました…
登録したらApp IDとアプリのシークレットキーが与えられます。あとで使うので控えておきます。

4. コーディング
4-1. 女友達の名前とプロフィール画像を取得

<?php
require 'facebook/src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => '   ',//Facebook developersから取得
  'secret' => '   ',//Facebook developersから取得
));

// Get User ID
$user = $facebook->getUser();

if ($user) {//ログインしている場合
    //女性友達の名前とプロフィール画像を取得
    $friends = $facebook->api('/me/friends?locale=ja_JP&fields=id,name,gender,picture&limit=1000','GET');
    $female_friends = array();
    $female_pic= array();
    $female_ids = array();
    for($i=0;$i<count($friends['data']);$i++){
        if($friends['data'][$i]['gender'] === "女性"){
            array_push($female_ids,$friends['data'][$i]['id']);
            array_push($female_friends,$friends['data'][$i]['name']);
            array_push($female_pic,$friends['data'][$i]['picture']['data']['url']);
        }
    }
} else {//ログインしていない場合
    $loginUrl = $facebook->getLoginUrl(
            array('scope' => 'friends_photos')//スコープ(パーミッションを指定)
    );
}
?>
  • 最初にFacebook APIを扱うためのクラスをインスタンス化しています。
  • 次にFacebookのユーザが固有に持つUser IDをgetUser()で取得しています。
  • アプリを承認していない場合はgetLoginUrl()で認証させるためのURLを取得しています。
    • 自分の友だちの画像を取ってくるにはfriends_photosのパーミッションが必要です。用途に合わせて適宜指定してください。
  • ログインしている場合、api('/me/friends?locale=ja_JP&fields=id,name,gender,picture&limit=1000','GET')でAPIを叩きに行きます。
    • /me/friendsは"自分"の"友達"を取得しているということになります。
    • locale=ja_JPとすることで取得する名前を英語から日本語にすることができます。
    • fieldsでは取得する情報の種類を指定します。ここではID,名前,性別,プロフィール写真を取得しています。
    • limitでは取得する情報の上限値を設けています。今回はlimit=1000として、自分の友だち1000人までを取得します。
  • apiを叩いた結果はJSON形式で返ってきます。ここでは、$friends['data'][$i]['gender']に女性or男性が入っているので、女性の場合には用意しておいた空の配列に必要なパラメータをpush_arrayしています。
  • あとは取得した配列を使ってhtmlに表示させるだけです。

4-2. 一人で写っている画像を取得

<?php
$pics = $facebook->api('/'.$fb_id.'/photos?fields=images,tags&limit=99999','GET');
$fb_pics = array();
$j=0;
for($i=0;$i<count($pics['data']);$i++){
    if(count($pics['data'][$i]['tags']['data']) == 1){
        array_push($fb_pics,$pics['data'][$i]['images'][3]['source']);
        $j++;
    }
}

echo json_encode($fb_pics);
?>
  • $fb_idには友達のFacebook IDが入ります。api('/'.$fb_id.'/photos?fields=images,tags&limit=99999','GET')とすることで友達の写真の情報とタグ情報を取得できます。
  • for分の中では返ってきた写真を1つずつ処理しています。$pics['data'][$i]['tags']['data']にはその写真にタグが付けられている人の情報が配列で入っているのでcount()することでタグ付けされている人の人数がわかります。
  • ここでは写真にタグ付けされている人数が一人の場合のみ情報をarray_pushしたいのでfor文の中のif文で条件分岐しています。
  • タグがひとつの場合、$pics['data'][$i]['images'][3]['source']を配列にarray_pushしています。ここで$pics['data'][$i]['images']には異なる大きさの画像URLが配列で入っています。[3]は確か600x600位だったと思います。