特定のページまたはそのファンが好きなユーザーのリストを取得したいと思います。
FB APIドキュメントには、ソーシャルグラフを使用して特定のページのファンの数を取得できるが、ファンのリストは取得できないと記載されています。
ここでの議論 Facebookファン名の取得 は、SELECT user_id FROM like WHERE object_id="YOUR PAGE ID"
のようなFQLクエリを使用してページを好きな人の数を取得できることを示唆していますが、同じページに対しては空の応答を返します「{}」。
だから、私はこれができるかどうか誰にもアイデアがあるのだろうかと思っていました。
トークンのないファンページのプロファイルIDでファンリストの一部を取得する「方法」があります。
https://www.facebook.com/{PAGENAME}
ファンページに存在するogタグに基づく以下の例のように。<meta property="al:Android:url" content="fb://profile/{PROFILE_ID}" />
そして今が最良の部分です。ポイント2でリンクを更新(F5)してみてください。コカコーラの別のファンの新しいフルセットがあります。ユニークな人だけを連れて行くと、ファンのニース、ほぼ完全なリストを取得することができます。
準備ができているPHPスクリプトを使用してファンを獲得してみませんか? :)
UPDATE 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));
新しいFacebook検索を使用してファンを獲得できます: https://www.facebook.com/search/321770180859/likers?ref=about
これを使って。
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以上の場合、ページは空白になります:(
Facebookのドキュメント によると、ページのすべてのファンを獲得することは不可能です。
Facebookページのすべてのファンのリストを取得することはできませんが、特定の人がページを高く評価したかどうかはわかります。
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();
新しいファンをロードし、ユーザーID /メールを印刷し、古いDOMノードを削除してページのクラッシュを回避します。このスクリプトを見つけることができます こちら
このページ https://developers.facebook.com/docs/reference/fql/like/ が書いたので、ファンリストを取得できません。
「Post、Video、Note、Link、Photo、およびAlbum Graph APIオブジェクトには、いいね!と呼ばれる同等の接続が含まれています。」
注:fql like query is deprecated
技術的には、このFQLクエリは機能するはずですが、何らかの理由で、Facebookはインデックスがないためにそれを許可しません。それがポリシーによるものなのか、それとも忘れただけなのかわかりません。
SELECT uid FROM page_fans WHERE page_id="YOUR_PAGE_ID"