我尝试使用他们的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等其他程序如何运作?
答案 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个请求。