javascript:google-calendar-holidays
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
javascript:google-calendar-holidays [2010/05/14 06:51] – 名称変更等 dgbadmin | javascript:google-calendar-holidays [2015/09/22 14:19] (現在) – [GCalHolidays] dgbadmin | ||
---|---|---|---|
行 1: | 行 1: | ||
====== GoogleカレンダーからJSONPで日本の祝日一覧を取得 - GCalendar Holidays ====== | ====== GoogleカレンダーからJSONPで日本の祝日一覧を取得 - GCalendar Holidays ====== | ||
- | {{javascript: | + | コメントと更新履歴の参照は[[http:// |
+ | |||
+ | {{:javascript:jui-cal.png|}} | ||
- | [[http://code.google.com/ | + | [[https://developers.google.com/ |
Googleカレンダーに登録されている祝日なので、ハッピーマンデーの時のように休日の制度が変わっても柔軟に対応できます。\\ | Googleカレンダーに登録されている祝日なので、ハッピーマンデーの時のように休日の制度が変わっても柔軟に対応できます。\\ | ||
ただしGoogleカレンダーに登録されている祝日が間違っている(あるいは最新でない)場合もそのまま表示されます。: | ただしGoogleカレンダーに登録されている祝日が間違っている(あるいは最新でない)場合もそのまま表示されます。: | ||
- | コメントと更新履歴の参照は[[http:// | + | [[Yahho Calendar|Yahho Calendar]]または[[http:// |
+ | |||
+ | ===== バージョン0.6.0からの変更点 ===== | ||
+ | バージョン0.5.xまではGoogle Calendar API V2から取得していましたが、Google Calendar API V2の廃止にともない、バージョン0.6.0からはGoogle Calendar API V3から取得するようにしました。ただ、Google Calendar API V3はGoogle API KEYが必須になるため、**いったんサーバサイドのPHPでGoogle Calendar API V3からデータを取得し、そこからJavaScriptでデータを取得する**形にしました。そのPHP(GCalendar-Holidays.php)もこのページで公開しています。 | ||
+ | |||
+ | これにともない取得するGoogleカレンダーは公式版の祝日カレンダーのみになりました。(GCalendar-Holidays.phpを変更すれば任意のカレンダーを取得できます。) | ||
+ | |||
+ | |||
+ | ===== jQuery UI Datepickerに祝日を表示する ===== | ||
+ | |||
+ | バージョン0.3.0からは[[http:// | ||
+ | バージョン0.4.0からはjQuery UI Datepickerの土曜日・日曜日に背景色を付けるようにしました。 | ||
+ | |||
+ | 使い方は、jQuery UI Datepickerを使うページでGcalendar HolidaysのJavaScriptファイルを読み込むだけです。(下記サンプル参照) | ||
===== サンプル ===== | ===== サンプル ===== | ||
下記のページで実際に使ってみてください。\\ | 下記のページで実際に使ってみてください。\\ | ||
- | [[http:// | + | * [[http:// |
+ | * [[http:// | ||
+ | * [[http:// | ||
※サンプルで使っているのは最新のBeta版の場合あり | ※サンプルで使っているのは最新のBeta版の場合あり | ||
+ | |||
===== ライセンス ===== | ===== ライセンス ===== | ||
行 21: | 行 40: | ||
===== ダウンロード ===== | ===== ダウンロード ===== | ||
- | [[http:// | + | [[http://g.0-oo.net/ |
※ダウンロードのリンク先が最新のBeta版の場合あり | ※ダウンロードのリンク先が最新のBeta版の場合あり | ||
行 27: | 行 46: | ||
===== GCalendar Holidays API リファレンス ===== | ===== GCalendar Holidays API リファレンス ===== | ||
==== GCalHolidays ==== | ==== GCalHolidays ==== | ||
+ | === GCalHolidays.apiUrl === | ||
+ | * GCalendar-Holidays.phpのURLをセットしておく。 | ||
+ | |||
=== GCalHolidays.get(callback, | === GCalHolidays.get(callback, | ||
* 概要 | * 概要 | ||
行 42: | 行 64: | ||
* month : [オプション] 対象とする月。指定しないと一年分のデータを取得する。 | * month : [オプション] 対象とする月。指定しないと一年分のデータを取得する。 | ||
- | === GCalHolidays.userIds | + | === GCalHolidays.datepickerStyles |
- | * GoogleカレンダーのIDの配列を指定するプロパティ | + | * [[http:// |
- | * デフォルトはGoogleの公式の日本の祝日 | + | |
- | + | ||
- | === GCalHolidays.maxResults === | + | |
- | * 取得するデータの最大件数を指定するプロパティ | + | |
- | * デフォルトは31 | + | |
===== さらに進んだ使い方 ===== | ===== さらに進んだ使い方 ===== | ||
- | GCalHolidaysのプロパティを変更すれば、他の国の祝日や祝日以外のデータ(Googleカレンダーで公開されているイベントのデータ)も取得できます。 | + | GCalendar-Holidays.phpで指定するGoogleカレンダーのIDを変更すれば、他の国の祝日や祝日以外のデータ(Googleカレンダーで公開されているイベントのデータ)も取得できます。 |
- | + | ||
- | 例:サッカーの日本代表のスケジュールを取得する場合 | + | |
- | <code javascript> | + | |
- | GCalHolidays.userIds = [" | + | |
- | GCalHolidays.max = 50; | + | |
- | GCalHolidays.get(callback, | + | |
- | </ | + | |
行 65: | 行 75: | ||
<code javascript> | <code javascript> | ||
/** | /** | ||
- | | + | |
| | ||
- | | + | |
- | | + | |
| | ||
- | * | ||
- | | ||
- | | ||
- | | ||
*/ | */ | ||
var GCalHolidays = { | var GCalHolidays = { | ||
- | /** GoogleカレンダーのID(複数でも可) | + | /** Google |
- | | + | |
- | | + | |
- | //" | + | |
- | //"outid3el0qkcrsuf89fltf7a4qbacgt9@import.calendar.google.com" | + | |
- | ], | + | |
- | + | ||
- | /** 取得するイベント(スケジュール)の最大件数 */ | + | |
- | maxResults: 31, | + | |
- | // @see http:// | + | /** jQuery UI Datepicker用のstyle(Themeに合わせてお好みで上書きして使う) */ |
- | | + | |
- | + | sunday: | |
- | | + | saturday: " |
- | | + | |
+ | } | ||
}; | }; | ||
/** | /** | ||
行 109: | 行 109: | ||
this._userCallback = callback; | this._userCallback = callback; | ||
- | | + | var cache = this._caches[start + " |
- | // | + | |
- | | + | |
- | if (cache) { | + | |
- | callback(cache, | + | |
- | continue; | + | |
- | } | + | |
- | // | + | if (cache) { |
- | var url = location.protocol + "// | + | callback(cache, 0); |
- | url += encodeURIComponent(this.userIds[i]) + "/"; | + | |
- | url += this.visibility + "/" + this.projection; | + | |
- | | + | |
- | url += "& | + | |
- | url += "& | + | |
- | + | ||
- | // | + | |
- | var script = document.createElement(" | + | |
- | | + | |
- | script.src = url; | + | |
- | script.charset = " | + | |
- | document.body.appendChild(script); | + | |
} | } | ||
+ | |||
+ | //URL作成 | ||
+ | var url = GCalHolidays.apiUrl + "? | ||
+ | |||
+ | // | ||
+ | var script = document.createElement(" | ||
+ | script.type = " | ||
+ | script.src = url; | ||
+ | script.charset = " | ||
+ | document.body.appendChild(script); | ||
}; | }; | ||
/** | /** | ||
| | ||
| | ||
+ | | ||
+ | | ||
*/ | */ | ||
- | GCalHolidays.decode = function(gdata) { | + | GCalHolidays.decode = function(gdata, start, end) { |
- | var days = GCalHolidays._entries2days(gdata.feed.entry); | + | var days = GCalHolidays._entries2days(gdata.items); |
- | var href = gdata.feed.link[3].href; | + | |
- | + | ||
- | // | + | |
- | var userId = decodeURIComponent(href.split("/" | + | |
- | var index; | + | |
- | for (var i = 0, len = this.userIds.length; | + | |
- | if (this.userIds[i] == userId) { | + | |
- | index = i; | + | |
- | break; | + | |
- | } | + | |
- | } | + | |
// | // | ||
- | | + | this._caches[start + " |
- | | + | |
// | // | ||
- | this._userCallback(days, | + | this._userCallback(days, |
}; | }; | ||
/** | /** | ||
行 164: | 行 147: | ||
*/ | */ | ||
GCalHolidays._entries2days = function(entries) { | GCalHolidays._entries2days = function(entries) { | ||
+ | var days = []; | ||
+ | var cnt = 0; | ||
+ | |||
if (!entries) { | if (!entries) { | ||
- | return | + | return |
} | } | ||
- | |||
- | // | ||
- | entries.sort(function(a, | ||
- | return (a.gd$when[0].startTime > b.gd$when[0].startTime) ? 1 : -1; | ||
- | }); | ||
// | // | ||
- | var days = []; | ||
for (var i = 0, len = entries.length; | for (var i = 0, len = entries.length; | ||
- | var ymd = entries[i].gd$when[0].startTime.split(" | + | var entry = entries[i]; |
- | | + | var ymd = entry.start.date.split(" |
- | | + | |
- | | + | |
+ | year: ymd[0] * 1, | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | cnt++; | ||
} | } | ||
+ | |||
return days; | return days; | ||
}; | }; | ||
+ | |||
+ | /** | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | */ | ||
+ | GCalHolidays.datepicker = function(year, | ||
+ | setTimeout(function() { // | ||
+ | for (var i = 0, len = (inst.settings.numberOfMonths || 1); i < len; i++) { | ||
+ | GCalHolidays.get(function(holidays) { | ||
+ | for (var j = 0, len2 = holidays.length; | ||
+ | var h = holidays[j]; | ||
+ | var s = " | ||
+ | |||
+ | inst.dpDiv.find(s).each(function() { | ||
+ | if ($(this).text() == h.date) { | ||
+ | $(this).addClass(" | ||
+ | return false; | ||
+ | } | ||
+ | }); | ||
+ | } | ||
+ | }, year, month); | ||
+ | | ||
+ | month++; | ||
+ | | ||
+ | if (month > 12) { | ||
+ | year++; | ||
+ | month = 1; | ||
+ | } | ||
+ | } | ||
+ | }, 1); | ||
+ | }; | ||
+ | /** | ||
+ | | ||
+ | */ | ||
+ | if (window.$ && $.datepicker && $.datepicker.setDefaults) { | ||
+ | $.datepicker.setDefaults({ | ||
+ | beforeShow: function(input, | ||
+ | var date = $(input).datepicker(" | ||
+ | GCalHolidays.datepicker(date.getFullYear(), | ||
+ | }, | ||
+ | beforeShowDay: | ||
+ | return [true, { 0: " | ||
+ | }, | ||
+ | onChangeMonthYear: | ||
+ | }); | ||
+ | |||
+ | $(function() { // | ||
+ | var styles = GCalHolidays.datepickerStyles; | ||
+ | var css = ""; | ||
+ | css += " | ||
+ | css += " | ||
+ | css += " | ||
+ | $(" | ||
+ | }); | ||
+ | } | ||
</ | </ | ||
+ | ==== GCalendar-Holidays.php ==== | ||
+ | <code php> | ||
+ | <?php | ||
+ | /** | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | */ | ||
+ | |||
+ | // Google APIのKEY | ||
+ | $googleApiKey = 'set your google api key!'; | ||
+ | |||
+ | // GoogleカレンダーのID | ||
+ | $calendarId = ' | ||
+ | |||
+ | // 日付範囲 | ||
+ | $timeMin = $_GET[' | ||
+ | $timeMax = $_GET[' | ||
+ | validate($timeMin); | ||
+ | validate($timeMax); | ||
+ | |||
+ | // Google Calendar API V3のパラメータ | ||
+ | $params = array( | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ); | ||
+ | |||
+ | // Google Calendar API V3のURL | ||
+ | $apiUrl = ' | ||
+ | $apiUrl .= rawUrlEncode($calendarId) . '/ | ||
+ | $apiUrl .= http_build_query($params); | ||
+ | |||
+ | // 取得&出力 | ||
+ | header(' | ||
+ | echo ' | ||
+ | |||
+ | // 不正文字列は弾く | ||
+ | function validate($date) { | ||
+ | if (!preg_match('/ | ||
+ | throw new Exception($date); | ||
+ | } | ||
+ | } | ||
+ | </ |
javascript/google-calendar-holidays.1273787515.txt.gz · 最終更新: 2010/05/14 06:51 by dgbadmin