我想知道如何获取与链接日历关联的电子邮件地址
I would like to know how to get the email address associated with the linked calendar
我正在开发的应用程序是 google 日历 api,它执行 google 日历集成。
我想获取与链接日历关联的电子邮件地址,但我无法通过查看以下内容来弄清楚如何做到这一点 url。
https://developers.google.com/calendar/api/v3/reference/calendars
日历没有电子邮件地址。他们有日历 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 此方法将为您 return 日历的所有规则
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.');
}
});
}
正如@DalmTo 所说Google 日历与不对应电子邮件地址的 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})
文档
我正在开发的应用程序是 google 日历 api,它执行 google 日历集成。
我想获取与链接日历关联的电子邮件地址,但我无法通过查看以下内容来弄清楚如何做到这一点 url。
https://developers.google.com/calendar/api/v3/reference/calendars
日历没有电子邮件地址。他们有日历 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 此方法将为您 return 日历的所有规则
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.');
}
});
}
正如@DalmTo 所说Google 日历与不对应电子邮件地址的 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})