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 个视频。 我仍在努力获取contentDetails
和 statistics
的值。我在这里为此创建了一个堆栈溢出问题:***.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(媒体基础转换)解码器未返回正确的采样时间或持续时间