Comment extraire n'importe quel rendez-vous dans Google Agenda avec Python

introduction

Cette fois, je voudrais extraire des horaires arbitraires des calendriers suivants. Je ne savais pas comment afficher ** calendrier arbitraire **, alors j'ai cherché pas mal. Après tout, en regardant le document officiel, c'était un coup ...

Alors j'ai pensé: "Voudriez-vous tout écrire de toute façon?", Alors je l'ai écrit en Qiita.

image.png

introduction

Les paramètres de base sont décrits dans le document officiel Python Quickstar, je vais donc sauter les détails.

Les choses nécessaires

--credits.json fichier

Vous pouvez télécharger le fichier depuis ici. Mettez-le dans le même répertoire que le script main.py que vous allez créer.

L'ID de l'agenda se trouve dans les paramètres de votre agenda Google. Si vous ne savez pas, veuillez google ou voir ici. Si vous utilisez [Mon calendrier] → [Nom], l'ID du calendrier sera l'adresse Gmail. À part cela (par exemple, «Test» dans la figure ci-dessous), vous ne pouvez pas le savoir à moins de le vérifier. image.png

Si vous n'avez pas installé la bibliothèque cliente Google, veuillez l'installer.

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

Échantillon officiel

L'exemple de documentation officielle est le suivant. Si vous améliorez un peu cela, vous pouvez faire ce que vous voulez.

sample1.py


from __future__ import print_function
import datetime
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']

def main():
    """Shows basic usage of the Google Calendar API.
    Prints the start and name of the next 10 events on the user's calendar.
    """
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('calendar', 'v3', credentials=creds)

    # Call the Calendar API
    now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
    print('Getting the upcoming 10 events')
    events_result = service.events().list(calendarId='primary', 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'])

if __name__ == '__main__':
    main()

Toute recherche de rendez-vous

La première moitié du document officiel contient beaucoup de code, mais les bases sont bonnes. Nous transformerons le code à partir de «# Call the Calendar API». Tout d'abord, définissez la liste de ʻevents_result` comme exemple comme suit.

events_result = service.events().list(
        calendarId = calendar_id,
        q = "test",
        timeMin = "2020-02-01T00:00:00+00:00",
        timeMax = "2020-02-29T00:00:00+00:00",
        timeZone = None,
        singleEvents = True,
        orderBy = "startTime",
        ).execute()
events = events_result.get("items", [])

q =" test " pointe vers le mot-clé que vous recherchez. Les éléments de la liste sont décrits de différentes manières sur ici, veuillez donc les essayer si vous en avez besoin.

À titre d'exemple, je veux afficher le calendrier pour février 2020, donc timeMin et timeMax spécifient la plage de février avec datetime. Vous devez être prudent ici.

Organiser l'affichage

Ensuite, nous améliorerons le script suivant. Vous pouvez définir cela librement, mais soyez prudent lorsque vous lisez la description «description» de Google Agenda.

if not events:
    print("not found")
for event in events:
    start = event['start'].get('dateTime',event['start'].get('date'))
    description = event.get('description', "not found")
    print(start)
    print("Event :",event['summary'])
    print("Description :",description,"\n")

Utilisez get. () Comme description = event.get ('description'," not found ") au lieu de ʻevent ['description'] `. À propos, si la description n'est pas écrite dans le calendrier, «non trouvé» est renvoyé.

De même pour start = event ['start']. Get ('dateTime', event ['start']. Get ('date')), si la planification a un réglage d'heure, 'dateTime' Est retourné, et si la planification est toute la journée, ʻevent ['start']. Get ('date') `est retourné.

la mise en oeuvre

Je vais connecter le code ci-dessus. J'ai mis le manteau fini dessus, mais je l'ai fait pour moi-même pour d'autres travaux, alors soyez patient avec la mauvaise utilisation des cours et des fonctions.

main.py


from __future__ import print_function
import pickle
import os.path

from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/calendar']

calendar_id = "your calendar id"

class Writer(object):
    def __init__(self):
        """Shows basic usage of the Google Calendar API.
            Prints the start and name of the next 10 events on the user's calendar.
            """
        creds = None
        # The file token.pickle stores the user's access and refresh tokens, and is
        # created automatically when the authorization flow completes for the first
        # time.
        if os.path.exists('token.pickle'):
            with open('token.pickle', 'rb') as token:
                creds = pickle.load(token)
        # If there are no (valid) credentials available, let the user log in.
        if not creds or not creds.valid:
            if creds and creds.expired and creds.refresh_token:
                creds.refresh(Request())
            else:
                flow = InstalledAppFlow.from_client_secrets_file(
                    'credentials.json', SCOPES)
                creds = flow.run_local_server(port=0)
            # Save the credentials for the next run
            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)

        self.service = build('calendar', 'v3', credentials=creds)

    def google_calendar_reader(self):

            events_result = self.service.events().list(
                calendarId= calendar_id,
                q="test",
                timeMin = "2020-02-01T00:00:00+00:00",
                timeMax = "2020-02-29T00:00:00+00:00",
                timeZone = None,
                singleEvents=True,
                orderBy="startTime",
                ).execute()
            events = events_result.get("items", [])

            if not events:
                print("not found")
            for event in events:
                start = event['start'].get('dateTime',event['start'].get('date'))
                description = event.get('description', "not found")
                print(start)
                print("Event :",event['summary'])
                print("Description :",description,"\n")

