也许我根本没有得到"它","它"是实现这项工作所需的整体设置。
我有一个网站,用于搜索体育赛事的其他网站。我想从结果中自动创建Google日历活动,因此我想在我的GMail帐户中的日历上提供我的Web应用程序读/写访问权限。
我一直试图将这个问题包围了一个星期,但是我无法让它发挥作用,它正在打击我作为开发人员的自尊心。
我理解的方式"我需要一个Google API v3服务帐户,因为我不需要特定用户的API密钥。或者我需要一个简单的API密钥(而不是oAuth)?
无论如何,我选择了服务帐户。
在我的HomeController中,我试图获取一个日历,所以我知道它一切正常。
public void Calendar()
{
string serviceAccountEmail = "...@developer.gserviceaccount.com";
var certificate = new X509Certificate2(
Server.MapPath("~") + @"\App_Data\key.p12",
"notasecret",
X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential =
new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[]
{
CalendarService.Scope.Calendar
},
User = "MY-GMAIL-EMAIL" // Is this correct?
}
.FromCertificate(certificate));
BaseClientService.Initializer initializer = new BaseClientService.Initializer();
initializer.HttpClientInitializer = credential;
initializer.ApplicationName = "CALENDAR NAME"; // Correct?
var service = new CalendarService(initializer);
var list = service.CalendarList.List().Execute().Items; // Exception :-(
}
我得到的错误:
An exception of type 'Google.Apis.Auth.OAuth2.Responses.TokenResponseException' occurred in Google.Apis.dll but was not handled in user code
Additional information: Error:"unauthorized_client", Description:"Unauthorized client or scope in request.", Uri:""
所以我在谷歌日历中尝试了很多东西,比如将其公开,将服务帐户电子邮件添加为READ / WRITE用户。
我需要做什么来授权我的Web应用程序,以便它可以代表我创建活动?
答案 0 :(得分:0)
我在类似的帖子中使用服务帐户完成了此操作。我改变了一些我的代码,并通过切换一些东西让它列出我的日历。我也可以创建活动。我没有像在初始化程序中那样添加用户,在应用程序名称下,它是开发控制台中应用程序的名称。确保为应用程序命名。确保您的帐户共享您的服务帐户。
我稍微将代码的列表部分更改为我的,并取回了我的日历列表。
var list = service.CalendarList.List();
var listex = list.Execute();
在Google API Calender v3 Event Insert via Service Account using Asp.Net MVC
上查看我的示例