forus TECH

IT系技術メモ&本まとめ、ライフハック etc

【web】Facebook SDKで自分のFacebookページが「いいね!」されているか判定する

f:id:yusukekuni:20150526182814j:plain

Facebook SDKを用いて自分のFacebookページが「いいね!」されているかを判定する方法です。
今回使用するSDKは以下、

Facebook SDK for PHP v4.0
(PHP5.4以上の環境が必要です。)

0. Facebookページの作成/Facebookアプリの登録

事前にFacebookページを作成しておいてください。
作成したFacebookページの「基本データ」>「FacebookページID」を後ほど使用します。

次にFacebook Developersページからアプリ登録をしておきます。
Facebook Developers

Facebookアプリの登録方法はこちらを参考にしてください。
Facebook SDK for PHP v4.0で「いいね!」をしたFacebookページを取得 - Qiita

登録後に発行されるApp IDApp Secretを後ほど使用します。

1. Facebook SDK for PHPのインストール

推奨されているcomposerを利用したインストール方法です。

まずは適当なエディタで以下のようなjsonファイル(composer.json)を作成し、composerをインストールしたディレクトリに設置します。

composer.json

{
  "require" : {
    "facebook/php-sdk-v4" : "4.0.*"
  }
}

次にターミナルから同ディレクトリで下記コマンドを実行するだけ。
venderというディレクトリが作成され、その中にFacebook SDKがインストールされています。

%php composer.phar install

もっと詳しい説明は以下
facebook php SDK - composer - とりあえず何でも書く

2. PHPファイルの作成

自分のFacebookページへの「いいね!」判定をしたいページのphpファイルに以下のような処理を追加することで「いいね!」判定をすることができます。
$app_id、$app_secret、$page_idは上記で作成したものに適宜置き換えてください。
また$redirect_uriとautoload.phpの読み込み先もご自身の環境に合わせて変更してください。

<?php
session_start();

// Facebookアプリ設定
$app_id = '<App ID>';
$app_secret = '<App Secret>';
$page_id = '<FacebookページID>';
$redirect_uri = 'facebook認証後の戻り先URL';

// 「いいね」をしたページリストにアクセスできる権限を付与
$permissions = array(
    'user_likes'
);

// Autoloadの読み込み
require_once( '/var/www/html/path/to/vendor/autoload.php' );

use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\GraphUser;

// SDKの初期化
FacebookSession::setDefaultApplication($app_id, $app_secret);
$helper = new FacebookRedirectLoginHelper($redirect_uri);

// ユーザー認証
try {
    if (isset($_SESSION['access_token'])) {
        // すでにアクセストークンが保持されている場合
        $session = new FacebookSession($_SESSION['access_token']);
    } else {
        // アクセストークンを保持していない場合は取得
        $session = $helper->getSessionFromRedirect();
    }
} catch (FacebookRequestException $ex) {
    // When Facebook returns an error.
    print_r($ex);
} catch (\Exception $ex) {
    // When validation fails or other local issues.
    print_r($ex);
}

if (isset($session)) {
    // アクセストークンを保持
    $_SESSION['access_token'] = $session->getToken();

    $accessToken = $session->getToken();
    // 特定のfacebookページへの「いいね!」の有無をリクエスト
    $request = new FacebookRequest($session, 'GET', '/me/likes/' . $page_id);
    $response = $request->execute();

    $graphObjList = $response->getGraphObjectList();

    if (count($graphObjList) == 1) {
        // 「いいね!」されている場合の処理
        foreach ($graphObjList as $r) {
            //Facebookページの名前
            $name = $r->getProperty('name');
            //FacebookページID
            $fbPageId = $r->getProperty('id');

            echo '<p><a href="http://www.facebook.com/' . $fbPageId . '">' . $name . '</a>にいいね!しています</p>';
        }
    } else {
        // 「いいね!」されていない場合の処理
        echo '「いいね!」していません。';
    }
} else {
    // Facebook認証されていない場合はログインページへ
    $loginUrl = $helper->getLoginUrl($permissions);
    echo '<a href="' . $loginUrl . '">Facebookログイン</a>';
}
?>


参照URL
Getting Started
Facebook SDK for PHP v4.0で「いいね!」をしたFacebookページを取得 - Qiita
Facebook SDK PHP v4 — a complete guide! | Ben Marshall
facebook php SDK - composer - とりあえず何でも書く