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

求助:使用YouTube V3 API(C#)获取已搜索视频时长

获取YouTube搜索结果中视频的时长(使用YouTube Data API v3)

嗨,我明白你的需求——用NuGet的YouTube V3 API获取搜索到的视频时长对吧?你的现有代码已经能搜到视频,但问题在于Search.List接口只返回视频的基础信息(比如标题、缩略图),并不包含时长这类详细元数据。要拿到时长,我们得额外调用Videos.List接口来获取视频的contentDetails字段。

下面是修改后的完整代码,我会一步步给你说明:

步骤1:收集搜索到的视频ID

先在遍历搜索结果时,把所有视频类型的ID收集起来,这样可以批量请求,既高效又能节省API配额:

var searchListRequest = youtubeService.Search.List("snippet");
searchListRequest.Q = Find;
searchListRequest.MaxResults = 5;
var searchListResponse = await searchListRequest.ExecuteAsync();

// 收集所有视频ID
var videoIds = new List<string>();
foreach (var searchResult in searchListResponse.Items)
{
    if (searchResult.Id.Kind == "youtube#video")
    {
        videoIds.Add(searchResult.Id.VideoId);
    }
}

步骤2:调用Videos.List获取时长信息

接着用收集到的ID批量请求视频的contentDetails(这个字段里就包含时长):

if (videoIds.Any())
{
    var videosRequest = youtubeService.Videos.List("contentDetails");
    videosRequest.Id = string.Join(",", videoIds); // 用逗号分隔多个ID实现批量请求
    var videosResponse = await videosRequest.ExecuteAsync();

    foreach (var video in videosResponse.Items)
    {
        // 时长是ISO 8601格式,比如PT15M30S表示15分30秒
        string isoDuration = video.ContentDetails.Duration;
        // 可以转换成更友好的TimeSpan格式
        TimeSpan duration = XmlConvert.ToTimeSpan(isoDuration);
        Console.WriteLine($"视频ID: {video.Id},时长: {duration.ToString(@"hh\:mm\:ss")}");
    }
}

关键说明

  • 为什么要分开调用?因为YouTube的Search API为了性能,只返回最基础的搜索结果元数据,详细的视频属性(时长、分辨率、播放量等)都需要通过Videos API单独获取。
  • 批量请求:一次请求多个视频ID比逐个请求更高效,也能减少API配额的消耗。
  • 时长格式转换:ContentDetails.Duration返回的是ISO 8601标准格式,用XmlConvert.ToTimeSpan()就能轻松转换成C#的TimeSpan,再格式化成你需要的样式就行。

这样你就能顺利拿到每个搜索结果视频的时长啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:49:31