writer = Writer()
writer.google_calendar_reader()

Le résultat de sortie ressemble à ceci.

2020-02-03
Event : test 1
Description : This is description of test_1. 

2020-02-10T10:00:00+09:00
Event : test 3
Description : not found 

2020-02-11
Event : Test
Description : not found 

Eh bien, si vous dites que vous avez pu extraire correctement, vous savez que ce n'est pas le cas. Regardons à nouveau l'exemple de calendrier.

image.png

Bien entendu, "test" dans le calendrier de test n'est pas affiché, mais "test_4" ne l'est pas non plus. Au contraire, le "Test" capital est la production. On peut lire que «q =» utilisé ici est la recherche d'un mot avec une orthographe exacte.

Par conséquent, si vous voulez afficher "test", vous devez définir q =" test ", et si vous voulez afficher "test_4", vous devez définir q = test_4.

Résumé

Il semble qu'il puisse être utilisé de différentes manières selon l'application. Je sens que je peux aussi analyser des comportements tels que la fréquence et ce que je fais de mon emploi du temps.

Je pense l'utiliser différemment ...

J'espère que ça t'aide. Veuillez signaler toute erreur. (Veuillez noter que "" "et" "" sont en désordre. Je suis désolé.)

Les références

Recommended Posts

Comment extraire n'importe quel rendez-vous dans Google Agenda avec Python
Comment utiliser BigQuery en Python
Comment extraire une zone de polygone en Python
[REAPER] Comment jouer à Reascript avec Python
Comment utiliser tkinter avec python dans pyenv
Comment développer en Python
Comment convertir / restaurer une chaîne avec [] en python
Comment faire un calcul de hachage avec Salt en Python
Expliquez en détail comment créer un son avec python
Comment exécuter des tests avec Python unittest
Comment charger des fichiers dans Google Drive avec Google Colaboratory
Comment déposer Google Docs dans un dossier dans un fichier .txt avec python
[Python] Comment faire PCA avec Python
Python: comment utiliser async avec
Comment collecter des images en Python
Comment utiliser SQLite en Python
Comment démarrer avec Python
Comment échantillonner à partir de n'importe quelle fonction de densité de probabilité en Python
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment calculer la date avec python
Comment gérer le japonais avec Python
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Comment gérer l'erreur d'installation de python dans pyenv (BUILD FAILED)
Comment ne pas échapper au japonais en traitant avec JSON en Python
Pour utiliser python, mettez pyenv sur macOS avec PyCall
Comment se connecter à Cloud Firestore à partir de Google Cloud Functions avec du code Python
Comment afficher les marques de légende en un avec le tracé Python 2D
Comment calculer "xx time" en un seul coup avec Python Timedelta
[Introduction à Python] Comment utiliser la classe en Python?
Essayez de vous connecter à qiita avec Python
Comment définir dynamiquement des variables en Python
Comment faire R chartr () en Python
Comment mettre à jour Google Sheets à partir de Python
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser Google Test en langage C
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python
Comment faire un test de sac avec python
Comment rechercher Google Drive dans Google Colaboratory
Comment vérifier la version d'opencv avec python
Comment afficher le japonais python avec lolipop
Comment changer de version de Python dans cloud9
Comment régler le contraste de l'image en Python
Comment utiliser __slots__ dans la classe Python
Comment remplir dynamiquement des zéros avec Python
Comment entrer le japonais avec les malédictions Python
Pour faire fonctionner la station d'horodatage en Python
Comment utiliser les expressions régulières en Python
Comment afficher Hello World en python
Comment utiliser is et == en Python
Comment écrire Ruby to_s en Python
Télécharger des images sur Google Drive avec Python
Comment installer python3 avec docker centos
Comment gérer l'erreur OAuth2 lors de l'utilisation des API Google à partir de Python