facebook粉丝页用户数据提取php

时间:2012-09-04 08:02:24

标签: php facebook facebook-fql facebook-page

使用以下代码

提取特定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是唯一的方法,或者以其他方式我可以继续前进。

3 个答案:

答案 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。