You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python调用Google Calendar API添加事件,Source信息显示异常求助

问题分析:Google Calendar API Source字段客户端显示差异

首先可以明确:你的代码没有问题,这个现象是Google Calendar不同客户端对source字段的支持不一致导致的,属于客户端的功能限制/未适配,而非API调用错误。

为什么代码没问题?

你传递的source参数完全符合Google Calendar API v3的官方规范:

'source': {
    'url': 'https://www.nps.gov/grte/planyourvisit/bcres.htm',
    'title': 'NPS Permit website'
}

而且事件能成功插入到日历中,说明API调用是有效的,服务器已经正确存储了source字段的数据。你可以通过调用events.get接口获取该事件,会发现source字段确实存在且参数正确。

客户端显示差异的原因

Google Calendar的不同客户端(网页版、Android版)对API字段的支持程度不同:

  • 网页端:目前网页版仅部分支持source字段,它不会单独展示你设置的title,即使服务器存储了该值,网页界面也不会渲染出来;URL可能仅在事件详情的隐蔽位置显示(甚至完全不展示,取决于当前界面版本)。
  • Android应用:官方的Google Calendar安卓应用目前完全不支持展示source字段,这是客户端的功能缺失,很多开发者和用户都反馈过这个问题,属于Google客户端的适配遗漏,并非API的问题。

替代解决方案

如果需要让所有客户端都能看到事件的来源信息,建议把source的标题和URL放到事件的description字段中,示例代码修改如下:

cal_body = {
    'start': {
        'date': '2018-01-03',
        'timeZone': 'America/Los_Angeles'
    },
    'end': {
        'date': '2018-01-03',
        'timeZone': 'America/Los_Angeles'
    },
    'summary': 'Event Title',
    # 用纯文本格式,所有客户端都能正常显示
    'description': f"来源:{cal_body['source']['title']}\n{cal_body['source']['url']}",
    # 也可以用Markdown格式(网页端支持点击链接,安卓端显示纯文本但URL可识别)
    # 'description': f"来源:[{cal_body['source']['title']}]({cal_body['source']['url']})",
    'source': {
        'url': 'https://www.nps.gov/grte/planyourvisit/bcres.htm',
        'title': 'NPS Permit website'
    },
    'recurrence': ['RRULE:FREQ=YEARLY;BYMONTH=1;BYSETPOS=1;BYDAY=WE']
}

这样修改后,网页端和安卓端的事件详情里都会显示来源信息,保证信息的一致性。

内容的提问来源于stack exchange,提问作者user1469051

火山引擎 最新活动