【问题标题】:C# MVC Upload Video to YouTube using v3 API without OAuth?C# MVC 在没有 OAuth 的情况下使用 v3 API 将视频上传到 YouTube?
【发布时间】:2018-02-02 01:22:27
【问题描述】:

我希望我的用户能够将视频上传到我的 YouTube 帐户下的我的 YouTube 频道。因此,我真的不希望或不需要他们以自己的身份进行身份验证 (OAuth)。

我在这里看到了示例:https://developers.google.com/youtube/v3/code_samples/dotnet

我发现的所有代码示例似乎都使用 OAuth 和客户端密码进行身份验证。任何人都可以指出一个很好的教程/示例的方向,我可以将视频上传到我的频道作为我自己(使用 API 密钥?)?

谢谢。

更新

嗯....我什至不确定我所做的是否正确....但这是我所做的:

进入我的项目的凭据: https://console.developers.google.com/apis/credentials

创建了 2 个 OAuth 凭证 - 一个是 Web 应用程序,一个是其他。我为这些下载了 JSON 并将它们添加到我的项目中,以便我可以测试每一个。

我在这里启用了 YouTube 数据 API: https://console.developers.google.com/apis/api/youtube.googleapis.com/overview

我主要从这里获取 .Net 上传示例: https://developers.google.com/youtube/v3/code_samples/dotnet

我还为 YouTube API v3 安装了 Nuget 包

在“var youtubeService =...”之前我添加了这个:

// This bit checks if the token is out of date, 
        // and refreshes the access token using the refresh token.
        if (credential.Token.IsExpired(SystemClock.Default))
        {
            if (!await credential.RefreshTokenAsync(CancellationToken.None))
            {
                Console.WriteLine("No valid refresh token.");
            }
        }       

还创建了以下类 - 再次,我从另一个 StackOverflow 帖子中获得它 - 目的是创建离线访问令牌??

 public class OfflineAccessGoogleAuthorizationCodeFlow : GoogleAuthorizationCodeFlow
{
    public OfflineAccessGoogleAuthorizationCodeFlow(GoogleAuthorizationCodeFlow.Initializer initializer) : base(initializer) { }

    public override AuthorizationCodeRequestUrl CreateAuthorizationCodeRequest(string redirectUri)
    {
        return new GoogleAuthorizationCodeRequestUrl(new Uri(AuthorizationServerUrl))
        {
            ClientId = ClientSecrets.ClientId,
            Scope = string.Join(" ", Scopes),
            RedirectUri = redirectUri,
            AccessType = "offline",
            ApprovalPrompt = "force"
        };
    }
}

所以我已经对其进行了测试,但是上传最终“似乎”可以正常工作:

  1. 代码永远不会从 await videosInsertRequest.UploadAsync() 返回到视图;并且似乎挂起....更新 - 已修复。见这里:https://www.codeproject.com/Questions/1087360/Youtube-data-API-for-uploading-videos-not-working

  2. 该视频实际上从未出现在我的频道中 - 我感觉 YouTube 甚至在它上传之前就禁止了它? (这只是一个测试视频 - 没什么险恶的 - 这可能是为什么?)

  3. 我不知道我是否还在做这件事。

还有什么建议吗?我仍然很难相信没有人有我所追求的工作示例。我不敢相信一个用户......上传视频到我的网络服务器......然后上传到我自己的频道是如此困难!

【问题讨论】:

  • 让用户将视频发送到您的网络应用程序,然后从那里使用 oauth 将其上传到您的帐户。
  • OAuth 是否需要我手动进行身份验证?我不希望我的任何手动干预将其上传到 YouTube....
  • 我不确定该链接有何帮助?我已经创建了一个 API 密钥和一个 OAuth ID。我真的想将我的用户上传的视频上传到我自己的频道 - 因此我不明白为什么我需要使用 OAuth 而不是 API 密钥?没有使用 API 密钥的示例吗?
  • 我从这里获得了一段不错的代码:stackoverflow.com/a/27691403/4181058 但我认为获取长期刷新密钥的方法已经改变。 “已安装的应用程序”似乎不再存在....

标签: c# .net asp.net-mvc-5 youtube-api youtube-data-api


【解决方案1】:

首先:无法使用 API 密钥上传视频。

从技术角度来看,API 密钥并不与特定的 YouTube 频道相关联,而是与 Google Cloud Console 项目相关联。这意味着即使 YouTube 允许 API 密钥作为上传视频的身份验证,他们也不知道要上传到哪个频道。

对于所有写入操作(例如上传视频),proper authentication via OAuth 2.0 是必需的。因此,没有说明如何使用 API 密钥上传的教程。

正如@Gusman 所说,您需要让您的用户上传到您的服务器,然后您的服务器使用 OAuth 凭据上传到 YouTube。

关于“'已安装的应用程序'似乎不再存在......”:

您在代码中使用 API 密钥和 OAuth 客户端 ID/秘密的方式完全相同。 Google 刚刚更改了您在 Cloud Console 中创建和限制对密钥的访问的方式。

我鼓励您熟悉server-side apps that use the YouTube API 的概念。

编辑:澄清工作流程

  1. 您设置了一个 Cloud Console 项目和一个 OAuth 客户端 ID。
  2. 您允许您的应用程序将视频上​​传到您的频道。您的应用将因此收到令牌(访问令牌和刷新令牌)。
  3. 您的应用程序的用户将他们的视频上传到您的应用程序服务器。
  4. 您的应用程序从第 2 步获取用户的视频(现在在您的本地服务器上)和令牌,并使用这些令牌将视频上传到 YouTube。

【讨论】:

  • 好的,OAuth 就是这样。我正在努力的部分是我不需要用户 OAuth 或用户许可/同意。我只想以自动方式将他们的视频上传到我的频道。
  • 从我在您的链接中看到的内容中,我看到了“第 3 步:Google 提示用户同意”之类的内容......我不想要这个。
  • 好吧,在这种情况下,您是必须同意的用户,因为您的应用程序想要访问您的频道。您的应用程序的用户不必针对 YouTube API 进行授权。
【解决方案2】:

您必须使用 oAuth,但您要跳过的是用户身份验证步骤。 见this SO answer here

您需要获取刷新令牌并将其与 OAuth 密钥和秘密一起存储在您的代码中。

至于您的“禁止”视频。如果视频以“未列出”的形式上传,则在您导航到 Creator Studio -> Videos 列表之前它不会显示

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 2011-07-10
    • 2021-11-23
    • 2018-09-09
    • 2017-10-07
    • 2012-12-23
    • 1970-01-01
    • 2018-01-29
    • 2014-07-07
    相关资源
    最近更新 更多