检查用户是否已经喜欢粉丝页面

时间:2011-07-26 13:10:59

标签: php javascript facebook

是否可以使用Javascript或PHP检查用户是否已经从我的网站上看过我的脸书粉丝页?

编辑:我需要一个解决方案,因此用户不需要首先验证/允许一些持久性

5 个答案:

答案 0 :(得分:13)

<?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();
$page_id = "123456789";
$page_name = $facebook->api("/".$page_id)['name'];
$page_link = $facebook->api("/".$page_id)['link'];



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
?>

答案 1 :(得分:12)

最简单的方法是调用Graph API获取/me/likes个连接(请注意,您必须获得user_likes权限)。然后浏览每个内容并将id与您网页的ID进行比较。

假设您正在使用官方Facebook PHP SDK,并设置了Facebook对象的实例(请参阅上述页面中的 Usage 部分),以下代码可用于查明用户是否是 Daft Punk 的粉丝:

$our_page_id = '22476490672'; // This should be string
$user_is_fan = false;
$likes = $facebook->api( '/me/likes?fields=id' );
foreach( $likes['data'] as $page ) {
    if( $page['id'] === $our_page_id ) {
        $user_is_fan = true;
        break;
    }
}

现在,您可以继续使用$user_is_fan变量。

在JavaScript中,代码非常相似。使用官方JavaScript SDK的方法FB.api(再次假设您已经采用了身份验证):

FB.api('/me/likes?fields=id', function(response) {
    var our_page_id = '22476490672';
    var user_is_fan = false;
    var likes_count = response.data.length;
    for(i = 0; i < likes_count; i++) {
        if(response.data[i].id === our_page_id) {
            user_is_fan = true;
            break;
        }
    }
});

请注意,这里我们使用异步请求和回调,因此使用user_is_fan变量的代码必须在函数内部。

答案 2 :(得分:2)

如果您对用户提供权限没问题,对于基于PHP的网站,可以通过这种方式轻松完成:

1-创建一个新的Facebook应用here

2 - 从here下载Facebook PHP SDK。提取文件并将其放在与您将粘贴下面代码的文件相同的文件夹中!

3 - 使用此tool获取您的Facebook页面ID。

4 - 从here为您的网页生成类似Facebook的框代码。

完成1,2,3和4步后,您可以使用以下代码检查用户是否喜欢某个页面:

<?php
    require('facebook.php');
    $config = array(
         'appId' => 'your facebook app id',
         'secret' => 'your facebook app secret code',

        'allowSignedRequest' => false
    );
    $facebook = new Facebook($config);
    $user_id = $facebook->getUser();
    if (isset($user_id)) {
        try {           
            $likes = $facebook->api('/me/likes/your_facebook_page_id_here', 'GET');             

            if (!empty($likes['data'])) // if user has liked the page then $likes['data'] wont be empty otherwise it will be empty
            {
                echo 'Thank you for liking our fan page!';                   

            }
            else {
                echo 'You have not liked our fan page! Like it now:';
                ?>                   
                <iframe src="//www.facebook.com/plugins/likebox.php?href=https%3A%2F%2Fwww.facebook.com%2Fchillopedia&amp;width&amp;height=290&amp;colorscheme=light&amp;show_faces=true&amp;header=true&amp;stream=false&amp;show_border=true&amp;appId=1392604484339363" scrolling="no" frameborder="0" style="border:none; overflow:hidden; height:290px;" allowTransparency="true"></iframe> //replace this with your own Facebook like box code
                <?php
            }
        } catch (FacebookApiException $e) {
            $login_url = $facebook->getLoginUrl();
            echo '<a href="' . $login_url . '">Please click here to login into your Facebook account.</a>';
            error_log($e->getType());
            error_log($e->getMessage());
        }
    } else {
        $login_url = $facebook->getLoginUrl();
        echo '<a href="' . $login_url . '">Please lick here to login into your Facebook account</a>';
    }
    ?>

用户将点击“请点击此处登录您的Facebook帐户”。文本将其重定向到Facebook应用程序权限页面,一旦用户允许您的应用程序的权限,代码将获取用户的数据,并且如果用户不喜欢您的粉丝页面将显示likebox。

答案 3 :(得分:0)

<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
appId : 'YOUR_APP_ID_WITHIN_QUOTES', //Change this to your app id
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
</script>



$signed_request = $_REQUEST["signed_request"];

list($encoded_sig, $payload) = explode('.', $signed_request, 2);

$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
$has_liked = $data["page"]["liked"];

现在检查$ has_liked参数,看看用户是否喜欢你的页面!

答案 4 :(得分:0)

似乎“/ me / likes / [page_id]”并不总是返回记录,即使有一个。 最近我通过“/ me / likes / [page_id]”请求,它将返回0, 但如果我请求没有page_id,但是通过“/ me / likes /”获取一堆记录,你会看到page_id实际存在,无法理解为什么。

使用graph.facebook.com/ [page_id]查看时,只有可疑的是“can_post”是假的,而“/ me / likes / [page_id]”的其他内容是真的。

但在这种情况下循环并不好,特别是一些疯狂的人有数百万的喜欢。 是否有任何与page_id所有者帐户相关的隐私设置会导致问题?