嗨我是深夜黑客并测试google api客户端的Ruby。
我可能因错误理解而陷入错误。
我已经完成了什么
我正在采取行动:
我正试图从私人共享的日历中获取元数据(稍后我会尝试事件),我在谷歌应用程序中读取权限(通过一个组)在Ruby上的工作帐户服务auth < / p>
我是如何选择这样做的
使用此代码:
require 'google/api_client'
require 'pp'
client = Google::APIClient.new
cal = client.discovered_api('calendar','v3')
id = 'xxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com' # id is the confirmed calendar ID
key = Google::APIClient::KeyUtils.load_from_pkcs12('sl.p12', 'notasecret')
client.authorization = Signet::OAuth2::Client.new(
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
:audience => 'https://accounts.google.com/o/oauth2/token',
:scope => 'https://www.googleapis.com/auth/calendar',
:issuer => 'xxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com', # confirmed issuer
:signing_key => key
)
client.authorization.fetch_access_token!
result = client.execute(
:api_method => cal.calendars.get,
:parameters => { 'calendarId' => id }
)
puts result.response.body
pp result
结果
当我这样做时,你得到一个404,类似于&#34;日历不存在&#34;
{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "Not Found"
}
],
"code": 404,
"message": "Not Found"
}
}
但是,如果我更改了每个&#39;
的ID我明白了:
{
"kind": "calendar#calendar",
"etag": "\"dAAhx6wYoPw2vqRAe54lk5wa0XQ/WEglF6_c5pVHKyggcENvvX1cS9g\"",
"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com", #same as issuer id ??? WTF
"summary": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",
"timeZone": "UTC"
}
这似乎是一个日历,但它类似于&#34;电子邮件发行商的默认日历&#34;出现在服务器密钥中的帐户&#34; email&#34;字段
我还尝试将:person = 'email'
字段添加到client.authorization
但是我在创建身份验证令时出错
我无法找到一种方法来访问api,因为其他邮件帐户与@ developer.gserviceaccount.com不同,所以我做错了什么?
答案 0 :(得分:1)
您可以与服务帐户的电子邮件共享日历,也可以点击these steps以允许服务帐户模拟该域中的任何用户,在这种情况下,您必须传递:person => 'email'
参数。< / p>