ホーム > 実験室 > 休日情報 Web サービス このエントリーを含む はてなブックマーク 0 users

休日情報 Web サービス

エンドポイントと WSDL

サービス概要

日本の休日情報を提供する Web サービスです。
SOAP 1.1 および 1.2 に対応しています。REST にはサーバの都合により対応していません。

以下のようなサービスを提供しています:

  • 指定された年月日が休日かどうかを判定します。
    休日であれば true を返し、休日でなければ false を返します。
  • 指定された休日の日本語名と英語名を取得します。
    たとえば 2006 年 1 月 1 日なら "元日" および "New Year's Day" を返します。
    休日でない日を指定されたら null を返します。
  • 指定された年月の全ての休日の日付と名前を取得します。
    たとえば 2006 年 1 月なら、1 日(元日)、2 日(振替休日)、9 日(成人の日)の情報をまとめて返します。
    指定された年月に休日が含まれていない場合、null を返します。
  • 指定された年の全ての休日の日付と名前を取得します。

サービスの制限事項

  • 1948 年(休日法が施行された年)から 2050 年までにしか対応していません。
  • 提供しているサービスは as-is です。プログラムのバグなどにより、休日の判定が間違っているかもしれません。

今すぐサービスを試してみる

IsPublicHoliday()

結果: 
GetPublicHolidayNames()

結果: 
GetPublicHolidaysByMonth()

結果: 

プログラムからの使い方


サービス提供に至った経緯

現在、趣味でカレンダーソフトを作成中なのですが、「休日」の判定は意外と面倒だということがわかりました。
すぐに思いつくところでも「振替休日」があります。たとえば2006年の元日は日曜日だったので翌二日は振替休日でした。
また、昔は 4 月 29 日は「天皇誕生日」でしたが途中で「みどりの日」と名前が変わり、しかも 2007 年からは「昭和の日」です。
春分の日や秋分の日はそれぞれ「春分日」「秋分日」とされていますが、それは天文学的に求められますが数日の範囲で揺らぎます。さらに問題なことに、厳密には官報に公示される事によって初めて正式に休日となりますので、将来の「春分の日」および「秋分の日」はあくまで予測でしかありません。
また、以前は国民の休日は 5 月 3 日と 5 月 5 日に挟まれた 5 月 4 日だけでしたが、ハッピーマンデー休暇の導入などにより 9 月の敬老の日と秋分の日の間に挟まれて国民の休日になるということが稀に起こります。
ほかにも皇族関連のイベント(って失礼な書き方かもしれませんが)で臨時の休日があったりもします。

このあたりの詳しい情報は、以下のサイトが大変参考になります:

最初は安易な気持ちで「休日の判定くらいすぐできるだろう」と思っていたのですが、なかなか難しいということがわかりました。
そこで、上記 Aladin Box さんのサイトで公開されているアルゴリズムを自分のソフトにも搭載してしまおうかと思ったのですが、いくつかの点が気になったので見合わせました。
それは、

  • 休日法が改正になったら、自分のカレンダーソフトも更新しなければならない
  • 過去の休日はすでに確定していて今後変わることはないはずなのに、毎回判定ロジックを動かす必要もないのではないか

といったような理由からでした。
それに対して私が考えたのは、Aladin Box さんのアルゴリズムを使わせていただいてある範囲の年の休日情報をすべてあらかじめ判定しておき、その判定結果をプログラム内にデータとしてもっておいて、Web サービスのようなものを使ってそれを時々更新するようにすればよいのではないか?ということでした。
しかし、意外なことに休日情報を提供してくれる Web サービスのようなものが存在しなかった(発見できなかった)のです。
「無いものは作ってしまえ」ということで、Web サービスや ASP.NET の学習もかねて作ってみたのがこのサービスです。

懸案事項

  1. ライセンスをどうするか(できるかぎり自由に使用して欲しい)
  2. 休日判定に間違いがあったときの報告先をどうするか。また、一歩進めて、いわゆる "群集の知恵" で自動的に修正できる方法はないか?
  3. 比較的公共的なサービスなので、遠い将来(100年後とか)もサービスを提供し続けられるようにするにはどうしたらいいか?(考えすぎか?)

このページに寄せられたコメント

