我想知道如何获取与链接日历关联的电子邮件地址
Posted
技术标签:
【中文标题】我想知道如何获取与链接日历关联的电子邮件地址【英文标题】:I would like to know how to get the email address associated with the linked calendar 【发布时间】:2021-12-28 03:59:09 【问题描述】:我正在开发的应用程序是一个谷歌日历 api,它可以集成谷歌日历。
我想获取与链接日历关联的电子邮件地址,但我无法通过查看以下 url 弄清楚如何做到这一点。
https://developers.google.com/calendar/api/v3/reference/calendars
【问题讨论】:
【参考方案1】:日历没有电子邮件地址。他们有日历 id,例如这是一个日历 id
v205qep4g260mm7fgq8vtgp18@group.calendar.google.com
它可能看起来像一个电子邮件地址,但实际上不是。您不能在那里发送电子邮件,因为它不是电子邮件地址。
如果您在主日历上执行 calendar.get
curl \ 'https://www.googleapis.com/calendar/v3/calendars/pramary?key=[YOUR_API_KEY]' \
--header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
--header 'Accept: application/json' \
--compressed
该日历的日历 ID 实际上是当前经过身份验证的用户的电子邮件地址
"kind": "calendar#calendar",
"etag": "\"j32ipQvsbvz0_YlxYi3Ml2Fd7A\"",
"id": "xxxxx@gmail.com",
"summary": "Linda Lawton ",
"description": "test",
"timeZone": "Europe/Copenhagen",
"conferenceProperties":
"allowedConferenceSolutionTypes": [
"hangoutsMeet"
]
但这不适用于其他日历,上面的日历是我的家庭清洁日历。
如果您实际尝试获取日历所有者的电子邮件地址,那么您应该使用acl.list 此方法将返回给您日历的所有规则
curl \
'https://www.googleapis.com/calendar/v3/calendars/p4g260mm7fgq8vtgp18%40group.calendar.google.com/acl?key=[YOUR_API_KEY]' \
--header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
--header 'Accept: application/json' \
--compressed
其中一个规则是所有者的电子邮件
"kind": "calendar#aclRule",
"etag": "\"00001501683456631000\"",
"id": "user:XXXXX@gmail.com",
"scope":
"type": "user",
"value": "XXXXX@gmail.com"
,
"role": "owner"
,
我稍微修改了node quickstart 来展示如何使用这个方法
/**
* Lists the next 10 events on the user's primary calendar.
* @param google.auth.OAuth2 auth An authorized OAuth2 client.
*/
function listEvents(auth)
const calendar = google.calendar(version: 'v3', auth);
calendar.acl.list(
calendarId: 'primary',
, (err, res) =>
if (err) return console.log('The API returned an error: ' + err);
const rules = res.data.items;
if (rules .length)
rules .map((rule, i) =>
console.log(`User $rule.id with the role $rule.role`)
);
else
console.log('No upcoming rules found.');
);
【讨论】:
【参考方案2】:正如@DalmTo 所说,谷歌日历与一个不对应于电子邮件地址的 ID 相关联,除非是您的主日历。
作为 @DalmTo 在 ACL 上提供的 NodeJS 实现:
async function getCalendarACL(auth)
// call the service
const calendar = google.calendar( version: 'v3', auth );
console.log(Object.keys(calendar))
// get all the calendars in the current user
let res = await calendar.calendarList.list()
let calendars = await res.data.items
for (let calendar_i of calendars)
let calendar_acl = await calendar.acl.list( calendarId: calendar_i.id )
let acl_rules = await calendar_acl.data.items
console.log(`Calendar $calendar_i.id`)
for (rule of acl_rules)
console.log(`User $rule.id with the role $rule.role`)
如果您在scope.type
字段中获得group
,则需要使用Directory API,以获取具有访问权限的用户的电子邮件。
const directory = google.admin(version: 'directory_v1', auth);
const usersInGroup = await directory.members.list(groupKey:groupID)
文档
Members Resource Calendar API Reference NodeJS Calendar API Reference【讨论】:
以上是关于我想知道如何获取与链接日历关联的电子邮件地址的主要内容,如果未能解决你的问题,请参考以下文章
无论如何要获取与 UWP 中的购买相关联的 Microsoft Store 帐户电子邮件地址吗?