Configuration de la synchronisation du calendrier Google avec l'application Web

Cet article décrit une situation dans laquelle une application doit accéder à un ou plusieurs calendriers gérés par le propriétaire de l'application (autrement dit, l'application a initialement les droits d'utiliser et de modifier les informations de ces calendriers).



L'exemple de code est dans le langage de programmation Python.



Tout d'abord, vous devez créer un projet dans la console Google Cloud Platform :





Ensuite, à côté du logo google, sélectionnez le projet créé:





Étant donné que l'application fonctionnera avec Google Calendar , le projet doit connecter l' API Google Calendar . Allez à la bibliothèque :





Recherchez l' API Google Agenda et cliquez sur Activer :





Pour obtenir un accès illimité à Google Agenda, vous devez créer un compte de service. Pour ce faire, accédez aux informations d'identification , créez les informations d'identification et sélectionnez le compte de service :







Choisissez un nom pour le compte et cliquez sur Créer :





Ignorez ensuite les paramètres facultatifs et revenez aux informations d'identification de l'onglet .



Ensuite, vous devez accéder aux informations du compte de service en cliquant sur le nom du compte et créer une clé :





Il est nécessaire de sélectionner le format de fichier de clé JSON et un fichier sera téléchargé sur le PC, qui sera ensuite lu par le programme pour accéder au compte de service.



Après avoir accédé au calendrier auquel vous devez accorder l'accès à l'application, accédez à ses paramètres:





Ensuite, cliquez sur Ajouter un utilisateur , insérez le nom du compte de service et sélectionnez soigneusement les autorisations (en fonction de la fonctionnalité de l'application):





Passons maintenant au code de l'application.



Installez les bibliothèques suivantes:



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


Ensuite, nous exécutons le code suivant:



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


À la suite de l'exécution du code ci-dessus avec le paramètre '+', nous voyons l'événement créé dans le calendrier:





Liens vers les matériaux:






All Articles