未使用Youtube v3 api提供内容详细信息或持续时间

未使用Youtube v3 api提供内容详细信息或持续时间,youtube,google-api,youtube-api,gdata,youtube-javascript-api,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 部分回应是 "contentDetails": { "duration": "PT15M51S", "aspectRatio": "RATIO_16_9" }, 现在我想检索cont

看看这个,这里有一个例子

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"
}
}

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

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

可以包含在Search:list的参数值中的零件名称是id和snippet,它们返回的数据很少。如果我们想在一个或多个视频中获得更具体的数据,我们应该使用搜索中的少量数据

因此,要在搜索时获得视频持续时间,您必须拨打以下电话

GET https://www.googleapis.com/youtube/v3/search?part=id&q=anything&key={YOUR_API_KEY}
并从响应项中提取videoId

"id": {
"kind": "youtube#video",
"videoId": "5hzgS9s-tE8"
}
并使用它制作视频:列表调用以获取更具体的数据

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"
 },

使用上面的链接,这里有一个快速的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\u 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

步骤1:使用
例如,您收到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} 
因此,您不必为每个视频拨打电话
结果将是:

{
“种类”:“youtube#videoListResponse”,
“etag”:“iDqJ1j7zKs4x3o3ZsFlBOwgWAHU/p3KyUGr7ZRowLgKTqVFixrx7 mQ\”,
“页面信息”:{
“总体结果”:3,
“结果每页”:3
},
“项目”:[
{
“种类”:“youtube视频”,
“etag”:“iDqJ1j7zKs4x3o3ZsFlBOwgWAHU/PSAHG0BXV1IFKWXHRPMV223YE”,
“id”:“zOYW7FO9rzA”,
“内容详细信息”:{
“持续时间”:“PT1M21S”,
“维度”:“2d”,
“定义”:“hd”,
“标题”:“假”,
“许可内容”:错误
}
},
{
“种类”:“youtube视频”,
“etag”:“iDqJ1j7zKs4x3o3ZsFlBOwgWAHU/YCI772ABPZPUAFCI702RE55TU”,
“id”:“T3Ysb9O3EWI”,
“内容详细信息”:{
“持续时间”:“PT1H28M47S”,
“维度”:“2d”,
“定义”:“hd”,
“标题”:“假”,
“许可内容”:错误
}
},
{
“种类”:“youtube视频”,
“etag”:“iDqJ1j7zKs4x3o3ZsFlBOwgWAHU/2BNWERQKYSQUERSANRYD1FGGJES\”,
“id”:“-VH2E30S”,
“内容详细信息”:{
“持续时间”:“PT12M57S”,
“维度”:“2d”,
“定义”:“hd”,
“标题”:“假”,
“许可内容”:错误
}
}
]

}
真的!!所以对于100个视频列表,我需要向youtube api发送100个请求!!!!现在这太傻了……不,你实际上可以一次批量调用多达50个视频。我仍在努力获取
contentDetails
统计数据的值。我在上为此创建了一个堆栈溢出问题: