1

我正在从 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'};
4

1 回答 1

0

您确定您只是遇到了前面有破折号的 ID 的问题吗?您粘贴的代码不应使用任何 Youtube ID,因为 gdata 提要作为 JSON 的一部分返回一些带有“$”字符的文本。该字符是一个 PHP 标识符,因此尝试在提要返回的任何内容上运行 json_decode 函数时都会出现 500 个错误。

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

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

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

如果您在使用完全相同的代码的其他视频中没有出现错误,也许您可​​以将其发布在这里?

于 2013-01-10T05:41:52.513 回答