>我正在尝试获取$xml->entry->yt:statistics->attributes()->viewCount
属性,并且我已经尝试了一些使用SimpleXML的东西,但我无法真正让它工作!
尝试 #1
<?php
$xml = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos?author=Google");
echo $xml->entry[0]->yt:statistics['viewCount'];
?>
尝试 #2
<?php
$xml = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos?author=Google");
echo $xml->entry[0]->yt:statistics->attributes()->viewCount;
?>
两者都返回空白,尽管 SimpleXML 正在工作,但我试图获取提要的标题,这奏效了!
有什么想法吗?
我已经在SO和其他网站上查看了大量其他示例,但不知何故这不起作用? PHP 是否识别出":"是截断,还是我只是在做一些愚蠢的事情?
谢谢,非常感谢任何回复!
如果您只想获取YouTube视频的观看次数,则必须指定视频ID。您可以在每个视频网址中找到 youtube ID。例如"http://www.youtube.com/watch?v=ccI-MugndOU",所以id是ccI-MugndOU。为了获得观看次数,请尝试下面的代码
$sample_video_ID = "ccI-MugndOU";
$JSON = file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$sample_video_ID}&alt=json");
$JSON_Data = json_decode($JSON);
$views = $JSON_Data->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'};
echo $views;
我会使用zend框架中的gdata组件。也可以作为单独的模块使用,因此您无需使用整个 zend。
yt:
前缀将该元素标记为与文档其余部分位于不同的"XML 命名空间"中。您必须告诉 SimpleXML 使用 ->children()
方法切换到该命名空间。
您尝试的行实际上应如下所示:
echo (string)$xml->entry[0]->children('yt', true)->statistics->attributes(NULL)->viewCount;
要分解一下:
-
(string)
- 这只是一个好习惯:你想要属性的字符串内容,而不是表示它的 SimpleXML 对象 -
$xml->entry[0]
- 正如预期的那样 -
->children('yt', true)
- 切换到本地别名为"yt"的命名空间 -
->statistics
- 正如预期的那样 -
->attributes(NULL)
- 从技术上讲,属性"viewCount"回到默认命名空间中,因为它没有前缀"yt:",所以我们必须切换回来才能看到它 -
->viewCount
- 运行->attributes()
只给我们属性,这些属性是用->foo
而不是['foo']
访问的