GraphAPIを用いてページにいいねが押してあるか判別する方法

みなさんこんにちは。

FacebookのGraphAPIってやっぱ楽しいですね。
個人情報をここまで簡単に取れるAPIをいじれるのはとても楽しいですよ。

今回はPHPを使ってあるページにいいねが押してあるかどうかを判別する方法を紹介します。
簡単なことではありますが、2通りの方法を紹介します。

以下が今回の記事の目次です。

◯ 今回やること

1, Facebookページにいいねが押してあるかどうかを判別する

2, あるWebページにいいねが押してあるかどうかを判別する

◯ 最後に

今回やること

ページにいいねが押してあるかを判別するのですが、ページにも2種類あります。

  • Facebookページ
  • その他のWebページ

僕が調べた中では、それぞれやり方が異なっていたため、それぞれのやり方を紹介します。

以下からPHPのFacebookSDKをダウンロードしておいてください。

github – Facebook PHP SDK

Facebookページにいいねが押してあるかどうかを判別する

よく色々なページで書いてあるのがこちらの方法です。
以下、コードを示します。

require 'sdk/facebook.php';
$facebook = new Facebook(array(
    'appId' => 'appId',
    'secret' => 'secret',
    'cookie' => true,
));

$user_id = $facebook->getUser();

if($user_id){
    try {
        $ret_obj = $facebook->api('/me/likes/"FacebookページのID"');
    } catch (FacebookApiException $e){

    }
} else {
    $login_url = $facebook->getLoginUrl();
}

上記の「appId」「secret」「FacebookページのID」を書き換えれば使用することが出来ます。
リファレンスは以下にあるので参考にしてみてください!

API Reference GraphAPI User Belong部分

あるWebページにいいねが押してあるかどうかを判別する

上記の方法では、Facebookページにいいねが押してあるかどうかは判定出来ますが、普通のWebページだと判別出来ません。

なので以下の方法を使用しましょう!

require 'sdk/facebook.php';
$facebook = new Facebook(array(
    'appId' => 'appId',
    'secret' => 'secret',
    'cookie' => true,
));

$user_id = $facebook->getUser();

if($user_id){
    try {
        $fql = "SELECT url FROM url_like WHERE user_id = me() AND url = 'https://tagamidaiki.com'";
        $ret_obj = $facebook->api(array(
            'method' => 'fql.query',
            'query' => $fql
        ));
    } catch (FacebookApiException $e){

    }
} else {
    $login_url = $facebook->getLoginUrl();
}

ここではFQLを使って判定しました。tagamidaiki.comにいいねをしているかどうかを判定することが出来ます。

2013年7月18日追記

上記のコードのサンプルを作成しました!
https://tagamidaiki.com/sample/graph-api-like-call/
あえてvar_dumpの結果を表示しているのでいいねを押すとどうなるのか確認してみてください。

サンプルのソースコード全ては以下になります。

<?php
require_once('facebook/src/facebook.php');

$facebook = new Facebook(array(
    'appId' ="";,
    'secret' ="";
));

$user_id = $facebook->getUser();

if($user_id){
    try {
        $fql = "SELECT url FROM url_like WHERE user_id = me() AND url = 'https://tagamidaiki.com'";
        $ret_obj = $facebook->api(array(
            'method' => 'fql.query',
            'query' => $fql
        ));
    } catch(FacebookApiException $e){
        error_log($e);
    }
} else {
    $login_url = $facebook->getLoginUrl();
}

?>
<!DOCTYPE html>
<html lang="ja-JP">
<head>
    <meta charset="UTF-8">
    <title>GraphAPIを用いてページにいいねが押してあるか判別する方法</title>
    <script type="text/javascript" src="https://connect.facebook.net/ja_JP/all.js"></script>
</head>
<body>
    <div id="fb-root"></div>
    <script>(function(d, s, id) {
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) return;
     js = d.createElement(s); js.id = id;
     js.src = "//connect.facebook.net/ja_JP/all.js#xfbml=1";
     fjs.parentNode.insertBefore(js, fjs);
     }(document, 'script', 'facebook-jssdk'));
    </script>
    <?php if($user_id):?>
        <?php var_dump($ret_obj);?>
        <?php if(isset($ret_obj[0]['url'])):?>
            <p>いいねしていただいてありがとうございます!!( ・ิv・ิ)</p>
        <?php else:?>
            <p>いいねを押して更新すると表示が変わります!</p>
        <?php endif;?>
    <?php else:?>
        <p><a href="<?php echo $login_url;?>">Facebookでログインする</a></p>
    <?php endif;?>
    <div class="fb-like" data-href="https://tagamidaiki.com" data-send="false" data-width="450" data-show-faces="true"></div>
</body>
</html>

以下が参考文献です。

Facebook API Reference FQL url_like

最後に

FacebookのGraphAPIを触るときは、まずリファレンスを見まくるといいです(全てにおいてそうか)
Facebookはこまめにリファレンスを更新してくれるので、出来ることはほとんど書いてあります。

また、それぞれのAPIを試すときは、GraphAPIExplorerを使用すると便利です。

みんなもGraphAPIを使って楽しいFacebook LIFEを過ごしましょう!なんちて!