Yun
2007/03/21
04:03:06 +09:00
こんにちは。ちょっと使わせてもらいました。
http://yuny.lolipop.jp/yun/diary.php
ある月が最初に表示された時のみ、GetPublicHolidaysByMonthを呼ばせてもらっています。
あとはデータこちらで溜めてます。
あぁでもデータを貯めてると、休日法が改正されたらそれ以降のデータを削除しなければならないんですねっ。(今更気づく)
bear.mini
2007/03/22
06:05:11 +09:00
Yun さん、当 Web サービスをご活用いただいてありがとうございます(^.^)
トラフィックに気を使っていただいたみたいで、データをキャッシュしてくださってありがとうございます。
休日法は当面改正されないと思いますから、またその時に考えればよいのではないでしょうか。
何か気付いたことがあったらお気軽にこのページにでもまた書き込んでくださいね。
tomof
2007/10/09
07:17:31 +09:00
こんにちは。PHPのフレームワーク「CakePHP」を使用して、カレンダーアプリを作成中なのですが、祝日情報の取得に使わせていただいています。

まだ、開発中ですがカレンダー表を出力する際に1日毎に「IsPublicHoliday()」で判定し、tureが返れば「GetPublicHolidayNames()」で祝日名を取得としたいのですが、一月呼び出すのに30回「IsPublicHoliday()」を呼び出すことになってしまい、トラフィックの面でご迷惑を掛けてしまいますか?(^^;)

ネットワークなどの方面の知識が全く無いので、影響がどの程度かまったく想像がつかないので申し訳ないです。
bear.mini
2007/10/10
01:43:15 +09:00
>> tomof さん
お気づかいありがとうございます。
一応、このサーバはデータ転送量に関しては無制限のサーバを借りているのでその面では問題ないと思うのですが、むしろ心配なのは DB への負荷ですかね。
とはいえ、ちょっとチャレンジしてみたい気もしますので、とりあえず今のまま使ってみてください。
もし DB のパフォーマンス的に問題があるようでしたら、ブログでぼやきますので、解決策はその時に考えましょう。
tomof
2007/10/11
12:59:08 +09:00
返信ありがとうございます。
確かに通信だけでなくDBへの負担という問題もありますね。
負担が大きいようであれば、こちら側でも休日テーブルを作って、管理者がたまにこのサービスにて一括で休日情報を取得させていただくということを考えています。
仕事とは別にやっていることなので、なかなか進まないかもしれませんがよろしくお願いします。
田舎の開発者
2008/05/20
08:45:42 +09:00
Javaからaxis2を使ってアクセスさせていただこうと思っておりましたが、時々(引数の指定に係らず)同じレスポンスを返すことがあるようです。現在、こちらのコーディングミスの可能性も含めて調査中ですが、ほぼ同じコードで「ぽすたん」
http://www.postan.jp/postanws.htm
のテスト用インターフェースが動いておりますので、もしかしたらそちらのキャッシュ設定などの問題の可能性もあるかもしれない、と思い書き込ませていただきました。
大変お手数とは存じますが、お返事を頂ければ幸いです。よろしくお願いします。
bear.mini
2008/05/20
10:43:34 +09:00
'田舎の開発者' さん、御連絡ありがとうございます。
確かにこちらのサーバではキャッシュの設定をしておりますが、ASP.NET の標準の機能を使用して WebService として呼ばれるメソッドに [WebMethod(CacheDuration = xxx)] という属性を指定しているだけでして、これはちゃんと異なる引数ごとにキャッシュしてくれていたと思います。
こちらでも少し試してみましたが、C# で書いたローカルのクライアントから、日付を変えながら数百回の呼び出しをしてみましたが重複しているということはなさそうです。
「時々」とおっしゃっている頻度は具体的にどれくらいか、もし差し支えなければお教えいただけますか?
また、4 種類(IsPublicHoliday(), GetPublicHolidayNames(), GetPublicHolidaysByMonth(), GetPublicHolidaysByYear())のうちのどのメソッドを呼び出されていて、どのメソッドで問題が起きていますか?
GetPublicHolidayNames() は休日でない場合 null を返すようになっているのですが、もしかしたらそのあたりの扱いが axis2 と互換性がないのかもしれませんね・・・
田舎の開発者
2008/05/20
13:03:14 +09:00
早速のお返事、ありがとうございます。以下インラインにて。

