我目前使用的是Magpie RSS,但当RSS或Atom提要不正常形成时,它有时会失效。用PHP解析RSS和Atom提要有没有其他选择?使用PHP解析RSS/Atom提要的最佳方式
118
A
回答
28
你的其他选择包括:
2
我用SimplePie解析一个谷歌阅读器饲料,它的工作原理非常好,有一个体面的功能集。
当然,我还没有用非完整的RSS/Atom提要对它进行测试,所以我不知道它如何处理这些问题,我假设Google的标准相当符合标准! :)
6
HTML Tidy库能够修复一些格式不正确的XML文件。在将它们传递给解析器之前,通过它来运行您的提要可能会有所帮助。
151
我一直使用the SimpleXML functions built in to PHP来解析XML文档。它是少数几个具有直观结构的泛型解析器之一,它使得为诸如RSS提要的特定事物构建一个有意义的类变得非常容易。此外,它还会检测XML警告和错误,并在找到任何可以简单地通过HTML Tidy(如ceejayoz提到的)之类的源代码运行源以清理并再次尝试。
考虑使用SimpleXML这很粗糙,简单的类:
class BlogPost
{
var $date;
var $ts;
var $link;
var $title;
var $text;
}
class BlogFeed
{
var $posts = array();
function __construct($file_or_url)
{
$file_or_url = $this->resolveFile($file_or_url);
if (!($x = simplexml_load_file($file_or_url)))
return;
foreach ($x->channel->item as $item)
{
$post = new BlogPost();
$post->date = (string) $item->pubDate;
$post->ts = strtotime($item->pubDate);
$post->link = (string) $item->link;
$post->title = (string) $item->title;
$post->text = (string) $item->description;
// Create summary as a shortened body and remove images,
// extraneous line breaks, etc.
$post->summary = $this->summarizeText($post->text);
$this->posts[] = $post;
}
}
private function resolveFile($file_or_url) {
if (!preg_match('|^https?:|', $file_or_url))
$feed_uri = $_SERVER['DOCUMENT_ROOT'] .'/shared/xml/'. $file_or_url;
else
$feed_uri = $file_or_url;
return $feed_uri;
}
private function summarizeText($summary) {
$summary = strip_tags($summary);
// Truncate summary line to 100 characters
$max_len = 100;
if (strlen($summary) > $max_len)
$summary = substr($summary, 0, $max_len) . '...';
return $summary;
}
}
12
如果饲料没有良好的XML,你应该拒绝它,没有例外。您有权致电订阅源创建者a bozo。
否则你铺平了道路混乱,HTML中结束了。
1
我个人使用BNC高级订阅Parser-我喜欢的模板系统,这是非常容易使用
32
有了4条线,我将一个rss导入到一个数组中。
$feed = implode(file('http://yourdomains.com/feed.rss'));
$xml = simplexml_load_string($feed);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
对于更复杂的解决方案
$feed = new DOMDocument();
$feed->load('file.rss');
$json = array();
$json['title'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$json['description'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
$json['link'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('link')->item(0)->firstChild->nodeValue;
$items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');
$json['item'] = array();
$i = 0;
foreach($items as $key => $item) {
$title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$description = $item->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
$pubDate = $item->getElementsByTagName('pubDate')->item(0)->firstChild->nodeValue;
$guid = $item->getElementsByTagName('guid')->item(0)->firstChild->nodeValue;
$json['item'][$key]['title'] = $title;
$json['item'][$key]['description'] = $description;
$json['item'][$key]['pubdate'] = $pubDate;
$json['item'][$key]['guid'] = $guid;
}
echo json_encode($json);
-1
另一个伟大的自由解析器 - http://bncscripts.com/free-php-rss-parser/ 这是很轻(只有3KB),简单易用!
15
我想介绍的简单脚本解析RSS:
$i = 0; // counter
$url = "http://www.banki.ru/xml/news.rss"; // url to parse
$rss = simplexml_load_file($url); // XML parser
// RSS items loop
print '<h2><img style="vertical-align: middle;" src="'.$rss->channel->image->url.'" /> '.$rss->channel->title.'</h2>'; // channel title + img with src
foreach($rss->channel->item as $item) {
if ($i < 10) { // parse only 10 items
print '<a href="'.$item->link.'">'.$item->title.'</a><br />';
}
$i++;
}
1
PHP的RSS阅读器 - http://www.scriptol.com/rss/rss-reader.php - 是用户的使用一千完整而简单的解析......
相关问题
- 1. 哪个是用Rails解析RSS/Atom提要的最佳方式
- 2. 解析iPhone应用程序的RSS/Atom提要的最佳方式是什么?
- 3. OSM - 解析方式最快方式标记的最佳方式
- 4. 解析JSONObjects和JSONArray的最佳方式
- 5. 消费RSS提要的最佳方式
- 6. 解析URL以提取域的最佳方式是什么?
- 7. 在PHP中解析PayPal NVP的最佳方式是什么?
- 8. 以PHP解析动态文本列表的最佳方式
- 9. 使用jQuery解析XML的最佳方式
- 10. 使用PHP SimpleXML解析oBix XML提要?
- 11. 如何使用php解析提要
- 12. 使用JQTouch和JQuery显示rss提要的最佳方式
- 13. 在c中编写解析器的最佳/最快的方式#
- 14. 的最佳方式 - PHP 5.5
- 15. 最佳的方式在PHP
- 16. 解析分析以找到引荐来源的最佳方式?
- 17. 最佳(最快)的方式来解析和修改文件
- 18. 用Perl解析复杂XML的最佳方式是什么?
- 19. 用PHP解析这个app_data字符串格式的最佳方法?
- 20. 最佳方式/解密
- 21. xml解析与php。从模式获取默认值的最佳方式
- 22. 文本解析的最佳方法androidk
- 23. 方言和解析的最佳介绍?
- 24. 解析JSONP响应的最佳方法
- 25. 解析XML的最佳方法
- 26. C# - 解析网页的最佳方法?
- 27. 需要建议:在C中解析HTML的最佳方法#
- 28. 用PHP创建PDF的最佳方式
- 29. 最佳方式使用Ajax
- 30. 最佳方式使用Oracle
有一个问题这个请求大部分供稿阅读器都使用php的核心XML读取器,如果XML不像XML标准所要求的格式良好,它会崩溃,你可以看看那些不使用XML阅读器并使用文本阅读器的人,但是负载在服务器上会大幅增加。 我知道这是回答我只是让人们意识到使用XML供稿阅读器的缺点 – 2013-09-10 09:29:57
永远不要试图解析无效的XML。责备来源。 – Lothar 2014-11-27 04:03:48