是否可以使用Javascript或PHP检查用户是否已经从我的网站上看过我的脸书粉丝页?
编辑:我需要一个解决方案,因此用户不需要首先验证/允许一些持久性答案 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&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。
答案 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所有者帐户相关的隐私设置会导致问题?