【发布时间】:2018-02-25 14:42:43
【问题描述】:
我正在尝试使用他们的 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
});
那么,是否有可能实现我想要实现的目标?
附:我能够深入挖掘 youtube nuget 包,如我所见,我得到的实际消息(Newtonsoft.JSON 正在尝试反序列化,呵呵!)是“与请求相关的权限不够下载字幕轨道。该请求可能未得到正确授权,或者视频订单可能未启用第三方对此字幕的贡献。"
那么,我必须是视频所有者才能下载字幕吗?但如果是这样,其他程序如Google2SRT 是如何工作的?
【问题讨论】:
-
这个 Parse 方法被称为 INSIDE google 的 nuget 包,所以我们对此无能为力。但真正的问题是字幕没有正确下载。
-
我的问题是将 CC 变成一个字符串。
标签: c# .net youtube-api youtube-data-api