【问题标题】:How to Add Calendar Events to Google Calendar from Flask App without oauth?如何在没有 oauth 的情况下从 Flask App 将日历事件添加到 Google 日历?
【发布时间】:2020-04-30 16:34:54
【问题描述】:

在我当前的 Flask 应用程序中,我的 flask-sql-alchemy 数据库中有一个用户列。我处理用户和登录的创建(不使用谷歌登录处理)。在烧瓶 webapp 的功能中,未来的日历事件是从表单创建的。在没有他们的 oauth 信息的情况下,如何将这些事件添加到用户的谷歌日历中?如果没有用户的谷歌信息,我在谷歌日历 API 网站上找到的以下代码可以工作吗?或者这只会添加到初始化日历 api 的帐户的日历中。

插入.py

event = {
  'summary': 'Google I/O 2015',
  'location': '800 Howard St., San Francisco, CA 94103',
  'description': 'A chance to hear more about Google\'s developer products.',
  'start': {
    'dateTime': '2015-05-28T09:00:00-07:00',
    'timeZone': 'America/Los_Angeles',
  },
  'end': {
    'dateTime': '2015-05-28T17:00:00-07:00',
    'timeZone': 'America/Los_Angeles',
  },
  'recurrence': [
    'RRULE:FREQ=DAILY;COUNT=2'
  ],
  'attendees': [
    {'email': user.email}
  ],
  'reminders': {
    'useDefault': False,
    'overrides': [
      {'method': 'email', 'minutes': 24 * 60},
      {'method': 'popup', 'minutes': 10},
    ],
  },
}

event = service.events().insert(calendarId='primary', body=event).execute()
print 'Event created: %s' % (event.get('htmlLink'))

这就是我想要的功能:

@app.route('/account', methods=['GET', 'POST'])
@login_required
def account():
     form = Form()
     if form.validate.on_submit():
          event = {
            'summary': 'Google I/O 2015',
            'location': '800 Howard St., San Francisco, CA 94103',
            'description': 'A chance to hear more about Google\'s developer products.',
            'start': {
              'dateTime': form.datetime_start.data,
              'timeZone': form.timezone.data,
            },
            'end': {
              'dateTime': form.datetime_end.data,
              'timeZone': form.timezone.data,
            },
            'recurrence': [
              'RRULE:FREQ=DAILY;COUNT=2'
            ],
            'attendees': [
              {'email': current_user.email}
            ],
            'reminders': {
              'useDefault': False,
              'overrides': [
                {'method': 'email', 'minutes': 24 * 60},
                {'method': 'popup', 'minutes': 10},
              ],
            },
          }
          event = service.events().insert(calendarId='primary', body=event).execute() # the event is now in the users calendar

【问题讨论】:

  • 使用 OAuth 的障碍是什么?
  • @xdhmoore 我想我对 OAuth 有点困惑。这是否意味着每个用户都必须为我提供他们的 OAuth 令牌才能将日历事件添加到他们的谷歌日历?
  • 好吧,OAuth 中有不同的身份验证流程,但我使用它的方式是在我的网站上提供一个指向 google 的链接,用户可以去该链接并授予我访问权限,然后 google 将它们返回给我的网站连同一个访问代码,我可以发送给谷歌并取回我在调用 api 时使用的令牌。是的,这有点令人困惑。
  • 在此处查看“场景”部分:developers.google.com/identity/protocols/oauth2#scenarios

标签: python flask google-calendar-api


【解决方案1】:

方法

如果您想在用户的日历上创建活动,您必须以一种或另一种方式获得他们的许可。

  1. 如果他们在您的应用程序中使用他们的 google 凭据登录,他们可以直接在他们的日历中创建一个事件。但这需要 OAuth2 身份验证流程。
  2. 如果您对某个用户日历具有写入权限,则可以仅使用您的凭据在该日历上移动新创建的活动。
# First retrieve the event from the API.
updated_event = service.events().move(
    calendarId='primary', eventId='eventId',
    destination='destinationCalendarId').execute()

您可以在表单中添加 destinationCalendarId 字段。

考虑

将您的用户作为参与者添加到活动中会在他们的日历中显示该活动,让您作为组织者。如果这满足您的需求,这是最简单的方法,因为它只需要您的凭据。

参考:

Calendar Sharing settings

Event move

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多