What's method for checking user fan of a page in GRAPH API?

21,402

Solution 1

UPDATE 2:
To check if the current user is a fan of the Facebook page on landing at your tab check this answer.


UPDATE:
You can use the likes connection to check if a user is a fan of a page:

https://graph.facebook.com/me/likes/PAGE_ID
&access_token=ACCESS_TOKEN

This would return either an empty data array:

Array
(
    [data] => Array
        (
        )

)

Or if fan:

Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [name] => Real Madrid C.F.
                    [category] => Professional sports team
                    [id] => 19034719952
                    [created_time] => 2011-05-03T20:53:26+0000
                )

        )

)

So this is how we check using the PHP-SDK:

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

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId' => 'APP_ID',
  'secret' => 'APP_SECRET',
));

$user = $facebook->getUser();

if ($user) {
  try {
    $likes = $facebook->api("/me/likes/PAGE_ID");
    if( !empty($likes['data']) )
        echo "I like!";
    else
        echo "not a fan!";
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl(array(
    'scope' => 'user_likes'
  ));
}

// rest of code here
?>

Similar script usingJS-SDK:

FB.api('/me/likes/PAGE_ID',function(response) {
    if( response.data ) {
        if( !isEmpty(response.data) )
            alert('You are a fan!');
        else
            alert('Not a fan!');
    } else {
        alert('ERROR!');
    }
});

// function to check for an empty object
function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}

Code taken from my tutorial.


While pages.isFan is still working for me, you can use the FQL page_fan table with the new PHP-SDK:

$result = $facebook->api(array(
    "method"    => "fql.query",
    "query"     => "SELECT uid FROM page_fan WHERE uid=$user_id AND page_id=$page_id"
));
if(!empty($result)) // array is not empty, so the user is a fan!
    echo "$user_id is a fan!";

From the documentation:

To read the page_fan table you need:

  • any valid access_token if it is public (visible to anyone on Facebook).
  • user_likes permissions if querying the current user.
  • friends_likes permissions if querying a user's friend.

Solution 2

Here's another approach that relies on the signed_request POST variable that Facebook sends to every tab app page (if you have the "OAuth 2.0 for Canvas" advanced option turned on.

The nice thing about this is you don't need to send another fql.query.

Solution 3

Or you can use fbml if you whant for example show some content if they are fan or made some dinamic stuff.

example:

<fb:fbml version="1.1">
    <fb:visible-to-connection>This part is visible for fans only!
        <fb:else>This part is visible for non-fans</fb:else>
    </fb:visible-to-connection>
</fb:fbml>
Share:
21,402

Related videos on Youtube

John
Author by

John

Updated on July 09, 2022

Comments

  • John
    John almost 2 years

    In graph api, Pages.isFan method not working, what's method for checking user fan of a page in graph api?

    Thanks.

  • ifaour
    ifaour about 13 years
    I've written an in-depth tutorial about Checking if user is a fan
  • Igy
    Igy about 12 years
    The migration option you mentioned is only needed for canvas apps, Page Tab apps will always receive a signed_request
  • kasakka
    kasakka almost 11 years
    Note that at least at the time of writing I ran into an issue where if the page was created by me, I couldn't get a like status for myself despite FB showing the page as liked. If I tried with another account then like status was shown as it is supposed to.

Related