好的,所以,我正在为朋友的播客网站创建一个页面,列出他的播客的所有剧集。基本上,我正在寻找的是如何阅读RSS Feed。解析节点,并在屏幕上显示信息。 (最终,我将创建一个播放剧集的播放器,但那要晚得多)
这就是我正在阅读RSS Feed的方式(这是我的一个节目 - 用于测试目的)。
点击查看My Feed
<?php
//Errors:
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$rss = new DOMDocument();
$rss->load('http://tbpc.podbean.com/feed/');
$feed = array();
foreach ($rss->getElementsByTagName('item') as $node) {
$item = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
'guid' => $node->getElementsByTagName('guid')->item(0)->nodeValue,
'enclosure' => $node->getElementsByTagName('enclosure')->item(0)->nodeValue,
);
array_push($feed, $item);
}
$limit = 1;
for($x=0;$x<$limit;$x++) {
$title = str_replace(' & ', ' & ', $feed[$x]['title']);
$link = $feed[$x]['link'];
$description = $feed[$x]['desc'];
$short = substr($description, 0, strpos( $description, '<'));
$file = $feed[$x]['guid'];
echo '<p><strong><a href="'.$link.'" title="'.$title.'">'.$title.'</a></strong></p>';
echo '<p>'.$description.'</p>';
echo '<p>'.$short.'</p>';
echo '<p>'.$file.'</p>';
}
?>
问题是 - 是我不知道如何从url
节点的属性enclosure
中获取信息,以便我可以在页面上显示其余的信息(当我制作播放器时,这将派上用场 - 最终)。
SO!如何从url
节点获取enclosure
属性?我是不是错了?
任何有用的提示将不胜感激。感谢。
答案 0 :(得分:2)
如果你决定在这里使用DOMDocument(),请道歉,但是因为到目前为止还没有人发布过答案...这里是一个使用simple_xml_load_file()的脚本,我发现很容易得到要掌握。
<?php
$rss_array = array('http://rss.computerworld.com/computerworld/s/feed/topic/231', 'http://rss.computerworld.com/computerworld/s/feed/topic/230', 'http://rss.computerworld.com/computerworld/s/feed/topic/66', 'http://www.engadget.com/rss.xml', 'http://feeds.webservice.techradar.com/rss/new', 'http://feeds.arstechnica.com/arstechnica/index', 'http://www.notebookcheck.net/News.152.100.html', 'http://electronista.feedsportal.com/c/34342/f/626172/index.rss', 'http://www.anandtech.com/rss/pipeline/', 'http://www.digitimes.com/rss/daily.xml', 'http://feeds.feedburner.com/TechCrunch/', 'http://feeds2.feedburner.com/ziffdavis/pcmag/breakingnews', 'http://feeds.feedburner.com/Liliputing', 'http://feeds.slashgear.com/slashgear', 'http://feeds.feedburner.com/GizmagEmergingTechnologyMagazine', 'http://www.zdnet.com/news/rss.xml', 'http://feeds.feedburner.com/mobilityupdate', 'http://www.techmeme.com/feed.xml', 'http://www.notebookreview.com/rss.xml');
for ($i=0; $i<count($rss_array); $i++ ) {
$rssfeed = simplexml_load_file($rss_array[$i]);
foreach ($rssfeed->channel as $channel) {
echo '<h1>' . htmlentities($channel->title) . '</h1>';
echo '<p>' . htmlentities($channel->description) . '</p>';
echo '<p><a href="' . htmlentities($channel->link) . '">' .
htmlentities($channel->link) . '</a></p>';
echo '<input type="button" value=" >>> " onClick="downloadFileViaAjax(\'' . htmlentities($channel->link) . '\')">';
echo '<ul>';
foreach ($channel->item as $item) {
echo '<li><a href="' . htmlentities($item->link) . '">';
echo htmlentities($item->title) . '</a>';
// echo htmlentities($item->description) . '</li>';
echo '<input type="button" value=" >>> " onClick="downloadFileViaAjax(\'' . htmlentities($item->link) . '\')"></li>';
}
echo '</ul>';
}
}//fur ( $rss_array++ )
?>
答案 1 :(得分:1)
节点有getAttribute()
方法。所以你可以使用:
$node->getElementsByTagName('enclosure')->item(0)->getAttribute('url')
但是这是从XML DOM获取节点和值的另一种更舒适的方法:使用Xpath。请参阅此答案:https://stackoverflow.com/a/20225186/2265374
如果没有找到任何元素,$node->getElementsByTagName('enclosure')->item(0)
将导致错误(SimpleXML btw 也是如此)。如果节点列表在Xpath中强制转换为字符串,则结果只是一个空字符串,并且不会触发错误。
您也可以通过这种方式直接获取属性。与enclosure元素的url属性类似:
echo 'Enclosure Url: ', $xpath->evaluate('string(enclosure/@url)', $rssItem), "\n";