我希望我的用户能够在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"
};
}
}
所以我已经对它进行了测试,然而上传最终似乎“正常”起作用了:
-
代码永远不会返回View等待videosInsertRequest.UploadAsync();而且似乎挂了....更新 - 修正 . 看这里:https://www.codeproject.com/Questions/1087360/Youtube-data-API-for-uploading-videos-not-working
-
视频从未真正出现在我的 Channels 中 - 我有一种感觉YouTube甚至在上传之前禁止它? (这只是一个测试视频 - 没什么可恶的 - 这可能是为什么?)
-
我不知道我是否仍然这样做 .
还有什么建议吗?我仍然很难相信没有人能够像我所追求的那样 . 我无法相信用户......将视频上传到我的网络服务器.....然后上传到我自己的 Channels 是如此困难!
2 回答
首先: 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 .
您必须使用oAuth,但您要跳过的是用户身份验证步骤 . 见this SO answer here
您需要获取刷新令牌并将其与OAuth密钥和密钥一起存储在您的代码中 .
至于你的"banned"视频 . 如果视频上传为'unlisted',则在您导航到Creator Studio -> Videos列表之前,它不会显示