Facebook API:获取喜欢页面的人/粉丝

时间:2010-10-25 21:04:26

标签: facebook facebook-graph-api facebook-like facebook-page facebook-fan-page

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

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

此处的讨论Retrieve Facebook Fan Names表明可以使用SELECT user_id FROM like WHERE object_id="YOUR PAGE ID"之类的FQL查询来获取喜欢该页面的人数,但对于同一页面,它会给出一个空响应“{} ”

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

9 个答案:

答案 0 :(得分:71)

有一种方法可以获得粉丝列表的某些部分,其中包含一些没有令牌的粉丝页面的个人资料ID。

  1. 获取包含公开图表数据的粉丝专页:http://graph.facebook.com/cocacola - 可口可乐有40796308305。 更新2016.04.30 :Facebook现在需要访问令牌通过图表获取page_id,这样您就可以解析粉丝页HTML语法,无需https://www.facebook.com/{PAGENAME}的任何授权即可获得此ID,如下例所示,基于粉丝页面上显示的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}" />
  5. 现在是最好的部分:尝试刷新(F5)第2点的链接..还有一套全新的可口可乐粉丝。只采取独一无二的,你将能够得到一些不错的,几乎完整的粉丝名单。

    - 更新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));
    

答案 1 :(得分:41)

你可以使用新的Facebook搜索获得粉丝:https://www.facebook.com/search/321770180859/likers?ref=about

答案 2 :(得分:10)

使用此功能。

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> gt = = 401,则页面将为空白:(

答案 3 :(得分:7)

根据the Facebook documentation,它无法吸引网页的所有粉丝:

  

虽然你无法获得Facebook页面所有粉丝的列表,但是你   可以找出某个人是否喜欢某个页面。

答案 4 :(得分:3)

对于s3m3n的回答,Facebook粉丝插件(例如LAMODA)现在有限制,你在连续请求中获得的粉丝越来越少。您可以尝试我修改过的PHP脚本来显示结果:https://gist.github.com/liruqi/7f425bd570fa8a7c73be#file-facebook_fans_by_plugin-php

另一种方法是Facebook图搜索。在搜索结果页面上:People who like pages named "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节点以避免页面崩溃。您可以找到此脚本here

答案 5 :(得分:1)

此页面https://developers.facebook.com/docs/reference/fql/like/写道,您无法获得粉丝列表。

  

“帖子,视频,笔记,链接,照片和相册图API对象   包含一个名为likes的等效连接。“

注意: fql like query已弃用

答案 6 :(得分:0)

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

SELECT uid FROM page_fans WHERE page_id="YOUR_PAGE_ID"

答案 7 :(得分:0)

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

download并解压缩平台的存档文件后,您可以从终端以以下身份运行

luster fans my-page-name

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

将要求您输入电子邮件和密码到您的Facebook帐户。请注意,此帐户必须具有available page roles之一。甚至分析师就足够了。

稍后,您应该会收到类似于以下内容的输出

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部分中找到该表。

请注意,最多只能有 7k个结果 Facebook方面。我在超过2万名粉丝和 没有得到超过7k的结果。

有关详细信息,请参见https://github.com/zladovan/luster

答案 8 :(得分:-5)

Facebook的FQL文档here告诉您如何操作。运行示例SELECT name, fan_count FROM page WHERE page_id = 19292868552并将page_id号替换为您页面的ID号,它将返回页面名称和粉丝数。