Gaj*_*jus 7 facebook web-scraping
我最初使用的方法是:
http_head('http://www.facebook.com/pages/Test/' . $input['fb_page_id'] . '?sk=app_' . $input['fb_id']), 'HTTP/1.1 301 Moved Permanently')
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是:
200标题,而不是404(例如http://www.facebook.com/pages/Test/DominosPizza?sk=app_311706258843058).301响应.我正在构建一个脚本,偶尔会浏览<div data-page="130414917005937" data-app="299770086775725"></div>我的投资组合中的所有实例.然后检查应用程序是否仍在页面上.如果应用程序在页面上,它将提供链接,否则保留标签.
我正在寻找一个不需要访问令牌的解决方案.
以下是了解Facebook页面是否安装了应用程序的官方方法.
见http://developers.facebook.com/docs/reference/api/page/
测试App安装
您可以通过发出HTTP GET来测试页面配置文件选项卡上是否安装了特定应用程序
PAGE_ID/tabs/APP_ID.此请求适用于任何APP_ID并返回上述字段是应用程序安装在页面上.如果页面上未安装该应用程序,则此请求将返回空数据[]数组.
您还可以使用应用访问令牌发出此相同查询.在这种情况下,您可以查询任何PAGE_ID,如果您的应用程序安装在指定页面上,则会返回上述字段.如果应用程序未安装在指定页面上,则会像往常一样返回空数据[]数组.
所以这是一个简单的HTTP GET http://graph.facebook.com/PAGE_ID/tabs/APP_ID
除非 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |