2

要提取特定 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)检索用户的个人资料链接

但是如果我尝试从 url 中提取相同的内容,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我可以继续进行的唯一方法或其他方式。

4

3 回答 3

1

但是请帮助我理解为什么提取的源代码存在差异

因为 Facebook 通过查看您的 HTTP 请求的详细信息(例如User Agent标头等)意识到,它不是发出请求的真实人使用的真实浏览器,因此他们试图阻止您访问数据。

可以尝试通过提供请求详细信息来解决此问题,使其看起来更像一个“真正的”浏览器——但抓取 HTML 页面以获取所需信息通常不是可行的方法,因为——</p >

并且 FQL 是唯一的方法还是我可以继续进行的其他方式。

– 这就是 API 的用途。FQL/Graph API 是 Facebook 为您提供访问其数据的方法。

如果有你感兴趣的数据,这些数据不是那些提供的——那么 Facebook 并不是真的想给你这些数据。喜欢页面的人的数据就是这样的数据。

于 2012-09-04T08:42:58.723 回答
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

于 2012-09-09T02:04:52.793 回答
0

连接参数的数量不能超过 100,您正在尝试使用 1000。

于 2013-04-26T10:57:29.027 回答