Facebook API:吸引喜欢网页的人们

我想获得一个喜欢某个页面或者粉丝的用户列表。

FB API文档指出,您只能使用社交图获取某个页面的粉丝数量,而不是粉丝列表。

在这里的讨论检索Facebook的粉丝名称表明,可以使用一个FQL查询如SELECT user_id FROM like WHERE object_id="YOUR PAGE ID"来获得喜欢的人的人数,但同一页,它给出一个空的答复“{}”。

所以我想知道是否有人有一个想法,如果这可以做到。

有一个“途径”,用一些粉丝页的个人资料ID获得粉丝列表的某些部分,而没有令牌。

  1. 使用公共图表数据获取fanpage的id: http ://graph.facebook.com/cocacola – 可口可乐有40796308305. 更新2016.04.30 :Facebook现在需要访问令牌来通过图获取page_id,以便您可以parsingf​​anpage HTML语法在https://www.facebook.com/{PAGENAME}没有任何授权的情况下获得这个id,如下面的例子所示,基于fanpage上的og标签。
  2. 获取可口可乐的“像插件”iframe直接显示一些修改后的参数: http : //www.facebook.com/plugins/fan.php? connections=100& id= 40796308305
  3. 现在检查页面的来源,有很多粉丝与他们的个人资料的链接,在那里你可以find他们的个人资料ID或昵称,如: http : //www.facebook.com/michal.semeniuk 。
  4. 如果你只对profile ID感兴趣,可以再次使用图表API – 它会直接给你个人档案ID: http ://graph.facebook.com/michal.semeniuk更新2016.04.30:Facebook现在需要访问令牌来获取这样的信息。 您可以parsingconfiguration文件的HTML语法,就像在第一步meta标签是你最好的朋友: <meta property="al:android:url" content="fb://profile/{PROFILE_ID}" />

现在是最好的部分:尝试刷新(F5)第2点的链接..有一个新的可口可乐的另一个球迷全套。 只采取独特的,你将能够得到一些不错的,几乎完整的粉丝名单。

– 更新2013年8月6日 –

你为什么不用我准备好的PHP脚本来获取一些粉丝? 🙂

更新2016.04.30 :更新了示例脚本,以便在Facebook开始要求访问令牌从图表api获取公共数据之后使用新方法。

 function fetch_fb_fans($fanpage_name, $no_of_retries = 10, $pause = 500000 /* 500ms */){ $ret = array(); // prepare real like user agent and accept headers $context = stream_context_create(array('http' => array('header' => 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/49.0.2623.108 Chrome/49.0.2623.108 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\nAccept-encoding: gzip, deflate, sdch\r\nAccept-language: en-US,en;q=0.8,pl;q=0.6\r\n'))); // get page id from facebook html og tags for mobile apps $fanpage_html = file_get_contents('https://www.facebook.com/' . $fanpage_name, false, $context); if(!preg_match('{fb://page/(\d+)}', $fanpage_html, $id_matches)){ // invalid fanpage name return $ret; } $url = 'http://www.facebook.com/plugins/fan.php?connections=100&id=' . $id_matches[1]; for($a = 0; $a < $no_of_retries; $a++){ $like_html = file_get_contents($url, false, $context); preg_match_all('{href="https?://www\.facebook\.com/([a-zA-Z0-9\._-]+)" data-jsid="anchor" target="_blank"}', $like_html, $matches); if(empty($matches[1])){ // failed to fetch any fans - convert returning array, cause it might be not empty return array_keys($ret); }else{ // merge profiles as array keys so they will stay unique $ret = array_merge($ret, array_flip($matches[1])); } // don't get banned as flooder usleep($pause); } return array_keys($ret); } print_r(fetch_fb_fans('TigerPolska', 2, 400000)); 

您可以使用新的Facebooksearch粉丝: https : //www.facebook.com/search/321770180859/likers?ref=about

用这个。

 https://www.facebook.com/browse/?type=page_fans&page_id=<your page id> 

它将返回到最近的喜欢500。

 http://www.facebook.com/browse/?type=page_fans&page_id=<your page id>&start=400 

每个页面会给你100个粉丝。 将起始值更改为(0,100,200,300,400)以获得第一个500.如果start> = 401,则页面将为空白:(

根据Facebook的文件 ,不可能得到一个页面的所有粉丝:

虽然无法获得Facebook页面的所有粉丝列表,但您可以查看某个特定的人是否喜欢某个页面。

对于s3m3n的回答,Facebook粉丝插件(例如LAMODA )现在已经有了局限性, 随着连续请求,你的新粉丝越来越less。 您可以尝试我修改后的PHP脚本来显示结果: https : //gist.github.com/liruqi/7f425bd570fa8a7c73be#file-facebook_fans_by_plugin-php

另一种方法是Facebookgraphicssearch。 在search结果页面上: 喜欢“Lamoda”页面的用户 ,打开Chrome控制台并运行JavaScript:

 var run = 0; var mails = {} total = 3000; //滚动次数,可以自己根据情况定义function getEmails (cont) { var friendbutton=cont.getElementsByClassName("_ohe"); for(var i=0; i<friendbutton.length; i++) { var link = friendbutton[i].getAttribute("href"); if(link && link.substr(0,25)=="https://www.facebook.com/") { var parser = document.createElement('a'); parser.href = link; if (parser.pathname) { path = parser.pathname.substr(1); if (path == "profile.php") { search = parser.search.substr(1); var args = search.split('&'); email = args[0].split('=')[1] + "@facebook.com\n"; } else { email = parser.pathname.substr(1) + "@facebook.com\n"; } if (mails[email] > 0) { continue; } mails[email] = 1; console.log(email); } } } } function moreScroll() { var text=""; containerID = "BrowseResultsContainer" if (run > 0) { containerID = "fbBrowseScrollingPagerContainer" + (run-1); } var cont = document.getElementById(containerID); if (cont) { run++; var id = run - 2; if (id >= 0) { setTimeout(function() { containerID = "fbBrowseScrollingPagerContainer" + (id); var delcont = document.getElementById(containerID); if (delcont) { getEmails(delcont); delcont.parentNode.removeChild(delcont); } window.scrollTo(0, document.body.scrollHeight - 10); }, 1000); } } else { console.log("# " + containerID); } if (run < total) { window.scrollTo(0, document.body.scrollHeight + 10); } setTimeout(moreScroll, 2000); }//1000为间隔时间,也可以根据情况定义moreScroll(); 

它会加载新的粉丝和打印用户ID /电子邮件,删除旧的DOM节点,以避免页面崩溃。 你可以在这里find这个脚本

这个页面https://developers.facebook.com/docs/reference/fql/like/写道,你不能得到粉丝名单。;

“Post,Video,Note,Link,Photo和Album Graph API对象包含一个名为likes的等效连接。”

注意: fql like查询已被弃用

从技术上讲,这个FQL查询应该可以工作,但由于某种原因,Facebook因为缺less索引而不允许它。 不知道这是因为政策还是他们忘了。

 SELECT uid FROM page_fans WHERE page_id="YOUR_PAGE_ID" 

这里的 Facebook的FQL文档告诉你如何做到这一点。 运行示例SELECT name, fan_count FROM page WHERE page_id = 19292868552 ,并将page_id编号replace为页面的id编号,它将返回页面名称和风扇计数。