1

我正在尝试获取该$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是否将':'识别为截止,或者我只是在做一些愚蠢的事情?

谢谢,任何回复都非常感谢!

4

3 回答 3

1

如果您只想获取 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;
于 2012-10-12T10:06:17.623 回答
1

我会使用 zend 框架中的gdata 组件。也可作为单独的模块使用,因此您不需要使用整个 zend。

于 2012-10-12T10:09:35.773 回答
0

前缀将该yt:元素标记为与文档的其余部分不同的“XML 名称空间”。->children()您必须使用该方法告诉 SimpleXML 切换到该名称空间。

您尝试的行实际上应该如下所示:

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- running->attributes()只给我们提供了属性,这些属性可以通过->foonot访问['foo']
于 2012-10-13T21:09:56.530 回答