Configurando a sincronização do Google Agenda com o aplicativo da web

Este artigo discute uma situação em que um aplicativo precisa acessar um ou mais calendários que estão sob o controle do proprietário do aplicativo (ou seja, o aplicativo inicialmente tem os direitos de usar e alterar as informações nesses calendários).



O código de amostra está na linguagem de programação Python.



Em primeiro lugar, você precisa criar um projeto no Console do Google Cloud Platform :





A seguir, ao lado do logotipo do google, selecione o projeto criado:





Uma vez que o aplicativo funcionará com o google calendar, o projeto precisa conectar a API do Google Calendar . Vá para a Biblioteca :





Encontre a API do Google Agenda e clique em Ativar :





Para obter acesso ilimitado ao Google Agenda, você precisa criar uma conta de serviço. Para fazer isso, vá para as credenciais , Criar credenciais e selecione a conta de serviço :







Escolha um nome para a conta e clique em Criar :





Em seguida, ignore as configurações opcionais e volte para as credenciais da guia .



Em seguida, você precisa acessar os detalhes da conta de serviço clicando no nome da conta e criar uma chave :





É necessário selecionar o formato do arquivo da chave JSON e um arquivo será baixado no PC, que será posteriormente lido pelo programa para obter acesso à conta do serviço.



Depois de ir para a agenda para a qual você precisa conceder acesso ao aplicativo, vá para suas configurações:





Em seguida, clique em Adicionar usuário , insira o nome da conta de serviço e selecione cuidadosamente as permissões (dependendo da funcionalidade do aplicativo):





Agora vamos passar para o código do aplicativo.



Instale as seguintes bibliotecas:



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


Em seguida, executamos o seguinte código:



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


Como resultado da execução do código acima com o parâmetro '+', vemos o evento criado no calendário:





Links para materiais:






All Articles