YouTube V3 API字幕使用SDK Nuget软件包下载



我正在尝试使用YouTube API V3(https://developers.google.com/youtube/v3/docs/captions/captions/download)和官方.NET .NET SDK下载标题轨道Nuget软件包(https://www.nuget.org/packages/google.apis.youtube.v3/,版本1.9.0.1360)。

返回的流包含以下文本:

"在查询字符串中收到了OAuth令牌,此API禁止该响应格式以JSON或XML以外的其他响应格式。

而不是我刚刚通过youtube.com上载和验证的SRT纯文本内容。

我发现了错误的类型:lockeddomainCreationFailure

我的代码:

    ...
        _service = new YTApi.YouTubeService(new BaseClientService.Initializer {
            ApplicationName = config.AppName,
            ApiKey = config.DeveloperKey
        });
    ...
    public Stream CaptionsDownload(
        string accessToken,
        string trackId
        )
    {
        var request = _service.Captions.Download(trackId);
        request.OauthToken = accessToken;
        request.Tfmt = YTApi.CaptionsResource.DownloadRequest.TfmtEnum.Srt;
        var trackStream = new MemoryStream();
        request.Download(trackStream);
        trackStream.Position = 0;
        return trackStream;
    }

我似乎找不到在_service.httpclient上设置任何标头的方法,我想我不应该手动这样做。我希望下载request(或youtubebaseservicerequest)将放置

/// <summary>
/// OAuth 2.0 token for the current user.
/// </summary>
[RequestParameter("oauth_token", RequestParameterType.Query)]
public virtual string OauthToken { get; set; }

进入正确的授权标题。我看不到这在1.9.0.1360版本中实现。

也许我忽略了什么?任何帮助都非常感谢。

注意:我在此SDK中使用其他与字幕相关的方法,而"下载"是我唯一遇到麻烦的方法。

您在没有用户凭据的情况下初始化了服务(您只使用了API键)。在我们的开发人员指南中的一个样本中查看(并选择正确的流...您是否使用已安装的应用程序,Windows Phone等?)

您将不得不更改创建服务的方式来执行以下操作:

        UserCredential credential;
        using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
        {
            credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                new[] { YoutubeService.Scope.<THE_RIGHT_SCOPE_HERE> },
                "user", CancellationToken.None);
        }
        // Create the service.
        _service = new YouTubeService(new BaseClientService.Initializer {
        ApplicationName = config.AppName,
                HttpClientInitializer = credential,
                ApplicationName = "Books API Sample",
            });

然后,对于YouTube服务的每个请求,您的OAuth访问令牌将作为HTTP请求本身的附加标题包括在内。

相关内容

  • 没有找到相关文章

最新更新