如何使用 php 解析来自第三方站点的格式错误的 RSS 提要?
How to parse malformed RSS feed from third party sites using php?
我正在尝试解析来自某些媒体的 RSS 提要。我的脚本适用于大多数人。问题是我需要聚合所有这些,即使它们格式不正确。
我没能得到这两个提要的描述。我怎么能继续呢?
这是我的脚本:
<?php
function RSS_items ($url) {
$i = 0;
$doc = new DOMDocument();
$doc->load($url);
$channels = $doc->getElementsByTagName('channel');
foreach($channels as $channel) {
$items = $channel->getElementsByTagName('item');
foreach($items as $item) {
$i++;
$y[$i]['title'] = $item->getElementsByTagName('title')->item(0)->firstChild->textContent;
$y[$i]['link'] = $item->getElementsByTagName('link')->item(0)->firstChild->textContent;
$y[$i]['updated'] = $item->getElementsByTagName('pubDate')->item(0)->firstChild->textContent;
$y[$i]['description'] = $item->getElementsByTagName('description')->item(0)->firstChild->textContent;
}
}
echo '<pre>';
print_r ($y);
echo '</pre>';
}
// the two malformed feeds
RSS_items ('http://www.lefigaro.fr/rss/figaro_actualites-a-la-une.xml');
RSS_items ('https://francais.rt.com/rss');
?>
您的代码的问题在于使用 firstChild
属性 select 元素的第一个子元素。但是在目标 XML 中,description
标签没有任何您想要首先 select 的子项。从代码中删除它。结果应该是这样的
$item->getElementsByTagName('description')->item(0)->textContent;
我正在尝试解析来自某些媒体的 RSS 提要。我的脚本适用于大多数人。问题是我需要聚合所有这些,即使它们格式不正确。
我没能得到这两个提要的描述。我怎么能继续呢?
这是我的脚本:
<?php
function RSS_items ($url) {
$i = 0;
$doc = new DOMDocument();
$doc->load($url);
$channels = $doc->getElementsByTagName('channel');
foreach($channels as $channel) {
$items = $channel->getElementsByTagName('item');
foreach($items as $item) {
$i++;
$y[$i]['title'] = $item->getElementsByTagName('title')->item(0)->firstChild->textContent;
$y[$i]['link'] = $item->getElementsByTagName('link')->item(0)->firstChild->textContent;
$y[$i]['updated'] = $item->getElementsByTagName('pubDate')->item(0)->firstChild->textContent;
$y[$i]['description'] = $item->getElementsByTagName('description')->item(0)->firstChild->textContent;
}
}
echo '<pre>';
print_r ($y);
echo '</pre>';
}
// the two malformed feeds
RSS_items ('http://www.lefigaro.fr/rss/figaro_actualites-a-la-une.xml');
RSS_items ('https://francais.rt.com/rss');
?>
您的代码的问题在于使用 firstChild
属性 select 元素的第一个子元素。但是在目标 XML 中,description
标签没有任何您想要首先 select 的子项。从代码中删除它。结果应该是这样的
$item->getElementsByTagName('description')->item(0)->textContent;