DOM, чтобы разобрать стену Facebook - PullRequest
1 голос
/ 13 марта 2011

Я пытаюсь разобрать сообщения с публичной фан-страницы Facebook, но она возвращает пустую страницу.

$source = "http://www.facebook.com/?sk=wall&filter=2";
libxml_use_internal_errors(TRUE);
$dom = new DOMDocument();
$dom->loadHTML($source);
$xml = simplexml_import_dom($dom);
libxml_use_internal_errors(FALSE);
$message = $xml->xpath("//span[@class='messageBody']");

return (string)$message[0] . PHP_EOL;

Ответы [ 3 ]

2 голосов
/ 13 марта 2011

Это , а не правильный способ извлечения данных из Facebook, и ясно, что вы хотите избежать создания приложения Facebook.

Но хорошей новостью является то, что вы все еще можете использовать FQL, попробуйте следующий запрос в Graph API Explorer .

В приведенном ниже запросе мы запросили таблицу stream, чтобы получить общедоступные каналы для разработчиков Facebook *1013*:

SELECT message
FROM stream
WHERE source_id=19292868552
AND is_hidden = 0
AND filter_key='owner'

Он вернет все " публичные " фиды страницы. Очевидно, вам может потребоваться получить больше полей для создания значимого результата.


Вы должны предоставить действительный access_token для доступа к общедоступным публикациям. Подробнее здесь .

2 голосов
/ 13 марта 2011

Используемый метод DOMDocument::loadHTML() ожидает содержимое HTML в качестве параметра, а не URL.

Здесь выпытаясь интерпретировать ваш URL как некоторый HTML-контент, а не то, на что он ссылается.


, используя этот метод, вы можете попробовать использовать тот, который работает с файлом, или другой контент, такой каккак DOMDocument::loadHTMLFile().

1 голос
/ 13 марта 2011

Еще одним подходом будет использование JSON из Graph API

$posts = json_decode(
    file_get_contents('https://graph.facebook.com/swagbucks/posts')
);
foreach($posts->data as $post) {
    echo $post->message, PHP_EOL;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...