web-dev-qa-db-fra.com

API Facebook: obtenez des fans de / personnes qui aiment une page

J'aimerais obtenir une liste des utilisateurs qui aiment une page ou un fan de celle-ci.

La documentation de l'API FB indique que vous ne pouvez obtenir le nombre de fans d'une page qu'en utilisant le graphe social, mais pas la liste des fans.

Une discussion ici Récupérer les noms de fans sur Facebook suggère que l’on pourrait utiliser une requête FQL comme SELECT user_id FROM like WHERE object_id="YOUR PAGE ID" pour obtenir le nombre de personnes qui ont aimé la page, mais pour la même page, la réponse est vide "{}".

Alors je me demandais si quelqu'un a une idée si cela peut être fait.

68
pesho

Il existe un "moyen" d'obtenir une partie de la liste des fans avec leurs identifiants de profil de fanpage sans jeton.

  1. Obtenir l'identifiant d'une fanpage avec des données graphiques publiques: http://graph.facebook.com/cocacola - Coca-Cola a 40796308305.  UPDATE 2016.04.30 : Facebook a maintenant besoin d'un jeton d'accès pour obtenir page_id par le graphe afin que vous puissiez analyser la syntaxe HTML de fanpage pour obtenir cet identifiant sans l'autorisation de https://www.facebook.com/{PAGENAME} _ comme dans l'exemple ci-dessous, basé sur les balises og présentes sur la fanpage.
  2. Obtenez l’affichage iframe "de type plugin" de Coca-Cola directement avec des paramètres modifiés: http://www.facebook.com/plugins/fan.php?connections=100&id=40796308305
  3. Maintenant, vérifiez les sources de la page, il y a beaucoup de fans avec des liens vers leurs profils, où vous pouvez trouver leurs identifiants ou pseudonymes tels que: http://www.facebook.com/michal.semeniuk .
  4. Si vous êtes uniquement intéressé par les identifiants de profil, utilisez à nouveau l’API de graphe - il vous donnera directement l’identifiant de profil: http://graph.facebook.com/michal.semeniuk MISE À JOUR 2016.04.30: Facebook a maintenant besoin d'un jeton d'accès pour obtenir ces informations. Vous pouvez analyser la syntaxe HTML du profil, comme dans la première étape, la balise méta est votre meilleur ami: <meta property="al:Android:url" content="fb://profile/{PROFILE_ID}" />

Et maintenant, c’est la meilleure partie: essayez de rafraîchir (F5) le lien au point 2. Il ya un nouvel ensemble complet d’un autre fan de Coca-Cola. Ne prenez que des pièces uniques et vous obtiendrez une liste presque complète de fans de Nice.

- MISE À JOUR 2013.08.06 -

Pourquoi n'utilisez-vous pas mon script ready PHP pour récupérer des fans? :)

UPDATE 2016.04.30 : Exemple de script mis à jour pour utiliser les nouvelles méthodes après que Facebook a commencé à exiger un jeton d'accès pour obtenir les données publiques à partir de l'API Graph.

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

Vous pouvez obtenir des fans en utilisant la nouvelle recherche sur facebook: https://www.facebook.com/search/321770180859/likers?ref=about

41
Oleg

Utilisez ceci.

https://www.facebook.com/browse/?type=page_fans&page_id=<your page id>

Il renverra jusqu'à 500 des goûts les plus récents.

http://www.facebook.com/browse/?type=page_fans&page_id=<your page id>&start=400

Chaque page vous donnera 100 fans. Changez la valeur de départ en (0, 100, 200, 300, 400) pour obtenir les 500 premiers. Si début est> = 401, la page sera vierge :(

10
Somnath Muluk

Selon la documentation de Facebook , il n'est pas possible d'obtenir tous les fans d'une page:

Bien que vous ne puissiez pas obtenir la liste de tous les fans d'une page Facebook, vous pouvez savoir si une personne en particulier a aimé une page.

7
Steven Delrue

Pour la réponse de s3m3n, le plug-in des fans de Facebook (par exemple, LAMODA ) a des limites, vous obtenez de moins en moins de nouveaux fans sur des demandes continues. Vous pouvez essayer mon script modifié PHP pour visualiser les résultats: https://Gist.github.com/liruqi/7f425bd570fa8a7c73be#file-facebook_fans_by_plugin-php

Une autre approche est la recherche de graphes sur Facebook. Sur la page de résultats de recherche: Les personnes qui aiment les pages nommées "Lamoda" , ouvrent Chrome et exécutez 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();

Cela chargerait de nouveaux fans et imprimerait l'identifiant utilisateur/email, supprimerait les anciens noeuds DOM pour éviter le crash de page. Vous pouvez trouver ce script ici

3
liruqi

Cette page https://developers.facebook.com/docs/reference/fql/like/ a écrit: vous ne pouvez pas obtenir la liste des fans.

"Les objets API Publication, Vidéo, Note, Lien, Photo et Graphique d'album contiennent une connexion équivalente appelée" J'aime "."

NOTE: fql like query est obsolète

1
Murat Kucukosman

Techniquement, cette requête FQL devrait fonctionner, mais pour une raison quelconque, Facebook la refuse en raison d'un index manquant. Je ne sais pas si c'est à cause de la politique ou s'ils ont simplement oublié.

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