我正在从Facebook页面抓取墙上帖子的数据,这里是网址:
http://www.facebook.com/GMHTheBook?v=wall&ref=ts#!/GMHTheBook?v=wall&ref=ts
我使用CURL成功地刮掉了所有可见的墙柱。
问题:
在可见墙帖的末尾,有较旧帖子链接,一旦您点击该链接,就会显示更多墙帖。现在我如何手动点击该链接以显示更多墙帖并废弃这些帖子?
使用任何方法的任何解决方案?我虽然使用CURL,但我希望有任何解决方案来处理这种情况?
现在我使用此代码获取所有数据,找到下一个链接并获取该URL的数据等等,这是代码:
ini_set('display_errors', true);
error_reporting(E_ALL);
$data = json_decode(file_get_contents(($url)), true);
$names = array();
$stories = array();
foreach($data['data'] as $post)
{
$names[] = $post['from']['name'];
$stories[] = $post['message'];
}
$url = $data['paging']['next'];
// this is meant to scrap data recurssively from the next links
while($url !== '')
{
$url = $data['paging']['next'];
$data = json_decode(file_get_contents(($url)), true);
foreach($data['data'] as $post)
{
$names[] = $post['from']['name'];
$stories[] = $post['message'];
}
$url = urldecode($data['paging']['next']);
echo $url . '<br />';
}
for($j = 0; $j < count($names); $j++)
{
$data .= $names[$j] . '|' . $stories[$j] . "\n";
}
$h = fopen("data.txt", "a+");
fwrite($h, $data);
fclose($h);
但问题是脚本继续运行而根本没有输出,也没有创建文件。我也将脚本时间设置设置为更高的值。 allow_url_fopen
也设置为开启。脚本中有什么问题或者我可能没有以正确的方式进行递归吗?任何解决方案/替代方案?
答案 0 :(得分:4)
您应该使用Graph API。您正在抓取的数据以JSON格式提供
并包含获取上一页/下一页的链接,例如寻呼。
示例:
$data = json_decode(file_get_contents(($url)));
foreach($data->data as $post) {
echo $post->from->name, ': ',
$post->message,
PHP_EOL;
}
以上将输出墙上的所有帖子。对于分页做
echo $data->paging->previous;
echo $data->paging->next;
这将输出两个URL。您所要做的就是再次加载它们。
答案 1 :(得分:2)
按钮/链接可能会启动XMLHttpRequest,因此请在浏览器中查看firebug / developer console /您使用的任何内容,查看它所请求的URL以及HTTP标头等。然后使用cURL执行相同的请求你有它吗?
答案 2 :(得分:0)
http://www.facebook.com/ajax/stream/profile.php?__a=1&profile_id=139878432710216&viewer_id=(your facebook id)&filter=1&max_time=1283023194&_log_clicktype=Filter%20Stories%20or%20Pagination&ajax_log=1
它是通过ajax加载的。您还需要弄清楚这些变量。最长时间可能是从什么时候开始显示帖子。
好的,上面的链接可以更短(相同的输出)......
http://www.facebook.com/ajax/stream/profile.php?__a=1&profile_id=139878432710216&max_time=1283023194