如何从 php 中的 rss 提要获取图像

Posted

技术标签:

【中文标题】如何从 php 中的 rss 提要获取图像【英文标题】:How to get image from rss feed in php 【发布时间】:2022-01-08 16:22:39 【问题描述】:

My Rss

链接到我的剧集图片:

<?php
 $url = "https://anchor.fm/s/75abc654/podcast/rss";

        $invalidurl = false;
        if(@simplexml_load_file($url))
            $feeds = simplexml_load_file($url);
        else
            $invalidurl = true;
            echo "<h2>Invalid RSS feed URL.</h2>";
        
        $i=0;
        if(!empty($feeds))

            $site = $feeds->channel->title;
            $sitelink = $feeds->channel->link;

            foreach ($feeds->channel->item as $item) 

                $title = $item->title;
                $link = $item->link;
                $description = $item->description;
                $mp3 = $item->enclosure['url'];
               // $season= $item->itunes:season;
                $image = $item->itunes->image->href;
                $postDate = $item->pubDate;
                $pubDate = date('D, d M Y',strtotime($postDate));


                if($i>=5) break;
        ?>

在此代码中$image = $item-&gt;image-&gt;href; 没有获取图片网址。我不知道如何获取图片网址,请帮我获取图片网址。 ..提前谢谢

【问题讨论】:

$item-&gt;image 能得到什么? 我不认为$item 包含和image 属性。先检查一下。 dula 和 tarangp 在提出疑问之前请检查我的 rss 提要...顺便说一下,item->image 是一个嵌套数组,它用于我的播客封面名称和描述,而不是剧集。说真的,我不知道从 d3t3ozftmdmh3i.cloudfront.net/production/…>.. 获取 iimage href 【参考方案1】:

您正在处理 XML / RSS 文档中的 namespaced 节点,因此您应该使用 namespace 来帮助识别感兴趣的节点。我从未使用过simpleXML,因此只能提供使用传统DOMDocument 和DOMXPath 的替代解决方案

正如我所说,我从未使用过 SimpleXML,但我注意到 XPath 支持它,因此您可以修改下面的代码

这里的诀窍是register 适当的命名空间,以便 XPath 表达式可以使用它。

$url='https://anchor.fm/s/75abc654/podcast/rss';
$dom=new DOMDocument;
$dom->load( $url );

$xp=new DOMXPath( $dom );
$xp->registerNamespace('itunes','http://www.itunes.com/dtds/podcast-1.0.dtd');


$img=$xp->query('//channel/itunes:image');
if( $img )echo $img->item(0)->getAttribute('href');

上面会简单的输出

https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_nologo/19641917/19641917-1637668693797-44b27f4c00a16.jpg

为了稍微扩展上述内容并注册 RSS 提要中使用的其他命名空间,然后在 DOM 中查询命名空间元素,也许以下内容将有助于阐明如何使用命名空间。 $tags 数组只是从源文件中随机选择的元素,这些元素将用于构造 XPath 表达式 - 其中一些使用 dcatom 命名空间,而另一些则没有。

$url='https://anchor.fm/s/75abc654/podcast/rss';

$dom=new DOMDocument;
$dom->load( $url );

$xp=new DOMXPath( $dom );
$xp->registerNamespace('dc','http://purl.org/dc/elements/1.1/');
$xp->registerNamespace('itunes','http://www.itunes.com/dtds/podcast-1.0.dtd');
$xp->registerNamespace('atom','http://www.w3.org/2005/Atom');




$tags=array('title','description','author','link','atom:link','/item/title','/item/dc:creator','/item/pubDate','/item/itunes:summary');
foreach( $tags as $tag )
    $expr=sprintf('//%s',$tag );
    $col=$xp->query( $expr );
    if( $col && $col->length > 0 )
        foreach( $col as $node )printf('%s -> %s<br />',$tag,trim($node->nodeValue));
    

这将打印:

title -> Espada Podcast
title -> Espada Podcast
title -> Discussion about Doremon | ft:Ryuk,Ryomen
title -> Espada's Trailer
description -> Our Podcast Trailer
description ->
We discussed about doremon .. Support us on Instagram


description ->
Adula oonum illa keela potrunga


author -> Espada Podcast
link -> http://espadapodcsat.ml
link -> http://espadapodcsat.ml
link -> https://anchor.fm/espada-podcast8/episodes/Discussion-about-Doremon--ftRyuk-Ryomen-e1at2fu
link -> https://anchor.fm/espada-podcast8/episodes/Espadas-Trailer-e1asvh8
atom:link ->
atom:link ->
/item/title -> Discussion about Doremon | ft:Ryuk,Ryomen
/item/title -> Espada's Trailer
/item/dc:creator -> Espada Podcast
/item/dc:creator -> Espada Podcast
/item/pubDate -> Sat, 27 Nov 2021 13:29:47 GMT
/item/pubDate -> Sat, 27 Nov 2021 10:56:21 GMT
/item/itunes:summary ->
We discussed about doremon .. Support us on Instagram


/item/itunes:summary ->
Adula oonum illa keela potrunga

【讨论】:

以上是关于如何从 php 中的 rss 提要获取图像的主要内容,如果未能解决你的问题,请参考以下文章

如何从 RSS 源获取全文:Android 和 IOS

Google 阅读器如何获取 RSS 提要中的每个项目?

从 flickr JSON rss feed 获取所有图像尺寸

条件循环来获取php simplepie rss中的图像

从RSS源获取所有帖子的精选图像

从 Feedburner RSS 提要中获取原始 XML 数据