SimpleXMLElement作为动态网页而不是本地文件XML

时间:2012-12-20 09:13:50

标签: php xml facebook simplexml

我正在为wordpress创建一个facebook feed插件,并在使用本地文件时让它工作,但我需要加载到$fb = new SimpleXMLElement($xmlstr);

$xmlstr是XML中的变量,该文件中的内容来自此处https://www.facebook.com/feeds/page.php?format=rss20&id=133869316660964

SimpleXMLElement是否可以存储来自网页的数据?

我尝试使用file_get_contents,但它没有用。当我使用该功能时,facebook在使用此代码时会出现此错误:http://imgur.com/3qOxlecho "contents: " . file_get_contents('https://www.facebook.com/feeds/page.php?format=rss20&id=133869316660964');

2 个答案:

答案 0 :(得分:1)

我使用PHP的cURL库解决了这个问题。

   // Init a cURL resource
   $ch = curl_init("https://www.facebook.com/feeds/page.php?format=rss20&id=133869316660964");
   curl_setopt( $ch, CURLOPT_POST, false );
   curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
   // Make facebook think it is being accessed by a browser to avoid 
   //compatability issues
   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; 
   Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
   curl_setopt( $ch, CURLOPT_HEADER, false );
   curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
   $data = curl_exec( $ch );

从那里我将简单的xml设置为$ data。

$fb = new SimpleXMLElement($data);

希望这有助于将来的人们!

重要的是:

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; 
       Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");

因为否则facebook会认为您使用的是过时的浏览器。

答案 1 :(得分:0)

file_get_contents将使用呈现的数据返回给您,例如当我们使用它时file_get_contents('google.com/index.html')这将返回与您在网络浏览器View Source选项上获得的内容相同的HTML内容。