Facebook API: привлекайте поклонников / людей, которым нравится страница

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

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

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

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


person pesho    schedule 25.10.2010    source источник
comment
Вы можете получить только поклонников страниц, администратором которых вы являетесь. Таким образом, вы должны предоставить токен доступа к вашему запросу, связанный с учетной записью администратора страницы, которую вы пытаетесь привлечь поклонников.   -  person Nathan Totten    schedule 26.10.2010
comment
Я понимаю. В этом есть смысл. Спасибо за ответ!   -  person pesho    schedule 26.10.2010
comment
как? 2 года спустя я все еще не вижу выхода?   -  person Dmitry B.    schedule 03.08.2012
comment
Я проголосовал за это, чтобы дать вам 69-й голос: D   -  person    schedule 11.08.2018


Ответы (8)


Есть «способ» получить часть списка фанатов с идентификаторами их профилей какой-нибудь фан-страницы без токена.

  1. Получите идентификатор фан-страницы с общедоступными данными графика: http://graph.facebook.com/cocacola - Coca-Cola имеет 40796308305. ОБНОВЛЕНИЕ 2016.04.30: Facebook теперь требуется токен доступа для получения page_id через график, поэтому вы можете анализировать синтаксис HTML фан-страницы, чтобы получить этот идентификатор без какой-либо авторизации от https://www.facebook.com/{PAGENAME}, как в примере ниже, на основе тегов og, присутствующих на фан-странице.
  2. Получите отображение iframe "как плагин" 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 начал требовать токен доступа для получения общедоступных данных из 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));
