Home Articles

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

Asked
Viewed 1206 times
-1

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

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

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

谢谢 .

UPDATE

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

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

创建了2个OAuth credenials - 一个是Web应用程序,另一个是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包

在“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"
        };
    }
}

所以我已经对它进行了测试,然而上传最终似乎“正常”起作用了:

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

2 Answers

  • 0

    首先: It is impossible to upload videos with API keys.

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

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

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

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

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

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

    EDIT: to clarify the workflow

    • 您设置了 Cloud 控制台项目和OAuth客户端ID .

    • 您允许应用程序将视频上传到您的 Channels . 您的应用程序将收到令牌(访问令牌和刷新令牌) .

    • 您的应用程序的用户将他们的视频上传到您的应用程序服务器 .

    • 您的应用程序会获取用户的视频(现在位于您的服务器上)和步骤2中的令牌,并使用这些令牌将视频上传到YouTube .

  • 0

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

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

    至于你的"banned"视频 . 如果视频上传为'unlisted',则在您导航到Creator Studio -> Videos列表之前,它不会显示

Related