如何在没有oauth的情况下从Flask应用中向Google日历添加日历事件?

问题描述 投票:0回答:1

在我当前的Flask应用程序中,我有一个用户列在我的flask-sql-alchemy数据库。我处理用户的创建和登录(不处理与谷歌登录)。在flask webapp的功能中,未来的日历事件是由一个表单创建的。我如何将这些事件添加到用户的谷歌日历,而没有他们的oauth信息?在没有用户google信息的情况下,我在Google日历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
python flask google-calendar-api
1个回答
0
投票

办法

如果你想在你的用户的日历上创建事件,你必须以某种方式获得他们的许可。

  1. 如果他们在你的应用程序中使用他们的谷歌凭证登录,他们可以直接在他们的日历上创建一个事件。但这需要OAuth2认证流程。
  2. 如果你在你的用户日历上有写权限,你可以只用你的凭证在该日历上移动一个新创建的事件。
# First retrieve the event from the API.
updated_event = service.events().move(
    calendarId='primary', eventId='eventId',
    destination='destinationCalendarId').execute()

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

考虑因素

将您的用户添加到事件中作为与会者,将在他们的日历中显示您作为组织者的事件。如果这能满足您的需求,这是最简单的方法,因为它只需要您的证书。

参考。

日历共享设置

事件移动

© www.soinside.com 2019 - 2024. All rights reserved.