【发布时间】:2015-09-11 14:17:15
【问题描述】:
我一直在使用我为我的 Wordpress 博客拼凑不同代码位后创建的函数。它允许我传入一个短代码,其中包含一个定义 YouTube 视频 URL 的值,然后它会打印嵌入的视频、观看次数和其下方的持续时间。
不幸的是,我使用的 API 似乎已被 Google 贬值,我似乎无法让当前的 API (v3) 与此代码一起使用,因此我希望能在尝试解决此问题时提供一些帮助.我从 Google 获取了一个开发人员密钥,当我直接在浏览器中打开它时能够获得 JSON 响应,但似乎下面代码中的调用由于某种原因不想匹配。如果我仍然可以参考旧的 API 响应进行比较会有所帮助,所以我在这里有点盲目。
add_shortcode('yt', 'getYoutubeFrame');
// Convert Seconds to Minutes
function sec2hms ($sec, $padHours = false)
{
$hms = "";
$hours = intval(intval($sec) / 3600);
$hms .= ($padHours)
? str_pad($hours, 2, "0", STR_PAD_LEFT). ":"
: $hours. ":";
$minutes = intval(($sec / 60) % 60);
$hms .= str_pad($minutes, 2, "0", STR_PAD_LEFT). ":";
$seconds = intval($sec % 60);
$hms .= str_pad($seconds, 2, "0", STR_PAD_LEFT);
return $hms;
}
function getYoutubeFrame($atts) {
extract(shortcode_atts(array(
'video' => ''
), $atts));
// Get YouTube data via the API
$JSON = file_get_contents("https://gdata.youtube.com/feeds/api/videos?q=$video&alt=json");
$JSON_Data = json_decode($JSON);
$views = $JSON_Data->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'};
$views = number_format($views);
$duration = $JSON_Data->{'feed'}->{'entry'}[0]->{'media$group'}->{'yt$duration'}->{'seconds'};
$s = "<iframe width=\"1280\" height=\"720\" src=\"//www.youtube.com/embed/$video?showinfo=0&rel=0&modestbranding=1&theme=light&iv_load_policy=3&autohide=1&enablejsapi=1\" frameborder=\"0\" allowfullscreen></iframe>";
$s .= "<strong>Views:</strong> $views<br><strong>Duration:</strong> ";
$s .= sec2hms($duration);
$s .= "<br /><br />";
return $s;
}
API 似乎改变了持续时间的显示方式(使用 ISO 8601 而不是原始秒数)。我对 PHP 的经验和知识相当有限,否则我可能会在睡梦中解决这个问题!有关如何解决此问题的任何建议?
【问题讨论】:
-
欢迎来到堆栈:代码到底有什么问题?有错误吗?顺便说一句,Gdata 没有关闭,您仍然可以使用它。它是关闭的客户端登录服务器,您现在需要使用 Oauth2。
标签: php wordpress youtube youtube-api youtube-data-api