Существует "способ" получить некоторую часть списка поклонников с помощью идентификаторов их профилей некоторых фан-страниц без токена.
- Получить идентификатор фан-страницы с общедоступными графическими данными: http://graph.facebook.com/cocacola - у Coca-Cola 40796308305. ОБНОВЛЕНИЕ 2016.04.30 : Facebook теперь требуется токен доступа для получения page_id через график, так что вы можете проанализировать синтаксис HTML фан-страницы, чтобы получить этот идентификатор без какой-либо авторизации от
https://www.facebook.com/{PAGENAME}
, как в примере ниже, на основе тегов og, представленных на фан-странице.
- Получить отображение iframe "like plugin" Coca-Cola напрямую с некоторыми измененными параметрами: http://www.facebook.com/plugins/fan.php?connections=100&id=40796308305
- Теперь проверьте источники страниц, есть много поклонников со ссылками на их профили, где вы можете найти их идентификаторы или псевдонимы, например: http://www.facebook.com/michal.semeniuk.
- Если вас интересуют только идентификаторы профиля, используйте график 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));