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

如何使用C#通过视频Key查询YouTube视频的时长、作者等元数据

如何用C#查询YouTube视频的元数据(时长、作者等)

嘿,我之前刚好做过类似的需求,主要有两种靠谱的方式来实现这个功能——使用官方的YouTube Data API(推荐,稳定合规),或者如果只是小规模临时查询的话,也可以尝试解析页面元数据(但这个方法不适合生产环境,原因后面说)。下面我详细拆解两种方法:

一、使用官方YouTube Data API v3(推荐方案)

这是Google官方提供的接口,能稳定获取视频的各种元数据,而且支持批量查询,完全合规。

步骤1:准备API密钥

首先你得去Google Cloud Console创建一个项目,找到「YouTube Data API v3」并启用它,然后生成一个API密钥——这个密钥是调用接口的凭证,记得别随便泄露给别人。

步骤2:安装NuGet包

在你的C#项目里安装官方的客户端库:

Install-Package Google.Apis.YouTube.v3

或者在Visual Studio的NuGet包管理器里搜索「Google.Apis.YouTube.v3」安装。

步骤3:编写查询代码

下面是一个获取单个视频元数据的示例,包含作者、标题、时长这些核心信息:

using Google.Apis.Services;
using Google.Apis.YouTube.v3;
using Google.Apis.YouTube.v3.Data;
using System.Xml; // 用于转换ISO时长格式

public async Task FetchVideoMetadata(string apiKey, string videoId)
{
    // 初始化YouTube服务
    var youtubeService = new YouTubeService(new BaseClientService.Initializer()
    {
        ApiKey = apiKey,
        ApplicationName = "你的应用名称" // 随便填个标识就行
    });

    // 创建请求,指定要获取的资源片段:snippet(含作者、标题)、contentDetails(含时长)
    var request = youtubeService.Videos.List("snippet,contentDetails");
    request.Id = videoId; // 传入你的视频Key,比如"2GnN3xLa0Js"

    // 发送请求并获取响应
    var response = await request.ExecuteAsync();
    if (response.Items.Any())
    {
        var video = response.Items.First();
        
        // 提取作者(频道名称)
        string author = video.Snippet.ChannelTitle;
        // 提取视频标题
        string title = video.Snippet.Title;
        // 提取时长(原始是ISO 8601格式,比如PT15M30S)
        string durationIso = video.ContentDetails.Duration;
        // 转换为易读的TimeSpan格式
        TimeSpan duration = XmlConvert.ToTimeSpan(durationIso);
        string formattedDuration = $"{duration.Hours:D2}:{duration.Minutes:D2}:{duration.Seconds:D2}";

        // 输出结果
        Console.WriteLine($"视频标题:{title}");
        Console.WriteLine($"作者频道:{author}");
        Console.WriteLine($"视频时长:{formattedDuration}");
    }
    else
    {
        Console.WriteLine("未找到该视频的元数据,可能视频已删除或ID有误");
    }
}

批量查询技巧

如果要查多个视频,只需要把多个视频ID用逗号分隔传给request.Id就行,比如:

request.Id = "2GnN3xLa0Js,abc123def456,xyz789";

这样一次请求就能获取多个视频的元数据,比逐个请求高效得多。

二、解析YouTube页面元数据(临时方案)

这种方法不需要API密钥,但非常不稳定——YouTube的页面结构、JS变量随时可能变化,而且频繁请求容易被反爬机制拦截,只适合临时测试用。

步骤1:安装HTML解析库

我们用HtmlAgilityPack来解析页面:

Install-Package HtmlAgilityPack

步骤2:编写解析代码

using HtmlAgilityPack;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Xml;

public async Task ScrapeVideoMetadata(string videoId)
{
    var videoUrl = $"https://www.youtube.com/watch?v={videoId}";
    using var httpClient = new HttpClient();
    
    // 模拟浏览器请求头,避免被直接拦截
    httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36");

    try
    {
        var htmlContent = await httpClient.GetStringAsync(videoUrl);
        var doc = new HtmlDocument();
        doc.LoadHtml(htmlContent);

        // 提取标题(从OG标签)
        var titleNode = doc.DocumentNode.SelectSingleNode("//meta[@property='og:title']");
        string title = titleNode?.GetAttributeValue("content", "未知标题");

        // 提取作者(从OG标签)
        var authorNode = doc.DocumentNode.SelectSingleNode("//meta[@property='og:video:actor']");
        string author = authorNode?.GetAttributeValue("content", "未知作者");

        // 提取时长(从页面的JS变量里匹配)
        var durationMatch = new Regex(@"""duration"":""([^""]+)""").Match(htmlContent);
        if (durationMatch.Success)
        {
            string durationIso = durationMatch.Groups[1].Value;
            TimeSpan duration = XmlConvert.ToTimeSpan(durationIso);
            string formattedDuration = $"{duration.Hours:D2}:{duration.Minutes:D2}:{duration.Seconds:D2}";

            Console.WriteLine($"视频标题:{title}");
            Console.WriteLine($"作者频道:{author}");
            Console.WriteLine($"视频时长:{formattedDuration}");
        }
        else
        {
            Console.WriteLine("未能解析出视频时长");
        }
    }
    catch (HttpRequestException ex)
    {
        Console.WriteLine($"请求出错:{ex.Message}");
    }
}

最后提醒

  • 生产环境一定要用官方API,解析页面的方法随时可能失效,还可能触发YouTube的反爬限制。
  • API有调用配额限制,免费额度足够小规模使用,如果需要更高配额可以付费升级。
  • 除了时长、作者,API还能获取观看量、点赞数、发布时间等更多元数据,只需要在请求时添加对应的资源片段(比如statistics)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:48:56