YouTube视频API无法使用以破折号开头的ID

时间:2013-01-10 02:36:24

标签: youtube youtube-api

我正在从YouTube的API访问数据,我的一切工作正常,但我遇到的问题是,当在videoID的开头有一个短划线( - )时,它没有返回json数据。

$videoID = -FIHqoTcZog;
$json = json_decode(file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$videoID}&alt=json"));

然而,我可以使用它来一直返回缩略图:

$thumbnail = "http://i4.ytimg.com/vi/".$videoID."/mqdefault.jpg";   

这是我用来从上面的json中提取信息的代码。

$title = $json->{'feed'}->{'entry'}[0]->{'title'}->{'$t'};
$description = $json->{'feed'}->{'entry'}[0]->{'media$group'}->{'media$description'}->{'$t'};
$thumbnail = "http://i4.ytimg.com/vi/".$videoID."/mqdefault.jpg";   
$ratings = ((round($json->{'feed'}->{'entry'}[0]->{'gd$rating'}->{'average'}, 1)/$json->{'feed'}->{'entry'}[0]->{'gd$rating'}->{'max'})*100)."%";
$views = number_format($json->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'});
$duration = $json->{'feed'}->{'entry'}[0]->{'media$group'}->{'yt$duration'}->{'seconds'};

1 个答案:

答案 0 :(得分:0)

您确定自己只是遇到了前面有破折号的ID问题吗?您粘贴的代码不应使用任何Youtube ID,因为gdata Feed会返回一些带有'$'字符的文本作为JSON的一部分。该字符是一个PHP标识符,因此无论Feed返回什么,您都会遇到500个错误,尝试运行json_decode函数。

解决问题的一种方法是使用json_decode的第二个参数来提供关联数组而不是对象,如下所示:

$json = json_decode(file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$videoID}&alt=json"),true);

当然,这也需要您使用数组,但后续的代码更改应该是最小的。

如果你没有使用完全相同的代码获得其他视频的错误,也许你可以在这里发布它?

相关问题