使用 JSON 从 Youtube API 返回视频时长

Posted

技术标签:

【中文标题】使用 JSON 从 Youtube API 返回视频时长【英文标题】:Return video duration from Youtube API using JSON 【发布时间】:2013-02-27 06:30:39 【问题描述】:

我正在尝试使用 JSON 检索和打印通过 Youtube API 返回的每个视频的持续时间。持续时间需要这样输出:

9:34 分钟,而不是几秒钟

但我不知道下一步该做什么。我目前正在使用以下代码:

function showMyVideos2(data) 
var feed = data.feed;
var entries = feed.entry || [];
var html = ['<ul class="videos">'];
for (var i = 0; i < entries.length; i++) 
var entry = entries[i];
var title = entry.title.$t.substr(0, 20);
var thumbnailUrl = entries[i].media$group.media$thumbnail[0].url;
var playerUrl = entries[i].media$group.media$content[0].url;
html.push('<li>',
          '<a href="', playerUrl, '" rel="vidbox 686 315"><img src="', 
          thumbnailUrl, '"  /></a>', '<span class="titlec"><a      href="', playerUrl, '" rel="vidbox 686 315">', title, '... </a></span></li>');

html.push('</ul><br style="clear: left;"/>');
document.getElementById('videos2').innerHTML = html.join('');
if (entries.length > 0) 
loadVideo(entries[0].media$group.media$content[0].url, false);


【问题讨论】:

【参考方案1】:

YouTube API 仅以秒为单位输出时长。但是你可以创建一个函数来将秒转换成你想要的时间格式。

function formatSecondsAsTime(secs) 
    var hr = Math.floor(secs / 3600);
    var min = Math.floor((secs - (hr * 3600)) / 60);
    var sec = Math.floor(secs - (hr * 3600) - (min * 60));

    if (hr < 10) 
        hr = "0" + hr;
    
    if (min < 10) 
        min = "0" + min;
    
    if (sec < 10) 
        sec = "0" + sec;
    
    if (hr) 
        hr = "00";
    

    return hr + ':' + min + ':' + sec;

只需将持续时间字段传递给函数:

var videoTime = formatSecondsAsTime(entries[i].media$group.media$content[0].duration);

【讨论】:

以上是关于使用 JSON 从 Youtube API 返回视频时长的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 从 youtube v3 api 修复 json?

如何从 googleapi Youtube API 获取 XML 响应

使用 YouTube API 从带有 JSON 提要的视频中获取所有评论

从 YouTube API 解析 JSON

带有 Google PHP SDK 的 YouTube API - 以 JSON 格式响应

哪个 url 用于从 api 3.0 上的用户获取 youtube 上传视频的 json 数据