Facebook API:吸引喜欢该页面的人的粉丝


70

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

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

此处的讨论“检索Facebook粉丝名称”表明,可以使用FQL查询SELECT user_id FROM like WHERE object_id="YOUR PAGE ID"来获得喜欢该页面的人数,但是对于同一页面,它给出的响应为空“ {}”。

所以我想知道是否有人能做到这一点。


您只能获得您作为管理员的页面的粉丝。因此,您必须在访问请求中提供访问令牌,该请求与您要吸引粉丝的页面的管理员帐户相关联。
内森·托滕

我懂了。这就说得通了。感谢你的回答!
pesho

3
怎么样?2年后,我仍然看不到方法吗?
德米特里(Dmitry B)

我赞成这个给您第69票:D

Answers:


70

有一种“方法”可以获取粉丝列表的一部分,其粉丝ID的个人资料ID不带令牌。

  1. 获取带有公共图数据的粉丝页ID:http://graph.facebook.com/cocacola-可口可乐拥有40796308305。 更新2016.04.30:Facebook现在需要访问令牌来通过图表获取page_id,以便您可以解析粉丝页HTML语法可以https://www.facebook.com/{PAGENAME}根据粉丝页面上显示的og标签,从下面的示例中获得未经任何授权的ID 。
  2. 通过一些修改后的参数直接获取可口可乐的“ like插件” iframe显示:http : //www.facebook.com/plugins/fan.php? connections=100& id= 40796308305
  3. 现在查看页面资源,有很多粉丝可以看到他们的个人资料链接,您可以在其中找到他们的个人资料ID或昵称,例如:http : //www.facebook.com/michal.semeniuk
  4. 如果您仅对配置文件ID感兴趣,请再次使用graph api-它会直接为您提供配置文件ID:http ://graph.facebook.com/michal.semeniuk更新2016.04.30:Facebook现在需要访问令牌才能获取此类信息。您可以解析配置文件HTML语法,就像第一步中的meta标记是您最好的朋友一样: <meta property="al:android:url" content="fb://profile/{PROFILE_ID}" />

现在是最好的部分:尝试刷新(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));

2
如何通过Graph api或fql获得它?我想我们无法获得喜欢该页面的个人资料名称。
桑凯特,2012年

您在哪里找到类似插件的信息?
James P.

1
@JamesPoulson是嵌入外部网页的官方FB like插件,甚至还有生成器:developers.facebook.com/docs/reference/plugins/like-box
s3m3n 2012年

facebook.com/plugins/fan.php?connections=100&id=40796308305我认为他们将限制设置为100,而不是一次允许抓取10000个用户...
Matical

您为什么不尝试使用我现成的php脚本未经授权就获取fb粉丝?
s3m3n

41

您可以使用新的Facebook搜索获得支持者:https : //www.facebook.com/search/321770180859/likers?ref=about


您能否提供一些细节?
奥莱格

2
@verbumSapienti,这个答案从15
Maxim Mazurok,2015年

@jirungaray是的。您应将原始URL的“ 3217701 ...”替换为您的页面ID的答案,您可以在这里找到:findmyfacebookid.com。此外,移动版本可能会缺少此功能,因此请从台式机尝试。
Maxim Mazurok

我们可以将其嵌入到iFrame中吗?
cyber8200 '16

1
在2016年仍然可以使用。只需确保您已登录并连接到相关的FB页面(例如,管理员,编辑者,广告商)
卡梅拉

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


我们可以将其嵌入到iFrame中吗?
cyber8200 '16

2
现在最大为10,000。
诺亚

不再工作了吗?我猜你必须拥有这个页面
Anoyz

我不知道是否还有另一种方法来获取您的页面ID,但我为此找到了该页面:findmyfbid.com
Omid Ariyan

7

根据Facebook文档,不可能获得页面的所有粉丝:

尽管您无法获得Facebook Page的所有粉丝的列表,但是您可以了解某个人是否喜欢该Page。


3

对于s3m3n的回答,Facebook粉丝插件(例如LAMODA)现在具有局限性,在持续的请求下,您得到的新粉丝越来越少。您可以尝试使用经过修改的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节点以避免页面崩溃。您可以在这里找到此脚本



0

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

SELECT uid FROM page_fans WHERE page_id="YOUR_PAGE_ID"

0

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

之后下载并解压缩文件为您的平台,你可以从终端的运行

luster fans my-page-name

my-page-nameFacebook页面的字符串标识符在哪里。

系统将要求您输入电子邮件和密码到您的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

该工具基于阅读表,您可以在Settings -> People and Other PagesFacebook页面的部分中找到该表。

请注意,Facebook端最多只能有7k个结果。我在超过2万名粉丝的两页上进行了测试,但结果却没有超过7万。

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


-5

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


1
他在问如何获取喜欢页面的用户列表。
Wes Gamble 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.