C#MVC使用v3 API将视频上传到YouTube而不使用OAuth?

时间:2017-08-24 08:42:18

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

我希望我的用户能够在MY YouTube帐户下将视频上传到我的YouTube频道。因此,我并不想或不需要他们自己验证(OAuth)。

我在这里看过这些例子:https://developers.google.com/youtube/v3/code_samples/dotnet

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

感谢。

更新

嗯......我甚至不确定我所做的事情是否正确......但这就是我所做的:

去我的项目的凭证: https://console.developers.google.com/apis/credentials

创建了2个OAuth credenials - 一个是Web Application,另一个是Other。我为这些下载了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包

我添加了这个:

// 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. 代码永远不会返回View等待videosInsertRequest.UploadAsync();而且似乎挂了....更新 - 修正。见这里:https://www.codeproject.com/Questions/1087360/Youtube-data-API-for-uploading-videos-not-working

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

  3. 我不知道我是否仍然这样做。
  4. 还有什么建议吗?我仍然很难相信没有人能够像我所追求的那样。我无法相信用户......将视频上传到我的网络服务器.....然后上传到我自己的频道是如此困难!!

2 个答案:

答案 0 :(得分:0)

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

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

对于所有写入操作(例如上传视频),都需要proper authentication via OAuth 2.0。因此,没有教程显示如何使用API​​密钥上传。

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

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

您在代码中使用API​​密钥和OAuth客户端ID /秘密的方式保持完全相同。 Google刚刚更改了您在云端控制台中创建和限制密钥访问权限的方式。

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

编辑:澄清工作流程

  1. 您设置了云控制台项目和OAuth客户端ID。
  2. 您允许应用程序将视频上​​传到您的频道。您的应用程序将收到令牌(访问令牌和刷新令牌)。
  3. 您应用的用户将其视频上传到您的应用服务器。
  4. 您的应用程序会获取用户的视频(现在位于您的服务器上)和步骤2中的令牌,并使用这些令牌将视频上传到YouTube。

答案 1 :(得分:0)

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

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

至于你的“禁播”视频。如果视频上传为“不公开”,则在您导航至Creator Studio -> Videos列表

之前,该视频不会显示