>「時々」とおっしゃっている頻度は具体的にどれくらいか、もし差し支えなければお教えいただけますか?
短期間(数秒以内)に繰り返しリクエストを送ると、ほぼ確実に発生します。

>4 種類(IsPublicHoliday(), GetPublicHolidayNames(), GetPublicHolidaysByMonth(),
>GetPublicHolidaysByYear())のうちのどのメソッドを呼び出されていて、どのメソッドで
>問題が起きていますか?
GetPublicHolidaysByYear()以外の三種類を使用しています。三種類すべてで同じ問題が起きています。

>GetPublicHolidayNames() は休日でない場合 null を返すようになっているのですが、
>もしかしたらそのあたりの扱いが axis2 と互換性がないのかもしれませんね
「nullが返ってくる」という意味では、axis2に置いても意図通りに動作しています。これはロジック側で「Nullだったら休日ではない」という判断を入れています。

SOAPをいじり始めてまだ日が浅いので、axisそのものに対する理解が不足している面もあります。
時間があれば、JAX-WSなどの他の実装でも試してみましょう。
bear.mini
2008/05/21
02:36:03 +09:00
問題が解決しないようであれば、お手すきのときにでも結構ですので、SOAP のリクエストとレスポンスのパケットをキャプチャしたものを私のメールアドレス(bear.mini at gmail.com)に送っていただくか、どこかのサイトに Up していただけませんか?
こちらでも axis を使ったプログラムを作って検証してみようと思いますが、時間がかかってしまいそうなのであまり期待しないでおいてください(^^ゞ
田舎の開発者
2008/05/22
10:44:23 +09:00
お返事ありがとうございます。上記の件、了解しました。それでは時間を見てlogをお送りしましょう。上のアドレスの「at」を「@」に変更すればいいのですね?
さしあたりの対策としては、年毎のアクセスにしてローカル側にキャッシュしようと思っています。
要求した年と違う年の情報が帰ってくれば、それは間違いなく取得ミスですからね。月ごとだと休日が存在しない月もありますので、このような形にしようと考えています。
bear.mini
2008/05/27
03:35:02 +09:00
その後。
田舎の開発者さんからログをお送りいただいて、こちらでも採取したログと見比べてみたところ、いくつか違いがあったのですが、どうやらクライアントからのリクエストでchunked 転送モードが指定されていると、当サーバにおいてレスポンスがキャッシュされてしまうようです。

Java で axis を使っていらっしゃる方は、以下の @IT の掲示板の内容を参照して対処してみてください。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=44822&forum=12
田舎の開発者
2008/05/27
07:18:21 +09:00
bear.mini様、ご対応ありがとうございました。
上記の件、補足として以下もご参照ください。
http://shinshu.fm/MHz/52.04/archives/0000240528.html

他にもchunked転送に関する情報は検索で数件ほど引っかかりますが、上記の通り、古い情報だと非推奨になっている場合もあります。お気を付けを。

コメントしてください:
お名前: (半角/全角問わず 16 文字まで)
コメント:
(no HTML)
確認:
このテキストボックスに "確認" の 2 文字を書くと投稿できるようになります。
投稿ボタンが自動的に有効にならない場合は、ここをクリックしてください
これは、自動的にスパムコメントを書き込もうとする悪意をもったプログラムと、 そうでないあなたを識別するためのものです。お手数をおかけしますがよろしくお願いします。 また、ブラウザによっては対応していない場合があるかも知れません。IE 7 と Firefox で動作確認を行いました。

このページに寄せられたトラックバック

サービス概要 日本の休日情報を提供する Web サービスです。 SOAP 1.1 および 1.2 に対応しています。REST にはサーバの都合により対応していません。 bear.mini の実験室 「休日情報 Web サービス」 いや、それ
[平々毎々 (Hey hey, My my)] より
(2007/07/06 04:01:58 +09:00)
今日も完全なメモ書き。5/23に書いたとおり、Webサービスを利用する上で少々トラブルが発生したので、Webサービス提供者にも連絡を取って少し調べてみたのだが、どうやらリクエストヘッダに Transfer-Encoding: chunked が含まれていた
[傭兵のメモ帳] より
(2008/05/27 07:27:47 +09:00)

このページへのトラックバック Ping URL:
http://bearmini.net/trackback.aspx?~/publicholidays/default.aspx

このサイトの上位人気記事