So extrahieren Sie einen Termin in Google Kalender mit Python

Einführung

Dieses Mal möchte ich beliebige Zeitpläne aus den folgenden Kalendern extrahieren. Ich wusste nicht, wie ich ** willkürlichen Zeitplan ** anzeigen sollte, also suchte ich ziemlich viel. Immerhin war es ein Blick auf das offizielle Dokument ...

Also dachte ich: "Warum schreibe ich nicht alles?", Also schrieb ich es in Qiita.

image.png

Einführung

Die Grundeinstellungen sind im offiziellen Dokument Python Quickstar beschrieben, daher werde ich die Details überspringen.

Dinge notwendig

Datei --credits.json

Sie können die Datei von [hier] herunterladen (https://developers.google.com/calendar/quickstart/python). Legen Sie es in dasselbe Verzeichnis wie das von Ihnen erstellte Skript "main.py".

Die Kalender-ID finden Sie in Ihren Google Kalender-Einstellungen. Wenn Sie es nicht wissen, googeln Sie bitte oder sehen Sie hier. Wenn Sie [Mein Kalender] → [Name] verwenden, ist die Kalender-ID die Google Mail-Adresse. Davon abgesehen (z. B. "Test" in der folgenden Abbildung) können Sie dies nicht ohne Überprüfung herausfinden. image.png

Wenn Sie die Google Client-Bibliothek nicht installiert haben, installieren Sie sie bitte.

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

Offizielle Probe

Die offizielle Beispieldokumentation lautet wie folgt. Wenn Sie dies ein wenig verbessern, können Sie tun, was Sie wollen.

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()

Jede Terminsuche

Die erste Hälfte des offiziellen Dokuments enthält viel Code, aber die Grundlagen sind in Ordnung. Wir werden den Code von "# Call the Calendar API" transformieren. Stellen Sie zunächst die Liste von "events_result" wie folgt als Beispiel ein.

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 " zeigt auf das gesuchte Schlüsselwort. Die Elemente der Liste werden unter hier auf verschiedene Weise beschrieben. Probieren Sie sie daher aus, wenn Sie sie benötigen.

Als Beispiel möchte ich den Zeitplan für Februar 2020 anzeigen, daher geben "timeMin" und "timeMax" den Bereich von Februar mit "datetime" an. Sie müssen hier vorsichtig sein.

Ordnen Sie die Anzeige

Als nächstes werden wir das nachfolgende Skript verbessern. Sie können dies frei einstellen, aber seien Sie vorsichtig, wenn Sie die Beschreibung "Beschreibung" von Google Kalender lesen.

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")

Verwenden Sie get. () As description = event.get ('description'," not found ") anstelle vonevent ['description']. Übrigens, wenn die Beschreibung nicht im Zeitplan steht, wird "nicht gefunden" zurückgegeben.

Ähnliches gilt für "start = event ['start']. Get ('dateTime', event ['start']. Get ('date'))", wenn der Zeitplan eine Zeiteinstellung hat, "dateTime" Wird zurückgegeben, und wenn der Zeitplan den ganzen Tag ist, wird "event ['start']. Get ('date')" zurückgegeben.

Implementierung

Ich werde den obigen Code verbinden. Ich habe den fertigen Mantel darauf gelegt, aber ich habe ihn für andere Arbeiten selbst gemacht. Bitte haben Sie etwas Geduld mit der schlechten Verwendung von Klassen und Funktionen.

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()

Das Ausgabeergebnis sieht folgendermaßen aus.

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 

Wenn Sie sagen, dass Sie richtig extrahieren konnten, wissen Sie, dass dies nicht der Fall ist. Schauen wir uns noch einmal den Beispielkalender an.

image.png

Natürlich wird "Test" im Testkalender nicht angezeigt, aber "test_4" wird auch nicht angezeigt. Im Gegenteil, das Kapital "Test" wird ausgegeben. Es kann gelesen werden, dass "q =", das hier verwendet wird, nach einem Wort mit einer genauen Schreibweise sucht.

Wenn Sie also "test" anzeigen möchten, müssen Sie "q =" test "setzen, und wenn Sie" test_4 "anzeigen möchten, müssen Sie" q = test_4 "setzen.

Zusammenfassung

Es scheint, dass es je nach Anwendung auf verschiedene Arten verwendet werden kann. Ich habe das Gefühl, dass ich auch Verhaltensweisen analysieren kann, z. B. wie oft und was ich aus meinem Zeitplan heraus mache.

Ich denke darüber nach, es anders zu verwenden ...

Ich hoffe es hilft dir. Bitte weisen Sie auf Fehler hin. (Bitte beachten Sie, dass "" "und" "durcheinander sind. Es tut mir leid.)

Verweise

Recommended Posts

So extrahieren Sie einen Termin in Google Kalender mit Python
So arbeiten Sie mit BigQuery in Python
So extrahieren Sie einen Polygonbereich in Python
[REAPER] Wie man Reascript mit Python spielt
Wie man tkinter mit Python in Pyenv benutzt
Wie man in Python entwickelt
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So führen Sie eine Hash-Berechnung mit Salt in Python durch
Erklären Sie ausführlich, wie Sie mit Python einen Sound erzeugen
So führen Sie Tests zusammen mit Python unittest aus
So laden Sie Dateien in Google Drive mit Google Colaboratory
So legen Sie Google Text & Tabellen in einem Ordner zusammen in einer TXT-Datei mit Python ab
[Python] Wie man PCA mit Python macht
Python: So verwenden Sie Async mit
So sammeln Sie Bilder in Python
Verwendung von SQLite in Python
Erste Schritte mit Python
Wie man aus einer Wahrscheinlichkeitsdichtefunktion in Python tastet
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
So berechnen Sie das Datum mit Python
Umgang mit Japanisch mit Python
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Wie man mit Python-Installationsfehlern in pyenv umgeht (BUILD FAILED)
Wie man Japanern nicht entgeht, wenn man mit json in Python umgeht
So verwenden Sie Python in Pyenv unter MacOS mit PyCall
Herstellen einer Verbindung zum Cloud Firestore über Google Cloud-Funktionen mit Python-Code
Anzeigen von Legendenmarkierungen in einem mit Python 2D-Plot
So berechnen Sie "xx time" in einem Schuss mit Python timedelta
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Versuchen Sie, sich mit Python bei qiita anzumelden
Dynamisches Definieren von Variablen in Python
So machen Sie R chartr () in Python
So aktualisieren Sie Google Sheets von Python
[Itertools.permutations] So löschen Sie eine Sequenz in Python
Verwendung von Google Test in C-Sprache
Wie bekomme ich Stacktrace in Python?
So zeigen Sie die neunundneunzig Tabelle in Python an
Wie man einen Taschentest mit Python macht
So suchen Sie in Google Colaboratory nach Google Drive
So überprüfen Sie die Version von opencv mit Python
So zeigen Sie Python-Japanisch mit Lolipop an
So wechseln Sie die Python-Version in Cloud9
So passen Sie den Bildkontrast in Python an
Verwendung von __slots__ in der Python-Klasse
So füllen Sie mit Python dynamisch Nullen aus
Wie man mit Python-Flüchen Japanisch eingibt
So betreiben Sie die Zeitstempelstation in Python
Verwendung regulärer Ausdrücke in Python
So zeigen Sie Hello World in Python an
Verwendung ist und == in Python
Wie schreibe ich Ruby to_s in Python
Laden Sie Bilder mit Python auf Google Drive hoch
So installieren Sie Python3 mit Docker Centos
Umgang mit OAuth2-Fehlern bei Verwendung von Google APIs aus Python