使用以下代码
提取特定Facebook粉丝页面的用户列表$text = file_get_contents('rawnike.php');
// $text = file_get_contents('http://www.facebook.com/plugins/fan.php?connections=10000&id=15087023444');
$text = preg_replace("/<script[^>]+\>/i", "", $text);
$text = preg_replace("/<img[^>]+\>/i", "", $text);
$pattern = '!(https?://[^\s]+)!'; // refine this for better/more specific results
if (preg_match_all($pattern, $text, $matches)) {
list(, $links) = ($matches);
//print_r($links);
//var_dump($links);
}
unset($links[0]);unset($links[1]);unset($links[2]);unset($links[3]);unset($links[4]);unset($links[5]);unset($links[6]);unset($links[7]);
//var_dump($links);
$links=str_replace('https','http',$links); $links=str_replace('\"','',$links);
foreach ($links as $value) {
echo "fb user ID: $value<br />\n";
}
使用file_get_contents('rawnike.php')
成功检索用户的个人资料链接(本地保存的rawnike.php)
但如果我尝试从网址file_get_contents("http://www.facebook.com/plugins/fan.php?connections=10000&id=15087023444")
中提取相同内容,则无法检索,这意味着我无法直接提取Facebook网页的来源!我应该手动保存页面的源代码!
我在解析用户页面时发现,如果我在本地手动存储页面的源代码并解析它,我就能够提取用户的兴趣。另一方面,如果我直接尝试使用URL提取源代码,则不会获得相同的源代码。
另一方面$source=file_get_contents($url); $source="content which displays ur browser doesnt supported or some crap"
$source=file_get_contents($string_to_extract_content_of_local_saved_sourceFile); $source="content which i excatly needed to parse"
在进行一些研究时,我明白FQL
是做这样事情的正确方法。但是请帮助我理解为什么提取的源代码存在差异,FQL
是唯一的方法,或者以其他方式我可以继续前进。
答案 0 :(得分:1)
但请帮助我理解为什么源代码提取有差异
因为Facebook通过查看您的HTTP请求的详细信息来实现,例如User Agent
标题等内容,它不是由提出请求的实际人员使用的真实浏览器 - 所以他们试图阻止你访问数据。
一个可以尝试通过提供使其看起来更像“真实”浏览器的请求详细信息来解决此问题 - 但是抓取HTML页面以获取所需信息通常不是要走的路,因为 -
并且FQL是唯一的方式或以其他方式我可以继续前进。
- 这就是API的用途。 FQL / Graph API是Facebook为您提供访问其数据的方式。
如果有您感兴趣的数据,而不是那些提供的数据 - 那么Facebook并不真的想要提供这些数据。关于喜欢页面的人的数据就是这样的数据。
答案 1 :(得分:1)
<?php
$curl = curl_init("https://www.facebook.com/plugins/fan.php?connections=10000&id=15087023444");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1");
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
$data = curl_exec($curl);
curl_close($curl);
$data = preg_replace("%(.*?)(<div id.*?>)%is","",$data); //to strip <scripts>,<links>,<meta>,etc tags.
但最大连接数为100.:S
答案 2 :(得分:0)
连接参数的数量不能超过100,你试用的是1000。