【问题标题】:contentDetails or duration not coming using Youtube v3 apicontentDetails 或持续时间未使用 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"
}
}

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

【问题讨论】:

    标签: youtube google-api youtube-api gdata youtube-javascript-api


    【解决方案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 的值。我在这里为此创建了一个堆栈溢出问题:stackoverflow.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
      

      【讨论】:

        猜你喜欢
        • 2015-08-24
        • 2016-06-01
        • 1970-01-01
        • 2015-12-07
        • 2013-08-10
        • 2013-05-24
        • 2014-08-15
        • 2014-03-06
        • 2016-06-06
        相关资源
        最近更新 更多