でも、最近仕事が忙しくて、悲しいかな業務時間に作業してないので、せっかくなのでブログにも置いときます。
社内のレポートは業務時間を使ってもいいことになっているので、有難い制度なんですけどねー。
やりたいこと
日本の祝日を判定したい
1.元データ
スタンドアローンということで、何らかの元データをローカルに保持しないといかんわけで、今回はGoogle カレンダーのAPIを利用しました。
今回利用したXMLリクエスト
http://www.google.com/calendar/feeds/outid3el0qkcrsuf89fltf7a4qbacgt9@import.calendar.google.com/public/full-noattendees?start-min=2013-01-01&start-max=2013-12-31
リクエストパラメータの意味
詳細は、Google Calendar API v2 Atom Referenceを。
outid3el0qkcrsuf89fltf7a4qbacgt9@import.calendar.google.com | 比較的信頼度が高いとされる、mozillaプロジェクトの祝日一覧(mozzila Calendar Project) | |
full-noattendees | full版からgg:whoを抜いたもの(今回は不要なので) | |
start-min=2013-01-01 | 期間の始まり | |
start-max=2014-01-31 | 期間の終わり |
2.実際のコード
[python]
#!/usr/bin/env python
from xml.dom.minidom import parse
import sys
import re
def get_parse(fileName):
try:
obj = parse(fileName)
except IOError:
obj = 0
return obj
def get_arg2(arg2):
pattern = re.compile("^\d{4}-\d{2}-\d{2}$")
matched = pattern.search(arg2)
if matched:
argDate = arg2
else:
argDate = 0
return argDate
def main():
fileName=sys.argv[1]
obj = get_parse(fileName)
if obj == 0:
print "file not found"
return 1
argDate = get_arg2(sys.argv[2])
if argDate == 0:
print "argument is unjust. ex)2013-01-01"
return 1
obj_list = obj.getElementsByTagName("gd:when")
for i in obj_list:
if argDate == i.getAttribute("startTime"):
return 0
print "unmatch holiday"
return 2
if __name__=='__main__':
sys.exit(main())
[/python]
3.ざっくり仕様
- 第一引数に元xmlのファイルパス
- 第二引数に確認したい日付をyyyy-MM-ddにて渡す
- 祝日であれば、0、祝日でない場合は2、その他のエラーは1を返す
4.動作イメージ
[bash]
shase$ ./holidayCheck.py japanHoriday.xml 2013-10-15
unmatch holiday
shase$ ./holidayCheck.py japanHoriday.xml 2013-05-05
shase$ echo $?
0
[/bash]