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.
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.
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
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()
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.
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é.
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.
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
.
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é.)
Recommended Posts