如何获取 RSS 提要的特定于 iTunes 的子节点?

How to get iTunes-specific child nodes of RSS feeds?

我正在尝试使用 PHP 处理 an RSS feed,并且有一些标签需要处理,例如 'itunes:image'。我正在使用的代码如下,由于某些原因,这些元素没有返回任何值。输出长度为 0.

如何读取这些标签并获取它们的属性?

$f = $_REQUEST['feed'];
$feed = new DOMDocument();
$feed->load($f);
$items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');

foreach($items as $key => $item) 
{
    $title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
    $pubDate = $item->getElementsByTagName('pubDate')->item(0)->firstChild->nodeValue;
    $description = $item->getElementsByTagName('description')->item(0)->textContent; // textContent

    $arrt = $item->getElementsByTagName('itunes:image');
    print_r($arrt);
}

getElementsByTagName由DOM指定,PHP紧随其后。它不考虑名称空间。相反,使用 getElementsByTagNameNS,它需要完整的命名空间 URI(而不是前缀)。这个appears to behttp://www.itunes.com/dtds/podcast-1.0.dtd*。所以:

    $img = $item->getElementsByTagNameNS('http://www.itunes.com/dtds/podcast-1.0.dtd', 'image');
    // Set preemptive fallback, then set value if check passes
    urlImage = '';
    if ($img) {
      $urlImage = $img->getAttribute('href');
    }

或者把命名空间放在常量中。

您可以通过简单地删除前缀并获取具有 getElementsByTagName.

的任何命名空间的所有 image 标签来逃脱惩罚

确保检查给定项目是否有 itunes:image 元素(现在给出示例);在示例播客中,有些没有,我怀疑这也给你带来了麻烦。 (如果没有 href 属性,getAttribute 将 return 根据 DOM 规范 null 或空字符串而不会出错。)

*如果您想知道,该位置并没有托管实际的 DTD 文件,而且已经有大约十年没有了。

<?php
$rss_feed = simplexml_load_file("url link");
if(!empty($rss_feed)) {
$i=0;
foreach ($rss_feed->channel->item as $feed_item) {    
?>
            
<?php echo $rss_feed->children('itunes', true)->image->attributes()->href;?>

<?php
}
?>