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 2

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

Число параметров соединения не может превышать 100, вы пытаетесь использовать 1000.