contentDetails或持续时间不会使用Youtube v3 api

Ata*_*CSE 5 youtube google-api youtube-api gdata youtube-javascript-api

看看这个链接,给出了一个例子

https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
 &part=snippet,contentDetails,statistics,status
Run Code Online (Sandbox Code Playgroud)

部分回应是

"contentDetails": {
    "duration": "PT15M51S",
    "aspectRatio": "RATIO_16_9"
   },
Run Code Online (Sandbox Code Playgroud)

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

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

表明

{
error: {
errors: [
{
domain: "youtube.part",
reason: "unknownPart",
message: "contentDetails",
locationType: "parameter",
location: "part"
}
],
code: 400,
message: "contentDetails"
}
}
Run Code Online (Sandbox Code Playgroud)

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

joh*_*h10 24

正如您已经发现的那样,Search:list调用不支持part参数的contentDetails.

您可以在Search:列表的参数值中包含的部件名称是id和snippet,并且那些返回非常少的数据.如果我们想要获得有关视频或视频的更具体数据,我们应该使用来自搜索的非常少的数据.

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

GET https://www.googleapis.com/youtube/v3/search?part=id&q=anything&key={YOUR_API_KEY}
Run Code Online (Sandbox Code Playgroud)

并从响应项中提取videoId

"id": {
"kind": "youtube#video",
"videoId": "5hzgS9s-tE8"
}
Run Code Online (Sandbox Code Playgroud)

并使用它来进行视频:列表调用以获取更具体的数据

https://www.googleapis.com/youtube/v3/videos?id=5hzgS9s-tE8&key=YOUR_API_KEY&part=snippet,contentDetails,statistics,status
Run Code Online (Sandbox Code Playgroud)

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

 "contentDetails": {
 "duration": "PT15M51S",
 "aspectRatio": "RATIO_16_9"
 },
Run Code Online (Sandbox Code Playgroud)

  • 真!!因此,对于100个视频列表,我需要向youtube api发送100个请求!现在那太傻了...... (2认同)
  • 不,您实际上可以一次批量拨打多达50个视频. (2认同)
  • 但它仍然无法阻止第二次通话!真的很蠢. (2认同)

小智 6

第1步:您使用搜索列表视频ID :列表
例如,您收到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} 
Run Code Online (Sandbox Code Playgroud)

因此,您无需为每个视频拨打电话
.结果将是:

{
 "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
   }
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

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