祝日判定

最近しょぼい 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 に組み込んで「営業日数計算」とか!
…いや、やり過ぎな気がする…。