我试过这个从名为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>
我是否可以提取此脚本生成的内容?
再次感谢!
答案 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);
?>