使用php&amp ;;在Facebook页面上获取元素卷曲

时间:2011-04-20 12:31:24

标签: php curl

我试过这个从名为proxy.php的文件中的公共facebook事件页面获取一个html元素:

<?php
  header('Content-Type: text/html');
  $ch = curl_init('http://www.facebook.com/pages/Revive/137584936302228?sk=events');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  echo curl_exec($ch);
?>

使用此ajax从中获取内容:

$.ajax({
  url: '/wp-content/themes/revive/proxy.php',
  type: 'GET',
  dataType: 'html',
  success: function(data, textStatus, xhr) {
    events = $('div#pagelet_events', data).html();
    // events = $('#text-5', data).html();
    $('#events-section').append(events);
  },
});

但由于某种原因,这种情况并不奏效。我怎么能让这个工作?

谢谢!


更新:所以这让我离得更近了但是看着代码那个proxy.php它不只是一个div#pagelet_events正在页面上加载。不确定这是否有意义。我唯一可以找到引用pagelet_events的是:

<script>big_pipe.onPageletArrive({"phase":3,"id":"pagelet_events","is_last":true,"css":["AJXaB","3cT\/s"],"resource_map":{"AJXaB":{"type":"css","src":"http:\/\/f.static.ak.fbcdn.net\/rsrc.php\/v1\/yO\/r\/qjFDIQwXiny.css"}},"content":{"pagelet_events":"\u003cdiv class=\"UIImageBlock clearfix fbxNullState\">\u003cimg class=\"UIImageBlock_Image UIImageBlock_SMALL_Image img\" src=\"http:\/\/c.static.ak.fbcdn.net\/rsrc.php\/v1\/y9\/r\/56JC9tUWl0q.png\" alt=\"\" width=\"32\" height=\"32\" \/>\u003cdiv class=\"UIImageBlock_Content UIImageBlock_SMALL_Content\">\u003cp>You have no upcoming events.\u003c\/p>\u003c\/div>\u003c\/div>"},"tti_phase":3});</script>   

我是否可以提取此脚本生成的内容?

再次感谢!

1 个答案:

答案 0 :(得分:3)

我认为Facebook阻止任何请求,如果它来自(或看起来像来自)脚本/机器人。您需要添加一个用户代理字符串,使其看起来像是一个真实的请求。

我将您的代理脚本修改为此并且它可以正常工作(返回结果)。

<?php
  header('Content-Type: text/html');
  $ch = curl_init('http://www.facebook.com/pages/Revive/137584936302228?sk=events');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
  echo curl_exec($ch);
?>