contentDetails 或持续时间未使用 Youtube v3 api

Posted

技术标签:

【中文标题】contentDetails 或持续时间未使用 Youtube v3 api【英文标题】:contentDetails or duration not coming using Youtube v3 api 【发布时间】:2015-02-08 05:23:22 【问题描述】:

看这个link,有给出的例子

https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
 &part=snippet,contentDetails,statistics,status

部分响应是

"contentDetails": 
    "duration": "PT15M51S",
    "aspectRatio": "RATIO_16_9"
   ,

现在我想检索 contentDetails 或主要是持续时间。所以我打电话给使用

https://www.googleapis.com/youtube/v3/search?part=snippet,contentDetails&key=[API_KEY]&q=something&maxResults=15&&fields=items,nextPageToken,prevPageToken,tokenPagination

显示


error: 
errors: [

domain: "youtube.part",
reason: "unknownPart",
message: "contentDetails",
locationType: "parameter",
location: "part"

],
code: 400,
message: "contentDetails"


为什么?我错过了什么?如何检索视频的时长?

【问题讨论】:

【参考方案1】:

您已经发现,Search:list 调用不支持 part 参数的 contentDetails。

您可以在 Search:list 的参数值中包含的部分名称是 id 和 sn-p,它们返回的数据非常少。如果我们想获得关于一个或多个视频的更具体的数据,我们应该使用来自搜索的非常少的数据。

因此,要在搜索时获得视频时长,您必须拨打电话

GET https://www.googleapis.com/youtube/v3/search?part=id&q=anything&key=YOUR_API_KEY

并从响应项中提取 videoId

"id": 
"kind": "youtube#video",
"videoId": "5hzgS9s-tE8"

并使用它来调用 Videos:list 以获取更具体的数据

https://www.googleapis.com/youtube/v3/videos?id=5hzgS9s-tE8&key=YOUR_API_KEY&part=snippet,contentDetails,statistics,status

并从响应数据中提取持续时间

 "contentDetails": 
 "duration": "PT15M51S",
 "aspectRatio": "RATIO_16_9"
 ,

【讨论】:

真的!!所以对于 100 个视频的列表,我需要向 youtube api 发送 100 个请求!!!!现在这太傻了...... 不,您实际上可以一次批量调用多达 50 个视频。 我仍在努力获取 contentDetailsstatistics 的值。我在这里为此创建了一个堆栈溢出问题:***.com/questions/36314874/…【参考方案2】:

第 1 步:您有一个列表视频 ID,使用 Search: list 例如,您收到 3 个 youtube 视频 ID,例如: zOYW7FO9rzA, zOYW7FO9rzA, -vH2eZAM30s第 2 步:您必须为第二次通话输入 youtube 视频 ID 列表。

https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=zOYW7FO9rzA,zOYW7FO9rzA,-vH2eZAM30s&key=Your API KEY 

因此,您不必为每个视频都打电话 结果将是:


 "kind": "youtube#videoListResponse",
 "etag": "\"iDqJ1j7zKs4x3o3ZsFlBOwgWAHU/p3KyUGr7ZRowLgKTqVFixrx7-mQ\"",
 "pageInfo": 
  "totalResults": 3,
  "resultsPerPage": 3
 ,
 "items": [
  
   "kind": "youtube#video",
   "etag": "\"iDqJ1j7zKs4x3o3ZsFlBOwgWAHU/psAhg0bxv1n1IfKwXhrPMV223YE\"",
   "id": "zOYW7FO9rzA",
   "contentDetails": 
    "duration": "PT1M21S",
    "dimension": "2d",
    "definition": "hd",
    "caption": "false",
    "licensedContent": false
   
  ,
  
   "kind": "youtube#video",
   "etag": "\"iDqJ1j7zKs4x3o3ZsFlBOwgWAHU/YCi772AbPZizPuAFci702rE55tU\"",
   "id": "T3Ysb9O3EWI",
   "contentDetails": 
    "duration": "PT1H28M47S",
    "dimension": "2d",
    "definition": "hd",
    "caption": "false",
    "licensedContent": false
   
  ,
  
   "kind": "youtube#video",
   "etag": "\"iDqJ1j7zKs4x3o3ZsFlBOwgWAHU/2BnWErqkysQERsaRNyd1ffGgJes\"",
   "id": "-vH2eZAM30s",
   "contentDetails": 
    "duration": "PT12M57S",
    "dimension": "2d",
    "definition": "hd",
    "caption": "false",
    "licensedContent": false
   
  
 ]

格式持续时间:1H1M1S = 1 小时 1 分钟 1 秒

【讨论】:

【参考方案3】:

使用上面的链接,这是一个快速的 php 示例,说明如何只进行这两个调用,每次调用最多 50 个结果

$JSON = file_get_contents('https://www.googleapis.com/youtube/v3/search?part=snippet&q=cats&fields=items%2CnextPageToken%2CprevPageToken%2CtokenPagination&maxResults=50&key=YOUR_API_KEY);

以上链接将搜索猫 (q=cats) 并获取 maxResults=50

之后,我们将每个 id 存储在一个用逗号分隔的字符串中

$get_duration="";

foreach ($JSON_Data->items as $ids) 

        $get_duration .=$ids->id->videoId.",";


$get_duration = rtrim($get_duration, ",");

最后,我们使用 $get_duration 中包含的批处理 id 进行第二次调用,并显示每个视频的标题和时长

$JSON= file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics%2Cstatus&id='.$get_duration.'&key=YOUR_API_KEY');

$JSON_Data = json_decode($JSON);

foreach ($JSON_Data->items as $ids) 

        $date = new DateTime('1970-01-01');
        $date->add(new DateInterval($ids->contentDetails->duration));
        echo "Title: ".$ids->snippet->title."\nDuration: $date->format('H:i:s')\n\n";

结果会是这样的

> Title: Cats Being Jerks Video Compilation || FailArmy 
> Duration: 00:08:33
> 
> Title: Ultimate cat vines compilation - Best cat vines 2014 / 2015
> Duration: 00:14:58
> 
> Title: Funny cats annoying owners - Cute cat compilation 
> Duration: 00:05:58
> 
> Title: Funny Cats Compilation 60 min - NEW in HD 2014 
> Duration: 00:57:51

【讨论】:

以上是关于contentDetails 或持续时间未使用 Youtube v3 api的主要内容,如果未能解决你的问题,请参考以下文章

输出音频文件未正确创建,或持续时间未知

列出播放列表项时返回持续时间?

Windows MFT(媒体基础转换)解码器未返回正确的采样时间或持续时间

pyqtgraph 轴未正确显示

如何在使用 jquery 或 JavaScript 播放视频之前或不播放视频之前获取所有视频的持续时间?

ListView 动画未正确缩放