【发布时间】:2011-10-13 09:59:03
【问题描述】:
是否可以使用 Javascript 或 PHP 从我的网站检查用户是否喜欢我的 Facebook 粉丝专页?
编辑:我需要一个解决方案,因此用户不需要先验证/允许某些权限
【问题讨论】:
标签: php javascript facebook
是否可以使用 Javascript 或 PHP 从我的网站检查用户是否喜欢我的 Facebook 粉丝专页?
编辑:我需要一个解决方案,因此用户不需要先验证/允许某些权限
【问题讨论】:
标签: php javascript facebook
<?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
?>
【讨论】:
user_likes权限,它会再试一次。
最简单的方法是调用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权限登录。
如果您同意用户授予权限,对于基于 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&width&height=290&colorscheme=light&show_faces=true&header=true&stream=false&show_border=true&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。
【讨论】:
<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 参数,看看用户是否喜欢你的页面!
【讨论】:
似乎“/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 所有者帐户相关的隐私设置会导致问题?
【讨论】: