祝日判定
最近しょぼい Python Tips ばかりで申し訳ないです。
懲りずに Python + Google Calender API で指定した日が祝日かどうかの判定処理を作ってみました。
例に依って大したことはしてません。
作り方。
標準ライブラリ以外で必要なのは、httplib2 だけです。
# -*- coding: utf-8 -*- import datetime import httplib2 import urllib from xml.dom import minidom def get_japan_holiday(now): start = now end = start + datetime.timedelta(days=1) host = "http://www.google.com/calendar/feeds/" user = "ja.japanese%23holiday@group.v.calendar.google.com" param = "/public/full" val = {"start-min" : start.strftime("%Y-%m-%d"), "start-max" : end.strftime("%Y-%m-%d"), "max-results" : "1"} http = httplib2.Http() url = "%s%s%s?%s" % (host, user, param, urllib.urlencode(val)) header, body = http.request(url) xdoc = minidom.parseString(body) elements = xdoc.getElementsByTagName("entry") for element in elements: for child in element.childNodes: if child.tagName == "title": return child.firstChild.data return u""
使い方。
指定した日付が祝祭日なら祝祭日の名を返します。
それ以外は "" を返します。
>>> now = datetime.datetime.now() >>> now datetime.datetime(2011, 8, 19, 13, 39, 57, 668650) >>> get_japan_holiday(now) u''
API url = http://www.google.com/calendar/feeds/ja.japanese%23holiday@group.v.calendar.google.com/public/full?start-max=2011-08-20&max-results=100&start-min=2011-08-19
>>> arg = datetime.datetime(2011, 10, 10) >>> print get_japan_holiday(arg) 体育の日
API url = http://www.google.com/calendar/feeds/ja.japanese%23holiday@group.v.calendar.google.com/public/full?start-max=2011-10-11&max-results=100&start-min=2011-10-10
これを dateutil に組み込んで「営業日数計算」とか!
…いや、やり過ぎな気がする…。