2011-12-11 6 views
1

Zend_Feed 라이브러리를 사용하여 한 단계 이상의 아이템을 가져가는 올바른 방법은 무엇입니까?Zend_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; 

답변

1

이것은 매우 흥미 롭습니다.

귀하의 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 
0

나는 이렇게한다 :

$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'), 
    ); 
}