2010-03-23 3 views
15

이 YouTube 재생 목록 피드에서 비디오 데이터를 가져 와서 재미있는 데이터를 배열에 추가하고 나중에 사용하려고합니다. 그러나 피드에서 볼 수 있듯이 일부 비디오 리드는 " 죽은 "그리고 내 코드에 문제가 발생합니다.SimpleXML - "노드가 없습니다"

$ attrs [ 'url']에 액세스하려고하면 "Node is longer exists"라는 오류가 발생합니다. 내가 액세스하기 전에 노드가 존재하는지 확인하는 방법을 찾기 위해 몇 시간 동안 노력했지만 행운이 없다.

다른 사람이 동일한 결과로 피드를 구문 분석하거나 if-node-exists 확인을 만드는 데 도움이 될 수 있다면 가장 행복 할 것입니다. 자신이 원본 문서 나중에 사용하기 위해 데이터를 저장하려면, 문자열로 캐스팅 (. libxml 관련된 일부 내부 꼬추)에 연결되는,

$url = 'http://gdata.youtube.com/feeds/api/playlists/18A7E36C33EF4B5D?v=2'; 

$sxml = simplexml_load_file($url); 
$i = 0; 
$videoobj; 

foreach ($sxml->entry as $entry) { 
    // get nodes in media: namespace for media information 
    $media = $entry->children('http://search.yahoo.com/mrss/'); 

    // get video player URL 
    $attrs = $media->group->player->attributes(); 
    $videoobj[$i]['url'] = $attrs['url']; 

    // get video thumbnail 
    $attrs = $media->group->thumbnail[0]->attributes(); 
    $videoobj[$i]['thumb'] = $attrs['url']; 
    $videoobj[$i]['title'] = $media->group->title; 
    $i++; 
} 

답변

18
if ($media->group->thumbnail && $media->group->thumbnail[0]->attributes()) { 
    $attrs = $media->group->thumbnail[0]->attributes(); 
    $videoobj[$i]['thumb'] = strval($attrs['url']); 
    $videoobj[$i]['title'] = strval($media->group->title); 
} 
+0

감사합니다. 내 문제를 해결했습니다 :) –

+3

문제를 제안 해주세요. 문제에 대해 조금 설명해보십시오. 이것은 많은 도움이됩니다. –

+0

중요 사항 -'$ media-> group-> thumbnail [0]'을 확인하십시오.이 xml 객체가 비어 있는지 확인해야합니다. 그것이 사실이라면 어떤 시도든지'$ media-> group-> thumbnail [0] -> attributes()'를 해결하면이 에러를 얻을 수 있습니다. – Enyby

8

SimpleXML을의 방법은 항상 개체를 반환 사전에 감사합니다 이 같은 :

$videoobj[$i]['url'] = (string) $attrs['url']; 
$videoobj[$i]['thumb'] = (string) $attrs['url']; 
$videoobj[$i]['title'] = (string) $media->group->title; 
+1

난 아직도이 행에서 같은 오류가 발생합니다 : $ videoobj [$ i]를 [ 'URL'] = (문자열) $ 바인드합니다 [ 'URL']; 캐스팅이 도움이되지 않습니다. ( –