71

特定のページまたはそのファンが好きなユーザーのリストを取得したいのですが。

FB APIのドキュメントには、ソーシャルグラフを使用して特定のページのファンの数のみを取得でき、ファンのリストは取得できないと記載されています。

ここでの「Facebookファン名の取得」の説明では、FQLクエリを使用して、ページを気に入った人の数を取得できることが示唆されSELECT user_id FROM like WHERE object_id="YOUR PAGE ID"ていますが、同じページの場合、空の応答「{}」が返されます。

だから、これができるかどうか誰かが考えているかどうか疑問に思いました。

4

8 に答える 8

70

トークンなしでファンページのプロファイル ID を持つファンリストの一部を取得する「方法」があります。

  1. 公開グラフ データを使用してファンページの ID を取得します: http://graph.facebook.com/cocacola - Coca-Cola には 40796308305 があります。2016.04.30 の 更新: Facebook では、グラフを介して page_id を取得するためにアクセス トークンが必要になり、ファンページの HTML 構文を解析できるようになりました。https://www.facebook.com/{PAGENAME}以下の例のように、ファンページに存在する og タグに基づいて、許可なしでこの ID を取得します。
  2. Coca-Cola の「プラグインのような」iframe 表示を、いくつかの変更されたパラメータで直接取得します: http://www.facebook.com/plugins/fan.php?connections=100&id=40796308305
  3. ページのソースを確認してください。多くのファンがプロフィールへのリンクを持っており、プロフィール ID やニックネームをhttp://www.facebook.com/michal.semeniukのように見つけることができます。
  4. プロファイル ID のみに関心がある場合は、再度グラフ API を使用します。プロファイル ID が直接提供されます。プロファイルの HTML 構文を解析できます。これは、最初のステップのメタ タグが親友であるようにです。 <meta property="al:android:url" content="fb://profile/{PROFILE_ID}" />

そして今が最高の部分です: ポイント 2 のリンクを更新 (F5) してみてください.. コカ・コーラの別のファンの新しいフルセットがあります。ユニークなものだけを取得すると、ファンのほぼ完全なリストを取得できます。

-- 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));
于 2012-06-05T23:22:25.520 に答える
41

新しい Facebook 検索を使用してファンを獲得できます: https://www.facebook.com/search/321770180859/likers?ref=about

于 2013-05-22T13:06:49.783 に答える
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 人のファンを獲得できます。最初の 500 を取得するには、開始値を (0, 100, 200, 300, 400) に変更します。開始値が >= 401 の場合、ページは空白になります:(

于 2013-01-24T09:48:10.950 に答える
3

s3m3n の回答については、Facebook ファン プラグイン (例: LAMODA ) に制限があり、継続的なリクエストで新しいファンがますます少なくなります。結果を視覚化するために、変更した PHP スクリプトを試すことができます: https://gist.github.com/liruqi/7f425bd570fa8a7c73be#file-facebook_fans_by_plugin-php

もう 1 つのアプローチは、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 ノードを削除してページのクラッシュを回避します。このスクリプトはここにあります

于 2015-06-17T09:21:26.487 に答える
1

このページhttps://developers.facebook.com/docs/reference/fql/like/が書きましたが、ファンリストを取得できません。

「投稿、ビデオ、メモ、リンク、写真、およびアルバム グラフの API オブジェクトには、いいね! と呼ばれる同等の接続が含まれています。」

注: fql のようなクエリは非推奨です

于 2011-10-27T12:31:30.453 に答える