ゼロと無限の間に

フリーでオープンソースなJavaScriptとかPHPとか。

ユーザ用ツール

サイト用ツール


javascript:google-calendar-holidays

文書の過去の版を表示しています。


GoogleカレンダーからJSONPで日本の祝日一覧を取得 - GCalHolidays

Google Calendar APIから、日本の祝日データを取得して表示するJavaScriptです。
Googleカレンダーに登録されている祝日なので、ハッピーマンデーの時のように休日の制度が変わっても柔軟に対応できます。
ただしGoogleカレンダーに登録されている祝日が間違っている(あるいは最新でない)場合もそのまま表示されます。:-X

コメントと更新履歴の参照はゼロと無限の間のログ » GCalHolidaysでどうぞ。

サンプル

下記のページで実際に使ってみてください。
GCalHolidaysのサンプル

ライセンス

GCalHolidaysはMITライセンスで。
GCalHolidaysはGoogle Calendar APIを利用するので、Googleカレンダーの利用規約にも従ってください。

ダウンロード

GCalHolidays API リファレンス

GCalHolidays

GCalHolidays.get(callback, year, month)

  • 概要
    • 祝日データを取得する。
  • パラメータ
    • callback : データ取得後に呼び出されるコールバック関数を渡す。コールバック関数には下記のような配列のデータが渡される。
      [{year:, month:, date:, title: 祝日の名前},
       {year:, month:, date:, title: 祝日の名前},
       {year:, month:, date:, title: 祝日の名前},
       ・
       ・
       ・]
  • year : [オプション] 対象とする年。指定しないと今年のデータを取得する。
  • month : [オプション] 対象とする月。指定しないと一年分のデータを取得する。

GCalHolidays.userId

  • GoogleカレンダーのIDを指定するプロパティ
  • デフォルトはmozilla.orgからインポートしている日本の祝日

GCalHolidays.maxResults

  • 取得するデータの最大件数を指定するプロパティ
  • デフォルトは30

さらに進んだ使い方

GCalHolidaysのプロパティを変更すれば、他の国の祝日や祝日以外のデータ(Googleカレンダーで公開されているイベントのデータ)も取得できます。

例:サッカーの日本代表のスケジュールを取得する場合

GCalHolidays.userId = "k1b51v9t41vn3k0agk648pr7p0@group.calendar.google.com";
GCalHolidays.max = 50;
GCalHolidays.get(callback, 2008);

ソースコード

/**
 *  GCalHolidays
 *  @see http://0-oo.net/sbox/javascript/google-calendar-holidays
 *  @version 0.1.1
 *  @copyright 2008 dgbadmin@gmail.com
 *  @license http://0-oo.net/pryn/MIT_license.txt (The MIT license)
 */
var GCalHolidays = {
    //userId: "japanese__ja@holiday.calendar.google.com"    //Google公式版
    //userId: "japanese@holiday.calendar.google.com"        //もう1つのID
      userId: "outid3el0qkcrsuf89fltf7a4qbacgt9@import.calendar.google.com"    //mozilla.org版
    , visibility: "public"
    , projection: "full-noattendees"
    , maxResults: 30
    , holidays: {}
};
 
/**
 *    @param    Function    callback    データ取得時に呼び出されるfunction
 *    @param    Number      year        (optional) 年(指定しなければ今年)
 *    @param    Number      month       (optional) 月(1~12)
 */
GCalHolidays.get = function(callback, year, month) {
    //日付範囲
    var padZero = function(value) { return ("0" + value).slice(-2) };
    var y = year || new Date().getFullYear();
    var start = [y, padZero(month || 1), "01"].join("-");
    var m = month || 12;
    var end = [y, padZero(m), padZero(new Date(y, m, 0).getDate())].join("-");
 
    //取得済みの場合はそれを使う
    var cache = this.holidays[start + ".." + end];
    if (cache) {
        callback(cache);
        return;
    }
 
    this.userCallback = callback;
 
    //URL作成
    var url = "http://www.google.com/calendar/feeds/";
    url += this.userId + "/" + this.visibility + "/" + this.projection;
    url += "?alt=json-in-script&callback=GCalHolidays.decode";
    url += "&max-results=" + this.maxResults + "&start-min=" + start + "&start-max=" + end;
 
    //scriptタグ生成
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = url;
    script.charset = "UTF-8";
    document.body.appendChild(script);
}
 
/**
 *    JSONPによりGoogle Calendar APIから呼び出されるfunction
 */
GCalHolidays.decode = function(gdata) {
    var entries = gdata.feed.entry;
    var days = [];
 
    if (entries) {
        //日付順にソート
        entries.sort(function(a, b) {
            return (a.gd$when[0].startTime > b.gd$when[0].startTime) ? 1 : -1;
        });
 
        //シンプルな器に移す
        for (var i in entries) {
            var arr = entries[i].gd$when[0].startTime.split("-");
            for (var j in arr) {
                arr[j] *= 1;    //数値にする
            }
            days[i] = {year: arr[0], month: arr[1], date: arr[2], title: entries[i].title.$t};
        }
    }
 
    //日付範囲を取得
    var feedParts = gdata.feed.link[3].href.split("&");
    var start = "", end = "";
    for (var i in feedParts) {
        var params = feedParts[i].split("=");
        switch (params[0]) {
            case "start-min": start = params[1]; break;
            case "start-max": end = params[1]; break;
        }
    }
 
    this.holidays[start + ".." + end] = days;    //キャッシュする
 
    this.userCallback(days);    //コールバック
}

参考サイト

javascript/google-calendar-holidays.1204035546.txt.gz · 最終更新: 2008/02/26 23:19 by dgbadmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki