Facebook API: Получите поклонников / людей, которым нравится страница - PullRequest
68 голосов
/ 26 октября 2010

Я хотел бы получить список пользователей, которым нравится определенная страница или ее поклонник.

Документация FB API гласит, что вы можете получить только количество поклонников определенной страницы, используя социальный график, но не список поклонников.

Обсуждение здесь Получить имена фанатов Facebook предполагает, что можно использовать FQL-запрос, например SELECT user_id FROM like WHERE object_id="YOUR PAGE ID", для получения количества людей, которым понравилась страница, но для той же страницы он дает пустой ответ "{}".

Поэтому мне было интересно, есть ли у кого-нибудь идея, можно ли это сделать.

Ответы [ 8 ]

71 голосов
/ 06 июня 2012

Существует "способ" получить некоторую часть списка поклонников с помощью идентификаторов их профилей некоторых фан-страниц без токена.

  1. Получить идентификатор фан-страницы с общедоступными графическими данными: http://graph.facebook.com/cocacola - у Coca-Cola 40796308305. ОБНОВЛЕНИЕ 2016.04.30 : Facebook теперь требуется токен доступа для получения page_id через график, так что вы можете проанализировать синтаксис HTML фан-страницы, чтобы получить этот идентификатор без какой-либо авторизации от https://www.facebook.com/{PAGENAME}, как в примере ниже, на основе тегов og, представленных на фан-странице.
  2. Получить отображение iframe "like plugin" Coca-Cola напрямую с некоторыми измененными параметрами: http://www.facebook.com/plugins/fan.php?connections=100&id=40796308305
  3. Теперь проверьте источники страниц, есть много поклонников со ссылками на их профили, где вы можете найти их идентификаторы или псевдонимы, например: http://www.facebook.com/michal.semeniuk.
  4. Если вас интересуют только идентификаторы профиля, используйте график api еще раз - он предоставит вам идентификатор профиля напрямую: http://graph.facebook.com/michal.semeniuk ОБНОВЛЕНИЕ 2016.04.30: Facebook теперь требуется токен доступа для получения такой информации. Вы можете проанализировать синтаксис HTML профиля, как на первом шаге метатег ваш лучший друг: <meta property="al:android:url" content="fb://profile/{PROFILE_ID}" />

А теперь лучшая часть: попробуйте обновить (F5) ссылку в пункте 2. Есть новый полный набор других поклонников Coca-Cola. Возьмите только уникальных, и вы сможете получить хороший, почти полный список поклонников.

- ОБНОВЛЕНИЕ 2013.08.06 -

Почему бы вам не использовать мой готовый PHP-скрипт для получения фанатов? :)

ОБНОВЛЕНИЕ 2016.04.30 : обновлен пример сценария для использования новых методов после того, как Facebook начал требовать токен доступа для получения общедоступных данных из Graph 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));
41 голосов
/ 22 мая 2013

Вы можете получить поклонников, используя новый поиск в Facebook: https://www.facebook.com/search/321770180859/likers?ref=about

10 голосов
/ 24 января 2013

Используйте это.

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, страница будет пустой: (* ​​1007 *

7 голосов
/ 10 июня 2014

Согласно документации Facebook невозможно получить всех поклонников страницы:

Хотя вы не можете получить список всех поклонников FacebookСтраница, вы можете узнать, понравился ли конкретный человек Страница.

3 голосов
/ 17 июня 2015

Что касается ответа 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();

Это позволит загрузить новых поклонников и распечатать идентификатор пользователя / адрес электронной почты, удалить старуюDOM-узлы, чтобы избежать падения страницы.Вы можете найти этот скрипт здесь

1 голос
/ 27 октября 2011

Эта страница https://developers.facebook.com/docs/reference/fql/like/ пишет, вы не можете получить список поклонников.

"Объекты API Post, Video, Note, Link, Photo и Album Graph содержит эквивалентное соединение, называемое лайками. "

ПРИМЕЧАНИЕ: fql-подобный запрос устарел

0 голосов
/ 06 декабря 2013

Технически этот FQL-запрос должен работать, но по какой-то причине Facebook запрещает его из-за отсутствия индекса. Не уверен, что это из-за политики или они просто забыли.

SELECT uid FROM page_fans WHERE page_id="YOUR_PAGE_ID"
0 голосов
/ 03 января 2012

FQL документация Facebook здесь рассказывает, как это сделать.Запустите пример SELECT name, fan_count FROM page WHERE page_id = 19292868552 и замените номер page_id идентификатором вашей страницы, и он вернет имя страницы и количество поклонников.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...