Youtube v3 API 字幕下载

Dan*_*lov 6 .net c# youtube-api youtube-data-api

我正在尝试使用他们的 nuget 包从 Youtube 上的一些视频下载字幕。这是一些代码:

var request = _youtube.Search.List("snippet,id");
request.Q = "Bill Gates";
request.MaxResults = 50;
request.Type = "video";
var results = request.Execute();
foreach (var result in results.Items)
{
    var captionListRequest = _youtube.Captions.List("id,snippet", result.Id.VideoId);
    var captionListResponse = captionListRequest.Execute();
    var russianCaptions =
        captionListResponse.Items.FirstOrDefault(c => c.Snippet.Language.ToLower() == "ru");
    if (russianCaptions != null)
    {
        var downloadRequest = _youtube.Captions.Download(russianCaptions.Id);
        downloadRequest.Tfmt = CaptionsResource.DownloadRequest.TfmtEnum.Srt;
        var ms = new MemoryStream();
        downloadRequest.Download(ms);
    }
}
Run Code Online (Sandbox Code Playgroud)

当 Download 方法被调用时,我收到一个奇怪的 Newtonsoft.JSON 异常,它说:

    Newtonsoft.Json.JsonReaderException: 'Unexpected character encountered while parsing value: T. Path '', line 0, position 0.'
   at Newtonsoft.Json.JsonTextReader.ParseValue()
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一些关于字幕下载问题的其他线程,并尝试更改我的授权工作流程:首先我尝试仅使用 ApiKey,然后还尝试了 OAuth。这是它现在的样子:

 var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
    new ClientSecrets
    {
        ClientId = "CLIENT_ID",
        ClientSecret = "CLIENT_SECRET"
    },
    new[] { YouTubeService.Scope.YoutubeForceSsl },
    "user",
    CancellationToken.None,
    new FileDataStore("Youtube.CaptionsCrawler")).Result;

_youtube = new YouTubeService(new BaseClientService.Initializer
{
    ApplicationName = "LKS Captions downloader",
    HttpClientInitializer = credential
});
Run Code Online (Sandbox Code Playgroud)

那么,甚至有可能做我想要实现的目标吗?

PS 我能够深入研究 youtube nuget 包,正如我所看到的,我得到的实际消息(Newtonsoft.JSON 正在尝试反序列化,呵呵!)是“与请求相关的权限不足以下载字幕轨道。请求可能没有得到正确授权,或者视频订单可能没有为此字幕启用第三方贡献。

那么,我必须是视频所有者才能下载字幕吗?但如果是这样,像Google2SRT这样的其他程序是如何工作的?

Jan*_* S. 3

找到这篇文章How to get "transcript" in youtube-api v3

您可以通过 GET 请求获取它们:http://video.google.com/timedtext?lang={LANG}&v={VIDEOID}

示例: http: //video.google.com/timedtext ?lang=en&v=-osCkzoL53U

请注意,它们应该添加字幕,如果自动生成则不起作用。