使用Zend_Feed庫進行超過一個深度的項目的正確方法是什麼?Zend_Feed:從Feed中獲取圖片URL
第二行到最後一行代碼應該如何讀取?
require_once 'Zend/Feed/Rss.php';
$url = 'http://leo.am/podcasts/twit';
$c = new Zend_Feed_Rss($url);
$iu = $c->image()->url();
echo $iu;
使用Zend_Feed庫進行超過一個深度的項目的正確方法是什麼?Zend_Feed:從Feed中獲取圖片URL
第二行到最後一行代碼應該如何讀取?
require_once 'Zend/Feed/Rss.php';
$url = 'http://leo.am/podcasts/twit';
$c = new Zend_Feed_Rss($url);
$iu = $c->image()->url();
echo $iu;
這很有趣!
你的RSS源有兩個image
標籤都有效:
<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特定的,因此在itunes
名稱空間中,URL在href
屬性中。
問題是$c->image
返回數組中的兩個元素。我不確定它是否是一個錯誤,或者它是否按預期工作。
所以你必須遍歷每個元素,看看它是從iTunes還是從RSS。只要定義了該代碼,該代碼就會返回數組中的itunes和rss圖像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);
輸出看起來是這樣的:
array(2) {
["rss"]=>
string(53) "http://leoville.tv/podcasts/coverart/twit144audio.jpg"
["itunes"]=>
string(53) "http://leoville.tv/podcasts/coverart/twit600audio.jpg"
}
編輯: 以及有一個簡潔的選擇,如果你不關心的iTunes網址:
$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
我這樣做:
$feed = Zend_Feed::import('http://www.sports.ru/rss/all_news.xml');
$data = array();
foreach ($feed as $entry)
{
$data[] = array(
'title' => $entry->title(),
'description' => $entry->description(),
'image' => $entry->enclosure->getDom()->getAttribute('url'),
);
}