person s3m3n    schedule 05.06.2012
comment
Как получить через Graph api или fql? Я думаю, мы не сможем узнать имя профиля, которому понравилась страница. - person Sanket; 11.07.2012
comment
Откуда вы узнали об этом плагине типа "лайк"? - person James P.; 29.09.2012
comment
@JamesPoulson это официальный плагин типа FB для встраивания на внешние веб-страницы, есть даже генератор: developers.facebook.com/docs/reference/plugins/like-box - person s3m3n; 25.10.2012
comment
facebook.com/plugins/fan.php?connections=100&id=40796308305 Я думаю, они установили ограничение на 100 вместо того, чтобы позволять захватывать 10000 пользователей за раз ... - person Matical; 01.04.2013
comment
Почему бы вам не попробовать мой готовый php-скрипт для загрузки фэнов без авторизации? - person s3m3n; 06.08.2013
comment
Ваш сценарий очень интересен, но не нарушает ли он TOS FB? - person High schooler; 25.08.2013
comment
@KingofGames не уверен в этом. Примеры Stackoverflow предназначены для образовательных целей, я не использую этот скрипт на своих производственных серверах, поэтому я не проверял TOS. - person s3m3n; 26.08.2013
comment
Похоже, что выбор людей, которые появляются в куче лиц, больше не случаен. - person Hayko Koryun; 14.10.2013
comment
У меня есть страница с 56 лайками, при запуске вашего скрипта он возвращает только 21, мне нужно захватить всех 56 пользователей, и я не знаю, почему он не показывает их всех. При открытии страницы fan.php она показывает всех, даже в режиме инкогнито, но ваш php-скрипт этого не делает. Есть предположения? - person Marcel; 06.12.2013
comment
Не нужно использовать api графика. Идентификатор профиля уже существует в пути к небольшому изображению профиля. - person redice; 21.12.2013
comment
так это законно в соответствии с Условиями использования facebook? - person JohnnyM; 24.01.2014
comment
по какой-то причине максимальное количество уникальных вентиляторов ограничено 214. Это из банка в 15470 вентиляторов. процентное соотношение не является целым числом. Я добыл фан-страницу 1000 раз, получив 100000 фанатов (ожидая получить где-то около 15000 уникальных посетителей), но из них только 214 уникальны. Интересно, почему это? - person verbumSapienti; 25.03.2014
comment
Я просто повторил процесс для Coca Cola, и из 100000 фанатов только 367 были уникальными. что бы ни происходило на стороне Facebook, это довольно бесполезное соотношение. - person verbumSapienti; 25.03.2014
comment
Я только что попробовал твой сценарий. Это не работает, всегда есть пустые спички. Истинный. - person user1007522; 18.05.2014
comment
Вы правы, FB изменил url по умолчанию на профиль пользователя, теперь он начинается с протокола https вместо http. Обновил мой ответ, чтобы получить оба протокола, и он снова работает. - person s3m3n; 19.05.2014
comment
вы не получите лайков, если их настройки конфиденциальности установлены для моих друзей или личных, даже если вы являетесь администратором страницы. с помощью этого метода вы будете получать только публичные лайки. (такая же проблема, если вы войдете в fb с учетной записью администратора, вы не получите лайков, если уровень безопасности установлен для друзей. Вы должны быть другом любителя, чтобы увидеть информацию, быть администратором страницы недостаточно. В прошлом это было возможно , админ может видеть все лайки, даже личные) - person benchpresser; 23.10.2014
comment
Функция продолжала возвращать file_get_contents(http://graph.facebook.com/cindypizzaplace): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request - person cyb3rZ; 21.01.2016
comment
Функция продолжала возвращать file_get_contents (graph.facebook.com/cindypizzaplace): не удалось открыть поток: сбой HTTP-запроса ! HTTP / 1.1 400 неверный запрос - person Mohammad Sadiq; 29.04.2016
comment
Спасибо, обновил ответ новым решением. FB теперь требует токен доступа, чтобы получить что-либо от Graph API. - person s3m3n; 30.04.2016
comment
Где вы используете api графиков в своем коде? Я ничего не вижу. - person Noah; 29.10.2016
comment
Я получаю только от 1 до 6 результатов. Больше не надо :( - person Portekoi; 14.09.2017

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

person Oleg    schedule 22.05.2013
comment
Не могли бы вы рассказать подробнее? - person Oleg; 16.05.2014
comment
@verbumSapienti, этот ответ полностью действителен по состоянию на июнь 2015 г. - person Maxim Mazurok; 05.06.2015
comment
@jirungaray Да. Вам следует заменить 3217701 ... с исходного URL в ответ на идентификатор вашей страницы, который вы можете найти здесь: findmyfacebookid.com. Также эта функция может отсутствовать в мобильной версии, поэтому попробуйте ее с настольного компьютера. - person Maxim Mazurok; 23.07.2015
comment
Можем ли мы встроить это в iFrame? - person cyb3rZ; 19.01.2016
comment
Ты пробовал? Есть вопросы? - person Oleg; 20.01.2016
comment
Это не дает вам всех поклонников. Думаю макс 10к. Причина в том, что ваш браузер не может обрабатывать больше. - person Noah; 02.11.2016
comment
Все еще работает в 2016 году. Просто убедитесь, что вы вошли в систему и подключены к соответствующей странице FB (например, администратор, редактор, рекламодатель) - person Carmela; 03.11.2016
comment
@Carmela Но это не даст тебе всех поклонников. - person Noah; 19.11.2016
comment
@ Нет, не будет. Слишком много, чтобы привести только один список. По логике, его действительно надо рубить. - person Carmela; 22.11.2016
comment
Ссылки указывают на людей, которым нравится HITEC, которые больше не имеют отношения к ответу - person Hammad Khan; 24.08.2017

Использовать это.

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. Если начальное значение> = 401, страница будет пустой :(

person Somnath Muluk    schedule 24.01.2013
comment
Можем ли мы встроить это в iFrame? - person cyb3rZ; 19.01.2016
comment
Макс сейчас 10 000. - person Noah; 29.10.2016
comment
больше не работает? Я думаю, ты должен владеть страницей - person Anoyz; 13.03.2018
comment
Я не знаю, есть ли другой способ получить идентификатор вашей страницы, но я нашел для этого эту страницу: findmyfbid.com - person Omid Ariyan; 20.08.2018

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

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

person Steven Delrue    schedule 10.06.2014

Для ответа 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, чтобы избежать сбоя страницы. Вы можете найти этот скрипт здесь

person liruqi    schedule 17.06.2015

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

«Объекты API« Пост »,« Видео »,« Заметка »,« Ссылка »,« Фото »и« График альбома »содержат эквивалентное соединение, называемое лайками».

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

person Murat Kucukosman    schedule 27.10.2011
comment
Страница не найдена - person Bevor; 28.08.2016
comment
@Bevor 5 лет назад это было. Но теперь Facebook Like Query устарел - person Murat Kucukosman; 28.12.2016

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

SELECT uid FROM page_fans WHERE page_id="YOUR_PAGE_ID"
person Robin Smidsrød    schedule 05.12.2013

Я создал небольшой инструмент под названием 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

Этот инструмент основан на таблице чтения, которую можно найти в разделе Settings -> People and Other Pages вашей страницы Facebook.

Имейте в виду, что со стороны Facebook существует ограничение до 7k результатов. Я тестировал его на двух страницах с более чем 20 тысячами поклонников и не получил более 7 тысяч результатов.

Подробнее см. https://github.com/zladovan/luster.

person Ján Čabala    schedule 17.02.2020