【问题标题】:Check if user already likes fanpage检查用户是否已经喜欢粉丝专页
【发布时间】:2011-10-13 09:59:03
【问题描述】:

是否可以使用 Javascript 或 PHP 从我的网站检查用户是否喜欢我的 Facebook 粉丝专页?

编辑:我需要一个解决方案,因此用户不需要先验证/允许某些权限

【问题讨论】:

    标签: php javascript facebook


    【解决方案1】:
    <?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
    ?>
    

    【讨论】:

    • 这个答案要好得多,因为没有for循环,如果用户不接受user_likes权限,它会再试一次。
    • 我必须做一个 $likes = $response->getDecodedBody();首先
    【解决方案2】:

    最简单的方法是调用Graph API 来获取/me/likes 连接(注意您必须要求user_likes 权限)。然后遍历每一个并将id 与您的页面ID 进行比较。

    假设您使用的是官方 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;
        }
    }
    

    现在,您可以进一步使用 $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 变量的代码必须在函数内部。

    【讨论】:

    • 用户是否需要允许一些权限才能工作?
    • 是的,用户需要以user_likes权限登录。
    • 你知道是否可以在没有用户允许的情况下检查用户是否是粉丝?所以我不需要向用户显示权限框(我需要使用它,所以如果用户不是我们的 facebook 粉丝页面的粉丝,我可以显示“你需要成为粉丝”之类的文字。希望你 /有人可以帮我找到一个聪明的解决方案:-)
    • 如果没有用户ID,恐怕这是不可能的。
    • 如果我有用户 ID?因为我可以得到用户id,但是我不知道如何检查用户是否是粉丝页的粉丝
    【解决方案3】:

    如果您同意用户授予权限,对于基于 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。

    【讨论】:

      【解决方案4】:
      <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 参数,看看用户是否喜欢你的页面!

      【讨论】:

      • 这是在 Facebook 上的应用程序中还是直接来自网站?
      • 它在一个不属于 facebook 的网站上;)
      • 我收到此错误:未定义索引:signed_request 如果我打印出 $_REQUEST,则数组列表中不存在 signet_request :-(
      • signed_request 存在于 Facebook.com 上加载的应用程序中的 iframe 中的页面选项卡或 apps.facebook.com/appname
      • 这是嵌入页面的应用程序内...不需要任何权限。
      【解决方案5】:

      似乎“/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 所有者帐户相关的隐私设置会导致问题?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-24
        • 2016-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 2011-11-15
        相关资源
        最近更新 更多