Google Calendarから祝日を取得
環境
OAuth認証でGoogle Calendar APIに接続する(python 編)
quickstart.pyを実行し、カレンダー利用の許可。
このコードはholiday.pyにリネームする。
↓
GoogleカレンダーAPIを使って、日本の祝日を取得する
コードの下記のAPI実行の部分を利用する。
holiday.pyに記述。
↓
Pythonで「指定した年と月」の「すべての日付」を表示する関数をつくってみた
上記の方法で1年分のカレンダーを作成する。
新規でtest.py作成
↓
holiday.py
from __future__ import print_function import httplib2 import os from apiclient import discovery from oauth2client import client from oauth2client import tools from oauth2client.file import Storage from datetime import date try: import argparse flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() except ImportError: flags = None # If modifying these scopes, delete your previously saved credentials # at ~/.credentials/calendar-python-quickstart.json SCOPES = 'https://www.googleapis.com/auth/calendar.readonly' CLIENT_SECRET_FILE = 'client_secret.json' APPLICATION_NAME = 'Google Calendar API Python Quickstart' def _get_credentials(): """Gets valid user credentials from storage. If nothing has been stored, or if the stored credentials are invalid, the OAuth2 flow is completed to obtain the new credentials. Returns: Credentials, the obtained credential. """ home_dir = os.path.expanduser('~') credential_dir = os.path.join(home_dir, '.credentials') if not os.path.exists(credential_dir): os.makedirs(credential_dir) credential_path = os.path.join(credential_dir, 'calendar-python-quickstart.json') store = Storage(credential_path) credentials = store.get() if not credentials or credentials.invalid: flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) flow.user_agent = APPLICATION_NAME if flags: credentials = tools.run_flow(flow, store, flags) else: # Needed only for compatibility with Python 2.6 credentials = tools.run(flow, store) print('Storing credentials to ' + credential_path) return credentials def get_holiday_events(year): """Shows basic usage of the Google Calendar API. Creates a Google Calendar API service object and outputs a list of the next 10 events on the user's calendar. """ credentials = _get_credentials() http = credentials.authorize(httplib2.Http()) service = discovery.build('calendar', 'v3', http=http) calendar_id = 'ja.japanese#holiday@group.v.calendar.google.com' calendar_min = date(year=year, month=1, day=1).isoformat() + 'T00:00:00.000000Z' calendar_max = date(year=year, month=12, day=31).isoformat() + 'T00:00:00.000000Z' event_results = service.events().list( calendarId = calendar_id, timeMin = calendar_min, timeMax = calendar_max, maxResults = 50, singleEvents = True, orderBy = "startTime" ).execute() events = event_results.get('items', []) # for event in events: # print("%s\t%s" % (event["start"]["date"], event["summary"])) return events;
test.py
import calendar import holiday from datetime import date def get_year_days(year, month): month_days = [i+1 for i in range(calendar.monthrange(year, month)[1])] days = list(map(lambda day: "{0:02d}/{1:02d}/{2:02d}".format(year, month, day), month_days)) return days def main(year): months = [i+1 for i in range(12)] year_days = list(map(lambda month: get_year_days(year, month), months)) events = holiday.get_holiday_events(year) holiday_dict = dict( (event["start"]["date"].replace("-", "/"), event["summary"]) for event in events ) for month in year_days: for day in month: if day in holiday_dict: print(day + " " + holiday_dict[day]) else: print(day) if __name__ == '__main__': main(2017)
結果
2017/01/01 元日 2017/01/02 元日 振替休日 2017/01/03 2017/01/04 2017/01/05 2017/01/06 2017/01/07 2017/01/08 2017/01/09 成人の日 2017/01/10 2017/01/11 2017/01/12 ... 2017/12/23 天皇誕生日 2017/12/24 2017/12/25 2017/12/26 2017/12/27 2017/12/28 2017/12/29 2017/12/30 2017/12/31