it-swarm.com.ru

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

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

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

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

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

68
pesho

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

  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 начал требовать токен доступа для получения общедоступных данных из 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));
71
s3m3n

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

41
Oleg

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

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

10
Somnath Muluk

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

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

7
Steven Delrue

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

3
liruqi

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

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

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

1
Murat Kucukosman

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

SELECT uid FROM page_fans WHERE page_id="YOUR_PAGE_ID"
0
Robin Smidsrød