我正在运行一个没有UI的过程,从youtube检索上传的视频。在开发机器上,它代表用户进行身份验证并工作。
问题是当进程在服务器上运行时:浏览器窗口不会触发用户让使用他的帐户(它应该只需要这样做一次)。
事件查看器没有显示任何错误。服务帐户似乎不工作与youtube,与API密钥是太少的权限和宣誓是认证和播放视频的唯一途径。还是我错了?
所以问题是:如何运行一个服务作为一个单一的用户和检索他的视频没有UI?
private async Task Run()
{
try
{
UserCredential credential;
using (var stream = new FileStream(StartPath + "\client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeReadonly, YouTubeService.Scope.Youtube },
"user",
CancellationToken.None,
new FileDataStore("Store")
);
}
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = this.GetType().ToString()
});
....
}
我也试过了:
String serviceAccountEmail = "e-mail";
var certificate = new X509Certificate2(HostingEnvironment.MapPath("~/Content/key.p12"), "notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { YouTubeService.Scope.Youtube, YouTubeService.Scope.YoutubepartnerChannelAudit, YouTubeService.Scope.YoutubeUpload }
}.FromCertificate(certificate));
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "api",
});
YouTube Data API允许您将通常在YouTube网站上执行的功能合并到您自己的网站或应用程序中。下面的列表列出了可以使用API检索的不同类型的资源。该API还支持插入、更新或删除这些资源的方法。
这个参考指南解释了如何使用API来执行所有这些操作。该指南是按资源类型组织的。资源表示一种类型的项目,它包含YouTube体验的一部分,例如视频、播放列表或订阅。对于每种资源类型,指南列出了一个或多个数据表示形式,资源表示为JSON对象。该指南还为每种资源类型列出了一个或多个支持的方法(LIST, POST, DELETE, etc.)
,并解释了如何在应用程序中使用这些方法。
以下要求适用于YouTube Data API请求:
-
每个请求必须指定API密钥(带有key参数)或提供OAuth 2.0令牌。您的API密钥可在开发控制台的API Access窗格中为您的项目使用。
-
您必须为每个插入、更新和删除请求发送授权令牌。您还必须为检索已验证用户的私有数据的任何请求发送授权令牌。
此外,一些用于检索资源的API方法可能支持需要授权的参数,或者在授权请求时可能包含额外的元数据。例如,如果请求得到特定用户的授权,则检索用户上传的视频的请求也可能包含私有视频。
-
API支持OAuth 2.0认证协议。您可以通过以下两种方式提供OAuth 2.0令牌:
-
使用
access_token
查询参数如下:?access_token=oauth2-token
- 使用HTTP
Authorization
标头如下:Authorization: Bearer oauth2-token
在认证指南中可以找到在应用程序中实现OAuth 2.0认证的完整说明。
所以我通过创建控制台应用程序来解决这种情况。身份验证机制转移到控制台应用程序,并将结果传递给服务。在一个服务中,每n秒调用一次该应用程序。这个解决方案非常有效。虽然很丑,但很管用。现在我可以让应用程序访问配置文件数据,并在我想要的地方使用它。如果有人有更好的解决方案,我很乐意阅读。