设置Google日历与Web应用程序的同步

本文讨论了一种情况,当应用程序需要访问在应用程序所有者控制下的一个或多个日历时(也就是说,该应用程序最初具有使用和更改这些日历中的信息的权限)。



示例代码使用Python编程语言。



首先,您需要Google Cloud Platform Console中创建一个项目:





接下来,在Google徽标旁边,选择创建的项目:





由于该应用程序可以使用Google日历,因此该项目需要连接Google Calendar API图书馆





找到Google Calendar API,然后点击启用





要无限访问Google日历,您需要创建一个服务帐户。为此,请转到凭据创建凭据,然后选择服务帐户







选择帐户名称,然后点击创建





然后跳过可选设置,并返回到选项卡凭据



接下来,您需要通过单击帐户名并创建一个密钥来访问有关服务帐户的信息





必须选择JSON密钥文件格式,然后文件将下载到PC,程序将进一步读取该文件以访问服务帐户。



在转到您需要授予该应用程序访问权限的日历后,请转到其设置:





接下来,单击“添加用户”,插入服务帐户的名称,并仔细选择权限(取决于应用程序的功能):





现在让我们继续到应用程序代码。



安装以下库:



pip install --upgrade google-api-python-client
pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2


然后我们运行以下代码:



from __future__ import print_function
import datetime
import googleapiclient
from google.oauth2 import service_account
from googleapiclient.discovery import build

SCOPES = ['https://www.googleapis.com/auth/calendar']

calendarId = 'lp285psodk309lilp73d9irek8@group.calendar.google.com'
SERVICE_ACCOUNT_FILE = 'light-reality-285313-acdf4768fc46.json'


class GoogleCalendar(object):

    def __init__(self):
        credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
        self.service = googleapiclient.discovery.build('calendar', 'v3', credentials=credentials)

    #      
    def create_event_dict(self):
        event = {
            'summary': 'test event',
            'description': 'some info',
            'start': {
                'dateTime': '2020-08-03T03:00:00+03:00',
            },
            'end': {
                'dateTime': '2020-08-03T05:30:00+03:00',
            }
        }
        return event

    #    
    def create_event(self, event):
        e = self.service.events().insert(calendarId=calendarId,
                                         body=event).execute()
        print('Event created: %s' % (e.get('id')))

    #      
    def get_events_list(self):
        now = datetime.datetime.utcnow().isoformat() + 'Z'
        print('Getting the upcoming 10 events')
        events_result = self.service.events().list(calendarId=calendarId,
                                                   timeMin=now,
                                                   maxResults=10, singleEvents=True,
                                                   orderBy='startTime').execute()
        events = events_result.get('items', [])

        if not events:
            print('No upcoming events found.')
        for event in events:
            start = event['start'].get('dateTime', event['start'].get('date'))
            print(start, event['summary'])


calendar = GoogleCalendar()
print("+ - create event\n? - print event list\n")
c = input()

if c == '+':
    event = calendar.create_event_dict()
    calendar.create_event(event)
elif c == '?':
    calendar.get_events_list()
else:
    pass


使用'+'参数执行上述代码的结果是,我们在日历中看到了创建的事件:





资料链接:






All Articles