facebook fan page извлечение пользовательских данных php
Для извлечения списка пользователей конкретной фан-страницы facebook я использую приведенный ниже код
$text = file_get_contents('rawnike.php');
// $text = file_get_contents('http://www.facebook.com/plugins/fan.php?connections=10000&id=15087023444');
$text = preg_replace("/<script[^>]+>/i", "", $text);
$text = preg_replace("/<img[^>]+>/i", "", $text);
$pattern = '!(https?://[^s]+)!'; // refine this for better/more specific results
if (preg_match_all($pattern, $text, $matches)) {
list(, $links) = ($matches);
//print_r($links);
//var_dump($links);
}
unset($links[0]);unset($links[1]);unset($links[2]);unset($links[3]);unset($links[4]);unset($links[5]);unset($links[6]);unset($links[7]);
//var_dump($links);
$links=str_replace('https','http',$links); $links=str_replace('"','',$links);
foreach ($links as $value) {
echo "fb user ID: $value<br />n";
}
И тем самым успешно извлекаю ссылки профилей пользователей с помощью file_get_contents('rawnike.php')
(rawnike.php локально сохранен)
Но если я попытаюсь вытащить то же самое из url file_get_contents("http://www.facebook.com/plugins/fan.php?connections=10000&id=15087023444")
я не могу получить, что означает, что я не могу извлечь источник страницы facebook непосредственно! Я должен сохранить источник страницы вручную!
То же самое я наблюдал при разборе страницы пользователя, если я вручную сохраняю источник страницы код локально и разбирать его, я в состоянии извлечь интерес пользователя. С другой стороны, если я напрямую попытаюсь извлечь исходный код с помощью URL, он не получит тот же источник.
Что означает $source=file_get_contents($url); $source="content which displays ur browser doesnt supported or some crap"
с другой стороны $source=file_get_contents($string_to_extract_content_of_local_saved_sourceFile); $source="content which i excatly needed to parse"
FQL
является правильным подходом для таких вещей. Но пожалуйста, помогите мне понять, почему существует разница в исходном коде, извлеченном и is FQL
является единственным способом или каким-то другим способом, которым я могу двигаться вперед.3 ответа:
Но, пожалуйста, помогите мне понять, почему есть разница в исходном коде, извлеченном
Потому что Facebook понимает, глядя на детали вашего HTTP-запроса, такие как заголовок
User Agent
и т. д., что это не реальный браузер, используемый реальным человеком, делающим запрос, – и поэтому они пытаются заблокировать вам доступ к данным.Один может попытаться обойти это, предоставив детали запроса, которые делают его более похожим на" реальный " браузер-но выскабливание HTML-страницы, чтобы получить желаемую информацию, как правило, не путь, потому что -
И is FQL-это единственный способ или каким-то другим способом я могу продвигаться вперед.
- Вот для чего существуют API. FQL / Graph API-это средство, которое Facebook предоставляет вам для доступа к своим данным.
Если есть данные, которые вас интересуют, но не предоставлены ими, то Facebook на самом деле не хочет предоставлять вам эти данные. Данные о лицах, которым нравится Страница, являются такого рода данные.
<?php $curl = curl_init("https://www.facebook.com/plugins/fan.php?connections=10000&id=15087023444"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1"); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); $data = curl_exec($curl); curl_close($curl); $data = preg_replace("%(.*?)(<div id.*?>)%is","",$data); //to strip <scripts>,<links>,<meta>,etc tags.
Но максимальное число соединений равно 100. :S