我正在尝试从YouTube XML Feed中获取视频信息,例如标题和缩略图网址。
我们以此Feed为例:
http://gdata.youtube.com/feeds/api/videos/CevxZvSJLk8
这是我现在的代码:
$videoURL = 'http://gdata.youtube.com/feeds/api/videos/CevxZvSJLk8';
$sxml = simplexml_load_file($videoURL);
print_r($sxml);
但是,这似乎不包括媒体:xml表的组部分。
基本上,我正试图获得这两个值:
entry -> media:group -> media:title
entry -> media:group -> media:thumbnail
编辑:这是我最后阅读其他类似问题的解决方案。
$videoTitle = $sxml->children('media', true)->group->title;
$videoThumbnail = $sxml->children('media', true)->group->thumbnail->attributes()->url;
答案 0 :(得分:0)
标记名称中的冒号将名称空间前缀与本地元素或属性名称分开。问题中的提要有几个名称空间。
http://www.w3.org/2005/Atom
http://purl.org/atom/app#
,前缀为app
http://search.yahoo.com/mrss/
,前缀为media
http://schemas.google.com/g/2005
,前缀为gd
http://gdata.youtube.com/schemas/2007
,前缀为yt
名称空间前缀是实际名称空间的别名,它仅对文档有效,并且可以针对子节点进行更改。下一个Feed可以使用前缀atom
作为http://www.w3.org/2005/Atom
。因此,根据文档中的命名空间前缀是一个坏主意。
如果使用Xpath从文档中获取元素,则可以为使用的命名空间注册自己的前缀。以下示例直接将媒体rss标题和大缩略图的URL作为字符串。如果元素不存在,则返回空字符串。
$videoURL = 'http://gdata.youtube.com/feeds/api/videos/CevxZvSJLk8';
$dom = new DOMDocument();
$dom->load($videoURL);
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('mrss', 'http://search.yahoo.com/mrss/');
var_dump(
$xpath->evaluate('string(//mrss:title)', NULL, FALSE),
$xpath->evaluate('string(//mrss:thumbnail[@width="480"]/@url)', NULL, FALSE)
);
输出:
string(28) "Katy Perry - Roar (Official)"
string(40) "http://i1.ytimg.com/vi/CevxZvSJLk8/0.jpg"