google calendarから日本の祝日のリストを取得する

前回の投稿でholidayというクラスを定義したコードをポストしたが、こちらはタプルのリストで書き直してみた。

# coding: utf-8
import datetime
import httplib2
import urllib
from xml.dom import minidom
from xml.dom.minidom import parseString
     
def get_japan_holiday(start,days,rg):
    """
    start :いつから dateオブジェクトで渡す
    days:調べたい期間を 日数で渡す
    rg:listで返ってくる祝日の要素数 
        大きくするとgoogleがエラーを返すのか? 未確認
    """
    end = start + datetime.timedelta(days)
    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" : str(rg)}
    http = httplib2.Http()
    url = "%s%s%s?%s" % (host, user, param, urllib.urlencode(val))
    response,content = http.request(url) #返値には responseが必要
    xdoc = minidom.parseString(content)
    elements = xdoc.getElementsByTagName("entry")
    holidays = []
    for element in elements:
        day = holiday_name = ''
        for child in element.childNodes:
            if child.tagName == 'gd:when':
                day = child.getAttribute('startTime')
                d = day.split('-')
                date = datetime.date(int(d[0]),int(d[1]),int(d[2]))
            if child.tagName == "title":
                holiday_name = child.firstChild.data

        holidays.append((date,holiday_name))
        
    sorted_holidays = sorted(holidays,
            key=lambda holiday:(holiday[0].year,holiday[0].month,holiday[0].day))
 
    return sorted_holidays

if __name__=="__main__":
    now = datetime.datetime(2013,1,1)
    for holiday in get_japan_holiday(now,365*2,100):
        print holiday[0].isoformat() + ' ' + holiday[1]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です