php - 我在使用 simplexml 解析 facebook 提要时遇到问题

标签 php xml facebook rss simplexml

<分区>

http://www.facebook.com/feeds/share_posts.php?id=207302593&viewer=207302593&key=d95b2de790&format=rss20

上面的链接是我在 Facebook 上分享的帖子的 URL。当我将该 URL 加载到 simplexml_load_file() 时,它会提供整页错误。查看错误,看起来 Facebook 吐出了 HTML 而不是提要。我认为这是一个身份验证问题,但我退出了 facebook 并将提要 url 加载到我的浏览器中,我能够看到提要。这是我得到的错误。有任何想法吗?谢谢!

A PHP Error was encountered

Severity: Warning

Message: simplexml_load_file() [function.simplexml-load-file]: http://www.facebook.com/feeds/share_posts.php?id=207302593&viewer=207302593&key=d95b2de790&format=rss20:12: parser error : AttValue: " or ' expected

Filename: models/Stream.php

Line Number: 55

A PHP Error was encountered

Severity: Warning

Message: simplexml_load_file() [function.simplexml-load-file]: </script><noscript> <meta http-equiv=refresh content="0; URL=?_fb_noscript=1" />

...

最佳答案

重新定义“feed”Facebook 的方式。试一试,看看下载的页面

echo file_get_contents('http://www.facebook.com/feeds/share_posts.php?id=207302593&viewer=207302593&key=d95b2de790&format=rss20');

看起来 Facebook 正在执行用户代理嗅探,并拒绝任何它认为不能处理其页面的“浏览器”(在本例中是 PHP 是浏览器)。他们在提要上这样做有点奇怪,但扎克伯格以神秘的方式工作。 (这样做是为了防止屏幕抓取是一回事,但 feeds 隐含地意味着由机器读取)

您需要设置用户代理字符串以匹配 Facebook 支持的浏览器。当我需要这样做时,我使用 curl 来下载文件(curl 有大量用于设置 http header 的选项)。

如果你不喜欢 curl,你可以使用 ini 设置覆盖 PHP 的默认用户代理

    ini_set('user_agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3');

关于php - 我在使用 simplexml 解析 facebook 提要时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1516794/

相关文章:

php - SQL 中按特殊条件排序查询

c# - List<T> 的 XML 序列化 - XML 根

xml - 为什么xpath通配符搜索中出现 'unknown method'错误

java - 文档似乎为空,但我可以获取第一个元素

php - 使用 Smarty PHP 模板构建移动网站

php - 如何在 Solr 中通过 DataImportHandler 处理多个 MySQL 表?

php - 从 PHP 中的 JSON 数组获取值

ios - Facebook 分享扩展,分享图片和链接

ios - Facebook iOS SDK - 发布自定义故事

Facebook Canvas 身份验证 : No signed_request parameter after redirect