我最初使用的方法是:
http_head('http://www.facebook.com/pages/Test/' . $input['fb_page_id'] . '?sk=app_' . $input['fb_id']), 'HTTP/1.1 301 Moved Permanently')
这种方法的问题是:
200
标题,而不是404
(例如http://www.facebook.com/pages/Test/DominosPizza?sk=app_311706258843058
)。301
响应。我正在构建一个偶尔会遍历我的投资组合中<div data-page="130414917005937" data-app="299770086775725"></div>
的所有实例的脚本。然后检查应用程序是否仍在页面上。如果应用程序在页面上,它将提供链接,否则保留标记。
我正在寻找一种不需要访问令牌的解决方案。
答案 0 :(得分:7)
以下是了解Facebook页面是否安装了应用程序的官方方法。
请参阅http://developers.facebook.com/docs/reference/api/page/
测试应用安装
您可以测试是否在页面配置文件选项卡上安装了特定应用程序 向
PAGE_ID/tabs/APP_ID
发出HTTP GET。此请求适用于任何APP_ID并返回上述字段 该应用程序安装在页面上。如果没有安装该应用程序 页面,此请求将返回一个空数据[]数组。
您还可以使用应用访问令牌发出此相同查询。在这 case,您可以查询任何PAGE_ID,并返回上述字段 如果您的应用安装在指定的页面上。一个空数据[]数组 如果应用程序未安装在指定的应用程序上,则照常返回 页。
所以这是对http://graph.facebook.com/PAGE_ID/tabs/APP_ID
答案 1 :(得分:2)
除非Facebook改变他们的URL方案,否则这有效。
请注意,此方法会发出HEAD
个请求,而不是GET
。因此,不下载任何内容。有关其工作原理的说明,请参阅http://anuary.com/47/keeping-facebook-portfolio-up-to-date。
请注意,如果页面隐私设置限制未经身份验证的用户,则需要伪造用户身份验证才能使其正常工作。
$fn_is_app_on_page = function($page_id, $app_id)
{
$ch = curl_init();
curl_setopt_array($ch,
[
CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11',
CURLOPT_URL => 'https://www.facebook.com/pages/anuary/' . $page_id . '?sk=app_' . $app_id,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_HEADER => FALSE,
CURLOPT_NOBODY => TRUE
]);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if($info['http_code'] == '404')
{
return FALSE;
}
if(strpos($info['url'], (string) $app_id) !== FALSE)
{
return TRUE;
}
return FALSE;
};
$fn_is_app_on_page(130414917005937, 299770086775725); // TRUE
$fn_is_app_on_page(1, 299770086775725); // FALSE
$fn_is_app_on_page(130414917005937, 1); // FALSE
答案 2 :(得分:2)
您可以检查所请求页面的http响应,并搜索字符串pagelet_app_APPID
(其中APPID是实际的应用程序ID)
这解决了问题1,因为如果请求的页面实际上不是标签应用程序,则该字符串将不存在于页面上。
在回答问题2时,如果是301,请按照重定向进行操作,然后搜索重定向页面对此字符串的响应。
编辑于10/29/12
我只是进一步研究了这个问题。匿名用户无法访问第一页的原因。这是由于页面管理员设置的某些权限限制。正是由于这些限制,Facebook要求用户在看到页面之前进行身份验证。当您使用cURL时,Facebook会将此请求视为匿名用户,并将请求重定向到登录页面。第二个应用程序没有此问题。
要解决此问题,我建议您在使用浏览器登录后检查您的Facebook Cookie,并将其作为cURL请求的一部分发送。
答案 3 :(得分:-4)
以下代码将帮助您了解该应用是否通过Facebook页面加载。
<script>
$(document).ready(function(){
var isInIFrame = (window.location != window.parent.location) ? true : false;
if (isInIFrame == true){
//enter your code here
}
});
</script>