简体   繁体   English

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

[英]Check if user already likes fanpage

Is it possible to check if a user already likes my facebook fanpage from my website with Javascript or PHP? 是否可以通过Javascript或PHP检查用户是否已经从我的网站上喜欢我的脸书粉丝页?

EDIT: I need a solution, so the user doesn't need to authenticate / allow some persmissions first 编辑:我需要一个解决方案,因此用户不需要首先验证/允许一些持久性

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

The simplest way would be to call the Graph API to get the /me/likes connections (note you have to require the user_likes permission). 最简单的方法是调用Graph API来获取/me/likes连接(注意你必须要求user_likes权限)。 Then go through each and compare id with the ID of your page. 然后浏览每个并将id与您页面的ID进行比较。

Assuming you're using the official Facebook PHP SDK , and have an instance of the Facebook object set up (see Usage section in the aforementioned page), the following code can be used to find out if the user is fan of Daft Punk : 假设您正在使用官方的Facebook PHP SDK ,并设置了Facebook对象的实例(请参阅上述页面中的使用部分),可以使用以下代码来确定用户是否是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;
    }
}

Now, you can further work with the $user_is_fan variable. 现在,您可以进一步使用$user_is_fan变量。

In JavaScript, the code would be very similar. 在JavaScript中,代码非常相似。 Using the official JavaScript SDK 's method FB.api (again, assuming you have taken of the authentication): 使用官方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;
        }
    }
});

Note that here we're using an asynchronous request and callback, so the code using the user_is_fan variable must be inside the function. 请注意,这里我们使用异步请求和回调,因此使用user_is_fan变量的代码必须在函数内部。

In case you are OK with user giving the permissions, for a PHP based website it can be done this way easily: 如果您对用户提供权限没问题,对于基于PHP的网站,可以通过这种方式轻松完成:

1- Create a new Facebook app here . 1- 在这里创建一个新的Facebook应用程序。

2 - Download Facebook PHP SDK from here . 2 - 从这里下载Facebook PHP SDK。 Extract the files and place it in the same folder with the file in which you will paste the code given below! 提取文件并将其放在与您将粘贴下面代码的文件相同的文件夹中!

3 - Get your Facebook Page ID using this tool . 3 - 使用此工具获取您的Facebook页面ID。

4 - Generate Facebook like box code for your page from here . 4 - 从这里为您的页面生成类似Facebook的框代码。

After 1, 2, 3 and 4 steps are complete, you can check if user has liked a page or not with the following code: 完成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>';
    }
    ?>

The user will click on the "Please click here to login into your Facebook account." 用户将点击“请点击此处登录您的Facebook帐户”。 text which will redirect it to Facebook app permissions page, once user allows the permission to your app the code will fetch user's data and will display the likebox if user hasn't liked your fan page. 文本将其重定向到Facebook应用程序权限页面,一旦用户允许您的应用程序的权限,代码将获取用户的数据,并将显示如果用户不喜欢您的粉丝页面的likebox。

seems like "/me/likes/[page_id]" doesn't always return the record even there is one. 似乎“/ me / likes / [page_id]”并不总是返回记录,即使有一个。 recently I request by "/me/likes/[page_id]", it will return 0, but if I request without page_id, but grab a bunch of record by "/me/likes/", and you will see the page_id is actually there, can't figure why. 最近我通过“/ me / likes / [page_id]”请求,它会返回0,但如果我请求没有page_id,但是通过“/ me / likes /”获取一堆记录,你会看到page_id实际上是在那里,无法理解为什么。

when checking with graph.facebook.com/[page_id], only suspicious thing is its "can_post" is false, and others which "/me/likes/[page_id]" do works, is true. 当用graph.facebook.com/ [page_id]检查时,只有可疑的东西是它的“can_post”是假的,而其他“/ me / likes / [page_id]”确实有效,是真的。

but looping is not good in this situation, especially some crazy people has millions of likes. 但在这种情况下循环并不好,特别是一些疯狂的人有数百万的喜欢。 is there any kinda privacy setting related to the page_id owner account would cause the problem? 是否有任何与page_id所有者帐户相关的隐私设置会导致问题?

<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"];

now check the $has_liked param to see if user likes ur page or not! 现在检查$ has_liked参数,看看用户是否喜欢你的页面!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM