Googleã«ã¬ã³ããŒã䜿ã£ãŠã¹ã±ãžã¥ãŒã«ç®¡çãããŠãã人ãå€ãããšã ãããGoogleã«ã¬ã³ããŒã®äºå®ã¯Pythonã䜿ã£ãŠååŸã§ãããä»åã¯ãäºå®äžèЧãååŸããŠã«ãŠã³ãããŠã³ããããã°ã©ã ãäœã£ãŠã¿ããã
Googleã«ã¬ã³ããŒã«ã€ããŠ
Googleãåºæ¬çã«ç¡æã§æäŸããWebã«ã¬ã³ããŒããGoogleã«ã¬ã³ããŒãã ãã¹ããŒããã©ã³ã¢ããªãæäŸãããŠãããå®¶æãããŒã ã§å ±æãã§ããã®ã§ãå©çšããŠãããŠãŒã¶ãŒã¯å€ãããšã ããã
ãããŠãããã°ã©ããŒã«ãšã£ãŠãå¬ããç¹ã ããããã®Googleã«ã¬ã³ããŒã«ã¯APIãçšæãããŠãããèªäœã®ããã°ã©ã ããã«ã¬ã³ããŒãå¶åŸ¡ã§ããããã«ãªã£ãŠãããšããç¹ã ãç°¡åãªããã°ã©ã ãå©çšããŠãäºå®ã®äžèЧãååŸããããã€ãã³ãã远å ãããããããšãã§ããã
ä»åãšæ¬¡åã§ãã«ã¬ã³ããŒããéèŠãªäºå®ãååŸããŠãäºå®ãŸã§ã®æ¥æ°ãååŸããŠã¡ãŒã«ããããã°ã©ã ãç®æããŠäœã£ãŠã¿ãããããã§ãä»åã¯ãã«ã¬ã³ããŒã®ã€ãã³ããååŸããŠã«ãŠã³ãããŠã³ãããšãããŸã§ãäœã£ãŠã¿ããã
Google Calendar APIã䜿ãã
ãªããç°¡åãªããã°ã©ã ãçšããŠãã«ã¬ã³ããŒã®æäœãã§ããã®ãã¡ãªããã§ããããAPIã䜿ãããã«ã¯ãGoogle Cloud Platform(以äžGCPãšç¥ã)ã«ã¢ã¯ã»ã¹ããŠAPIãæå¹ã«ããããèªèšŒæ å ±ãååŸããããšãå°ãæéããããããšã¯èšããããã»ã©é£ãããªãã®ã§ææŠããŠã¿ããã
ãæé 1ãGoogle Cloud Platformã«ã¢ã¯ã»ã¹
ãŸãã¯ãWebãã©ãŠã¶ããããã¡ã(https://console.cloud.google.com/)ã®Google Cloud Platformã«ã¢ã¯ã»ã¹ãããã
ãããŠãã³ã³ãœãŒã«ã«ãã°ã€ã³ããããæåã«ãããžã§ã¯ããäœæããããç»é¢äžéšã«ãããããžã§ã¯ãã®éžæããã¯ã¹ãã¯ãªãã¯ãããããžã§ã¯ããéžæã®ç»é¢ããããã¢ãããããããæ°ãããããžã§ã¯ãããã¯ãªãã¯ãããã
ãããŠããããžã§ã¯ãã«é©åœãªååïŒäŸãã°ãCountdownããªã©)ãã€ããŠãäœæããã¿ã³ãæŒããã
ãæé 2ãCalendar APIãæå¹ã«ããã
次ãã§ããããžã§ã¯ãã«ãããCalendar APIãæå¹ã«ããããç»é¢å·Šäžã«ãããâ¡ããã¯ãªãã¯ããŠããAPIãšãµãŒãã¹ > ã©ã€ãã©ãªããã¯ãªãã¯ãããã
ãããŠãæ€çŽ¢ããã¯ã¹ã§ãCalendarããæ€çŽ¢ããŠããGoogle Calendar APIããéžã³ãŸãã
ãæå¹ã«ããããã¿ã³ãã¯ãªãã¯ãããã
ãæé 3ãèªèšŒæ å ±ãããŠã³ããŒãããã
次ã«ãèªèšŒæ å ±ãããŠã³ããŒãããããç»é¢å³äžã®ã¡ãã¥ãŒãããAPIãšãµãŒãã¹ïŒèªèšŒæ å ±ããã¯ãªãã¯ãããããããŠãç»é¢äžéšã®ãïŒèªèšŒæ å ±ãäœæããã¯ãªãã¯ãããããããŠãããµãŒãã¹ã¢ã«ãŠã³ãããéžæããã
ãããŠããµãŒãã¹ã¢ã«ãŠã³ããäœæããããé©åœãªååãä»ããŠã¢ã«ãŠã³ããäœæããŠããå®äºããã¿ã³ãã¯ãªãã¯ãããããã®ãšãããµãŒãã¹ã¢ã«ãŠã³ãã®ããŒã«ã«ã¯ããªãŒããŒããããã¯ãç·šéæš©éããæå®ããŠãããã
ãªãããã®åŸã®äœæ¥ã§ã¢ã«ãŠã³ããã«ã¬ã³ããŒãšå ±æãããããäœæãããã¢ã«ãŠã³ãïŒã¡ãŒã«ã¢ãã¬ã¹ã®åœ¢åŒïŒãèŠããŠãããã
次ã«ãç»é¢äžéšã®ãããŒããã¯ãªãã¯ããŠãéµã远å > æ°ããéµãäœæ > JSONãããããŒãäœæããããéµã远å ãããšJSONãã¡ã€ã«ãããŠã³ããŒããããã®ã§ããã®JSONãã¡ã€ã«ãèªèšŒçšã®ããŒãšãªãããããŠãããã§ããŠã³ããŒãããJSONãã¡ã€ã«ããcredentials.jsonããšããååã«å€æŽããŠãããã
ãæé 4ãã«ã¬ã³ããŒIDã調ã¹ãã
ãããŠãå©çšãããGoogleã«ã¬ã³ããŒã®IDã調ã¹ãŠããããã«ã¬ã³ããŒIDã¯ãGoogleã«ã¬ã³ããŒã®ç»é¢ã®å·ŠåŽã«ãããèšå®ãšå ±æãã®ã¡ãã¥ãŒãã確èªã§ããã
ãªããã«ã¬ã³ããŒIDã¯ãã«ã¬ã³ããŒã®èšå®ã®äžã®æ¹ã«ãããèšå®ç»é¢ãã¹ã¯ããŒã«ããŠIDã確èªããŠãã³ããŒããŠãããã
å ããŠãã«ã¬ã³ããŒã®èšå®ã®ãç¹å®ã®ãŠãŒã¶ãŒãŸãã¯ã°ã«ãŒããšå ±æãããã«ãŠãäœæãããµãŒãã¹ã¢ã«ãŠã³ãã§ã察象ã®ã«ã¬ã³ããŒãèªã¿æžãã§ããããã«è¿œå ãããã
ãæé 5ãããã°ã©ã ãå®è¡ããã
ä»åã®ããã°ã©ã ãåããã®ã«ããã£ãŠãå¿ èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ããããã¿ãŒããã«(WindowsãªãPowerShellãmacOSãªãã¿ãŒããã«.app)ãèµ·åããŠã以äžã®ã³ãã³ããå®è¡ãããã
# Windowsã®å Žå
python -m pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
# macOSã®å Žå
python3 -m pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
以äžã§ãæºåå®äºã ã以äžã®ããã°ã©ã ããcountdown.pyããšããååã§ä¿åãããããªãããã¡ãã«ããœãŒã¹ã³ãŒããã¢ããããŠããã
以äžã®ããã°ã©ã ã®(ïŒ1)ã®ã¯ã¬ãã³ã·ã£ã«ãã¡ã€ã«ã®ãã¹ããããŠã(ïŒ2)ã®ã«ã¬ã³ããŒIDãæžãæããŠä¿åãããã
import os
import datetime
from googleapiclient.discovery import build
from google.auth import load_credentials_from_file
# ã¯ã¬ãã³ã·ã£ã«ãã¡ã€ã«ã®ãã¹ãæå® --- (*1)
CREDENTIALS_PATH = 'credentials.json'
# ã«ã¬ã³ããŒIDãæå® --- (*2)
CALENDAR_ID = '28e4bb3f327eb238d29a282e9935fc957c40bb3e63ae831b9ecc935bee67efed@group.calendar.google.com'
# ã¹ã³ãŒãã®æå®
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
# ã¯ã¬ãã³ã·ã£ã«æ
å ±ã®èªã¿èŸŒã¿ --- (*3)
credentials = load_credentials_from_file(CREDENTIALS_PATH, SCOPES)[0]
# Google Calendar APIã¯ã©ã€ã¢ã³ãã®äœæ --- (*4)
service = build('calendar', 'v3', credentials=credentials)
# ã€ãã³ãã®éå§æ¥ãæå® --- (*5)
now = datetime.datetime.utcnow()
start_date = now.isoformat() + 'Z'
# ã€ãã³ãã®çµäºæ¥ãæå®ïŒããã§ã¯30æ¥åŸãŸã§ïŒ --- (*6)
end_date = (now + datetime.timedelta(days=30)).isoformat() + 'Z'
# ã€ãã³ãã®äžèЧãååŸ --- (*7)
events_result = service.events().list(
calendarId=CALENDAR_ID,
timeMin=start_date,
timeMax=end_date,
singleEvents=True,
maxResults=30, # æå€§30ä»¶ã®ã€ãã³ããååŸ
orderBy='startTime'
).execute()
events = events_result.get('items', [])
# ã€ãã³ãã衚瀺 --- (*8)
if not events:
print('ã€ãã³ãã¯èŠã€ãããŸããã§ããã')
else:
print('ã€ãã³ãäžèЧ:')
for event in events:
# ã€ãã³ãã®éå§æéãååŸ
target_date = event['start'].get('dateTime', event['start'].get('date'))
# ãã®ã€ãã³ããŸã§äœæ¥ããã調ã¹ãŠè¡šç€º --- (*9)
if 'T' in target_date: # ã¿ã€ã ã¹ã¿ã³ããããã°é€å»
target_date = target_date[:10]
now = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
target_td = datetime.datetime.strptime(target_date, '%Y-%m-%d')
days = (target_td - now).days
print(f'{days:2}æ¥ - {event["summary"]}')
ããã°ã©ã ãå®è¡ããã«ã¯ãã¿ãŒããã«ãèµ·åããŠãäžèšã®ã³ãã³ããå®è¡ãããããªããããã°ã©ã ãšåããã£ã¬ã¯ããªã«ãæé 3ã§ããŠã³ããŒãããèªèšŒãã¡ã€ã«ããcredentials.jsonããšããååã§é 眮ãããã
# Windowsã®å Žå
python countdown.py
# macOSã®å Žå
python3 countdown.py
ããã°ã©ã ãå®è¡ãããšãäžèšã®ç»é¢ã®ããã«ãã€ãã³ããŸã§ã®æ¥æ°ã衚瀺ãããã
ããã°ã©ã ã®(ïŒ1)ã§ã¯ãã¯ã¬ãã³ã·ã£ã«ãã¡ã€ã«ã®ãã¹ãæå®ããã(ïŒ2)ã«ã¯ãGoogleã«ã¬ã³ããŒã®ã«ã¬ã³ããŒIDãæå®ãããã
(ïŒ3)ã§ã¯å®éã«ã¯ã¬ãã³ã·ã£ã«æ å ±ãèªã¿èŸŒã¿ã(ïŒ4)ã§APIã«ã¢ã¯ã»ã¹ããã¯ã©ã€ã¢ã³ããäœæããã
(ïŒ5)ã§ã¯ã€ãã³ãã®éå§æ¥ã(ïŒ6)ã§ã¯çµäºæ¥ãæå®ããŠã(ïŒ7)ã§ã€ãã³ãã®äžèЧãååŸãããããã§ã¯æå€§30ä»¶ãååŸããããã«ããŠããã
(ïŒ8)以éã®éšåã§ã€ãã³ãã衚瀺ããã(ïŒ9)ã§ãã®ã€ãã³ããŸã§äœæ¥ããã®ã調ã¹ãŠç»é¢ã«è¡šç€ºããã
æ¹ããŠãã€ã³ãã確èªããŠã¿ãã
ã¡ãªã¿ã«ãçè ãGCPã®èšå®ã§ããã£ãŠããŸãããªããªãããŸãåããããšãã§ããªãã£ããçè ãããã£ãåé¡ç¹ã¯ããµãŒãã¹ã¢ã«ãŠã³ãã®äœææã«ãããŒã«ãæå®ããŠããªãã£ãããšã ã
Googleã«ã¬ã³ããŒã®ã€ãã³ããèªããããã«ãããŒã«ãæ£ããæå®ããå¿ èŠãããããŸããäžèšã®ç¶æ ã§ããèªèšŒãšã©ãŒãåºãã®ã§ã¯ãªããã¿ã€ã ã¢ãŠããšã©ãŒã«ãªãã ããªã®ã§æ°ãã€ãããã
ããã§ãããŸãåãããªããšããå Žåã«ã¯ãæ¬çš¿ãåèã«ããŠãäžèšã®ç¹ã確èªããŠã¿ããã
- GCPã³ã³ãœãŒã«ã§Calendar APIãæå¹ã«ããã
- GCPã§ãµãŒãã¹ã¢ã«ãŠã³ããäœæããŠããŒã«ãæå®ããã
- GCPã®èªèšŒæ å ±ãããµãŒãã¹ã¢ã«ãŠã³ããäœæããŠãéµãã¡ã€ã«(ã¯ã¬ãã³ã·ã£ã«)ãããŠã³ããŒãããããããããããã°ã©ã ãšåããã©ã«ãã«é 眮ããã
- Googleã«ã¬ã³ããŒã®èšå®ã§ãå ±æèšå®ã§ãµãŒãã¹ã¢ã«ãŠã³ãã远å ãã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ãæè¡æžãå€ãå·çããŠãããçŽè¿ã§ã¯ããå®è·µåãã¢ãããã Pythonã«ããã¢ã«ãŽãªãºã ã®æç§æž(ãã€ããåºç)ããã·ãŽããã¯ãã©ã PythonèªååŠçã®æç§æž(ãã€ããåºç)ããããã«äœ¿ãã!æ¥åã§å®è·µã§ãã! Pythonã«ããAIã»æ©æ¢°åŠç¿ã»æ·±å±€åŠç¿ã¢ããªã®ã€ããæ¹ TensorFlow2察å¿(ãœã·ã )ãããã³ã¬ã§ãã£ããåŠã¶Python(ãã€ããåºç)ããªã©ã













