如何使用Google Python API编辑副本日历

2 投票
2 回答
1404 浏览
提问于 2025-04-16 10:39

我想知道是否可以通过谷歌的API在副日历中创建和删除事件。我已经很清楚如何在主日历中做到这一点,所以我只是想问,如何更改calendar_service以便读取和写入其他日历。
我尝试用副日历的邮箱登录,但出现了BadAuthentication Error错误,这样是无法登录的。URL肯定是正确的,因为API可以读取。
期待你的帮助。

2 个回答

0

我也遇到了同样的问题,不过我找到了解决办法(我不记得在哪儿看到的)

这个解决办法是从谷歌提供的链接中提取出次要日历用户的信息

这可能不是最好的方法,但它确实能用

注意:这段代码是从一个真实的项目中提取出来的[有些部分被删掉了],你需要根据自己的情况进行调整,这只是一个示例,帮助解释(直接用是行不通的)

# 1 - Connect using the main user email address in a classical way

cal_client = gdata.calendar.service.CalendarService()
# insert here after connection stuff

# 2 - For each existing calendars

feed = cal_client.GetAllCalendarsFeed():

# a loop the find the calendar by it's title (cal_title)
for a_calendar in feed.entry:
    if cal_title in a_calendar.title.text:
         cal_user = a_calendar.content.src.split('/')[5].replace('%40','@')
         # If you print a_calendar.content.src.split you will see that the url 
         # contains an email like definition. This is the one to used to work
         # with the calendar 

然后你只需要在API中把默认用户替换成cal_user,这样就能操作次要日历了。

需要替换调用是因为谷歌的API函数在处理特殊字符时,比如'%',会进行内部转换

希望这能帮到你。

1

我在回答我自己的问题,这样我就可以接受这个问题了。这个问题早就解决了。

最重要的答案在这个文档里。

每个查询都可以用uri作为参数来运行。比如说“InsertEvent(event, uri)”。这个uri可以手动设置(从谷歌日历的设置里)或者自动生成,下面的帖子里有写。需要注意的是,CalendarEventQuery只需要用户名,而不是整个网址。

这两者的构造方式是这样的:

user = "abcd1234@group.calendar.google.com"

uri = "http://www.google.com/calendar/feeds/{{ user }}/private/full-noattendees"

有用的是,你可以用不同的uri来运行查询,并且在一个脚本里添加或删除多个不同日历的事件。

希望有人觉得这有帮助。

撰写回答