You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YouTube API调用时如何同时使用snippet和contentDetails参数

YouTube API 同时获取视频基础信息、时长、频道头像的正确实现方式

核心问题原因

gapi.client.youtube.search.list 接口本身的设计就不支持返回contentDetails字段,你就算在part参数里加上该字段也不会返回对应数据,这是API的固有约束,不是传参格式的问题。

正确实现步骤

  • 第一步:先调用search.list接口,part参数仅保留snippet即可,获取返回结果中所有视频的id.videoId,将所有ID拼接为逗号分隔的字符串
  • 第二步:调用gapi.client.youtube.videos.list接口,设置part为snippet,contentDetails,把第一步拿到的ID字符串传给id参数,该接口会返回你需要的核心字段:
    • 视频时长:在返回结果的contentDetails.duration字段中,为ISO 8601时间格式,比如PT1M30S就代表1分30秒,可自行转换为常规时分秒格式
    • 频道ID:在返回结果的snippet.channelId字段中,用该ID调用channels.list接口,part设置为snippet即可获取频道头像信息

修改后的代码示例

$(function(){
  $("#formen").on("submit",function(e){
    e.preventDefault(); 
    $("#result").html('');
    var request = gapi.client.youtube.search.list({
      order: "viewCount",
      part: "snippet",
      type: "video",   
      q: encodeURIComponent($("#search").val()).replace(/%20/g, "+"), 
      maxResults: 15
    });

    request.execute(function(searchResponse) { 
      // 收集所有视频ID
      const videoIds = searchResponse.result.items.map(item => item.id.videoId).join(',');
      // 调用videos接口获取时长等额外字段
      const videoRequest = gapi.client.youtube.videos.list({
        part: "snippet,contentDetails",
        id: videoIds
      });
      
      videoRequest.execute(function(videoResponse) {
        const videoItems = videoResponse.result.items;
        $.each(videoItems, function(index, item) { 
          $.get("item.php", function(data) {  
            $("#result").append(tplawesome(data, [{
              "title": item.snippet.title, 
              "yturl": item.snippet.thumbnails.high.url, 
              "videoid": item.id, 
              "channelTitle": item.snippet.channelTitle,
              "duration": item.contentDetails.duration, // 新增视频时长字段
              "channelId": item.snippet.channelId // 如需频道头像可拿该ID再查询channels接口
            }])); 
          });
        });
      });
    });
  });
});

补充说明

  • 你之前写的part: "snippet, contentDetails"里逗号后的空格不影响参数解析,不是问题根源
  • 批量传ID调用videos.list仅消耗1个API配额,和单条查询消耗一致,不会额外增加配额开销

内容的提问来源于stack exchange,提问作者Furious Mountain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:36:05