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.
Il existe un "moyen" d'obtenir une partie de la liste des fans avec leurs identifiants de profil de fanpage sans jeton.
https://www.facebook.com/{PAGENAME}
_ comme dans l'exemple ci-dessous, basé sur les balises og présentes sur la fanpage.<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.
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));
Vous pouvez obtenir des fans en utilisant la nouvelle recherche sur facebook: https://www.facebook.com/search/321770180859/likers?ref=about
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 :(
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.
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
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
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"