이것은 매우 흥미 롭습니다.
귀하의 RSS 공급이 두 image
-tags 있습니다
<image>
<url>http://leoville.tv/podcasts/coverart/twit144audio.jpg</url>
<!-- ... more stuff ... -->
</image>
<!-- ... more stuff ... -->
<itunes:image href="http://leoville.tv/podcasts/coverart/twit600audio.jpg"/>
첫 번째 image
기본 네임 스페이스에와 자식 노드가이 아마도 당신이 원하는 하나입니다. 두 번째는 명백하게 아이튠즈에 따라 다르므로 itunes
네임 스페이스에 있고 URL은 href
속성에있다.
문제는 $c->image
이 두 요소를 배열에 반환한다는 것입니다. 그것이 버그인지 또는 의도 한대로 작동하는지 확실하지 않습니다.
그래서 모든 요소를 반복하여 itunes 또는 rss에서 왔는지 확인해야합니다. 이 코드는 정의되어있는 한 배열에서 itunes와 rss image url을 반환합니다. 아무것도 발견되지 않으면 배열이 비어 :
array(2) {
["rss"]=>
string(53) "http://leoville.tv/podcasts/coverart/twit144audio.jpg"
["itunes"]=>
string(53) "http://leoville.tv/podcasts/coverart/twit600audio.jpg"
}
편집 : 당신은 아이튠즈 URL을 걱정하지 않는 경우 이 잘 간결한 대안이 :
이
require_once 'Zend/Feed/Rss.php';
// iTunes Namespace URI
define('RSS_NS_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
function getImageFromElement(Zend_Feed_Element $elem) {
$result = array();
$elemDOM = $elem->getDOM();
if(RSS_NS_ITUNES == $elemDOM->namespaceURI) {
$result["itunes"] = $elemDOM->getAttribute('href');
} else if("" == $elemDOM->namespaceURI) {
$url = $elem->url();
if($url)
$result["rss"] = $url;
}
return $result;
}
function getFeedImages(Zend_Feed_Rss $feed) {
$imgContent = $feed->image;
$result = array();
if(is_array($imgContent)) {
// Multiple elements returned
// check every element for valid URLs
foreach($imgContent as $i) {
$result = array_merge($result,
getImageFromElement($i));
}
} else if($imgContent instanceof Zend_Feed_Element) {
// Check the one element we've got
$result = getImageFromElement($imgContent);
}
return $result;
}
// usage:
$url = 'http://leo.am/podcasts/twit';
$c = new Zend_Feed_Rss($url);
$imageUrls = getFeedImages($c);
var_dump($imageUrls);
출력은 다음과 같습니다
$url = 'http://leo.am/podcasts/twit';
$c = new Zend_Feed_Rss($url);
$imgNoNs=":image";
echo $c->$imgNoNs->url();
출력 :
http://leoville.tv/podcasts/coverart/twit144audio.jpg