1

YouTube API v3 ( https://developers.google.com/youtube/v3/docs/captions/download ) と公式の .NET SDK nuget パッケージ ( https://www.nuget. org/packages/Google.Apis.YouTube.v3/、バージョン 1.9.0.1360)。

返されるストリームには、次のテキストが含まれます。

「OAuth トークンがクエリ文字列で受信されました。この API は、JSON または XML 以外の応答形式ではこれを禁止しています。可能であれば、代わりに Authorization ヘッダーで OAuth トークンを送信してみてください。」

YouTube.com UI から手動でアップロードして検証した 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 にヘッダーを設定する方法が見つからないようです。手動で行うべきではないと思います。DownloadRequest (または 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 で他のキャプション関連のメソッドを使用していますが、「ダウンロード」だけが問題を抱えています。

4

1 に答える 1

1

ユーザー資格情報なしでサービスを初期化しました (API キーのみを使用しました)。開発者ガイドのサンプルの 1 つを見てください(そして、正しいフローを選択してください... インストール済みのアプリケーション、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 リクエスト自体の追加ヘッダーとして含まれます。

于 2015-05-13T14:07:18.063 に答える