Youtube v3 API标题下载

时间:2017-09-16 16:18:12

标签: c# .net 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);
    }
}

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

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

我已经阅读了有关下载问题的标题的其他一些主题,并尝试更改我的授权工作流程:首先,我尝试仅使用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
});

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

P.S。我能够深入挖掘youtube nuget包,正如我所看到的,我得到的实际消息(Newtonsoft.JSON试图反序列化,呵呵!)是" 与请求关联的权限不足以下载字幕轨道。该请求可能未获得适当授权,或者视频订单可能未启用此标题的第三方贡献。"

那么,我是否必须成为视频所有者才能下载字幕?但如果是这样,Google2SRT等其他程序如何运作?

2 个答案:

答案 0 :(得分:0)

发现这篇文章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

请注意,他们应该添加字幕,如果自动生成则无效。

答案 1 :(得分:-2)

这是一个古老的问题,但对于试图实现相同目标的任何人-

我创建了此API,可让您从YouTube获取自动生成的内容和人工生成的内容。

https://rapidapi.com/yashagarwal/api/subtitles-for-youtube

您还可以每天免费使用100个请求。