Facebook API: 获得喜欢某个页面的粉丝

我想得到一个用户列表谁喜欢某个网页或粉丝。

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

在这里的讨论中,检索 Facebook 粉丝名称建议可以使用类似 SELECT user_id FROM like WHERE object_id="YOUR PAGE ID"的 FQL 查询来获得喜欢该页面的人数,但是对于同一页面,它给出的是一个空白响应“{}”。

所以我想知道是否有人知道这是否可行。

171773 次浏览

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

”文章、视频、注释、链接、照片和相册图形 API 对象 包含一个叫做“喜欢”的等价连接

注意: 不推荐使用 fql like query

有一个“方法”,以获得一些粉丝名单的一部分,他们的个人资料 ID 的一些扇页没有令牌。

  1. 用公共图表数据标识粉丝页面: http://graph.facebook.com/cocacola-Coca-Cola has 40796308305。更新日期2016.04.30: Facebook 现在需要访问令牌来通过图形获取 page _ id,这样你就可以解析 fanpage HTML 语法来获得这个 id,而不需要 https://www.facebook.com/{PAGENAME}的任何授权,如下面的例子所示,基于 fanpage 上的 og 标签。
  2. 获取可口可乐的“喜欢插件”iframe 显示直接与一些修改参数: http://www.facebook.com/plugins/fan.php?connections=100&id=40796308305
  3. 现在检查网页来源,有很多球迷与他们的配置文件的链接,在那里你可以找到他们的配置文件 ID 或昵称,如: http://www.facebook.com/michal.semeniuk
  4. 如果你只对配置文件 ID 感兴趣,再次使用图形 api-它会直接给你配置文件 ID: http://graph.facebook.com/michal.semeniuk 更新2016.04.30: Facebook 现在需要访问令牌来获得这样的信息。您可以解析概要文件 HTML 语法,就像在第一步元标记是您最好的朋友: <meta property="al:android:url" content="fb://profile/{PROFILE_ID}" />

And now is the best part: try to refresh (F5) the link in point 2.. There is a new full set of another fans of Coca-Cola. Take only uniques and you will be able to get some nice, almost full list of fans.

——更新2013.08.06——

你为什么不用我已经准备好的 PHP 脚本来吸引一些粉丝呢? :)

UPDATE 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\._-]+)" class="link" 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));

用这个。

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 搜索: https://www.facebook.com/search/321770180859/likers?ref=about来获得粉丝

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

SELECT uid FROM page_fans WHERE page_id="YOUR_PAGE_ID"

根据 Facebook 的文档的说法,不可能让一个页面的所有粉丝都喜欢:

虽然你不能得到一个 Facebook 页面上所有粉丝的名单,但是你 可以找出是否有一个特定的人喜欢一个网页。

对于 s3m3n 的回答,Facebook 的粉丝插件(例如 拉马达)现在有了限制,在持续的请求中,你得到的新粉丝越来越少。您可以尝试使用我修改过的 PHP 脚本来可视化结果: https://gist.github.com/liruqi/7f425bd570fa8a7c73be#file-facebook_fans_by_plugin-php

另一种方法是 Facebook 图形搜索。在搜索结果页面: 喜欢叫“ 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 节点,以避免页面崩溃。您可以找到这个脚本 给你

我创建了一个名为 luster的小工具,用于下载 Facebook 页面的“喜欢者”和“关注者”列表。

下载之后,为您的平台解压缩归档文件,您可以从终端运行它作为

luster fans my-page-name

其中 my-page-name是 Facebook 页面的字符串标识符。

你会被要求提供你 Facebook 账户的电子邮件和密码。注意,这个帐户需要有一个 可用的页面角色。甚至 分析员也足够了。

之后,您应该会收到类似如下的输出

TIME,KIND,ID,NAME,LINK
1581665652,Like,111111111,John Doe,https://www.facebook.com/111111111
1581663355,Like,222222222,Kal Peterson,https://www.facebook.com/222222222
1581661970,Follow,333333333,Nikol Kus,https://www.facebook.com/333333333

这个工具是基于阅读表,可以在你的 Facebook 页面的 Settings -> People and Other Pages部分找到。

请注意,有一些限制到 七千个结果从 我在两个有超过2万粉丝的网页上测试了它 没有得到超过7000的结果。

详情请参阅 https://github.com/zladovan/luster