javascript:google-calendar-holidays
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
javascript:google-calendar-holidays [2013/04/08 23:56] – 0.5.0 複数表示のカレンダーに対応 dgbadmin | javascript:google-calendar-holidays [2015/09/22 14:19] (現在) – [GCalHolidays] dgbadmin | ||
---|---|---|---|
行 5: | 行 5: | ||
{{: | {{: | ||
- | [[http://code.google.com/ | + | [[https://developers.google.com/ |
Googleカレンダーに登録されている祝日なので、ハッピーマンデーの時のように休日の制度が変わっても柔軟に対応できます。\\ | Googleカレンダーに登録されている祝日なので、ハッピーマンデーの時のように休日の制度が変わっても柔軟に対応できます。\\ | ||
ただしGoogleカレンダーに登録されている祝日が間違っている(あるいは最新でない)場合もそのまま表示されます。: | ただしGoogleカレンダーに登録されている祝日が間違っている(あるいは最新でない)場合もそのまま表示されます。: | ||
- | [[Yahho Calendar|Yahho Calendar]]または[[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に祝日を表示する ===== | ===== jQuery UI Datepickerに祝日を表示する ===== | ||
- | バージョン0.3.0からは[[http:// | + | バージョン0.3.0からは[[http:// |
バージョン0.4.0からはjQuery UI Datepickerの土曜日・日曜日に背景色を付けるようにしました。 | バージョン0.4.0からはjQuery UI Datepickerの土曜日・日曜日に背景色を付けるようにしました。 | ||
使い方は、jQuery UI Datepickerを使うページでGcalendar HolidaysのJavaScriptファイルを読み込むだけです。(下記サンプル参照) | 使い方は、jQuery UI Datepickerを使うページでGcalendar HolidaysのJavaScriptファイルを読み込むだけです。(下記サンプル参照) | ||
+ | |||
===== サンプル ===== | ===== サンプル ===== | ||
行 25: | 行 32: | ||
※サンプルで使っているのは最新のBeta版の場合あり | ※サンプルで使っているのは最新のBeta版の場合あり | ||
+ | |||
===== ライセンス ===== | ===== ライセンス ===== | ||
行 32: | 行 40: | ||
===== ダウンロード ===== | ===== ダウンロード ===== | ||
- | [[http:// | + | [[http://g.0-oo.net/ |
※ダウンロードのリンク先が最新のBeta版の場合あり | ※ダウンロードのリンク先が最新のBeta版の場合あり | ||
行 38: | 行 46: | ||
===== GCalendar Holidays API リファレンス ===== | ===== GCalendar Holidays API リファレンス ===== | ||
==== GCalHolidays ==== | ==== GCalHolidays ==== | ||
+ | === GCalHolidays.apiUrl === | ||
+ | * GCalendar-Holidays.phpのURLをセットしておく。 | ||
+ | |||
=== GCalHolidays.get(callback, | === GCalHolidays.get(callback, | ||
* 概要 | * 概要 | ||
行 52: | 行 63: | ||
* year : [オプション] 対象とする年。指定しないと今年のデータを取得する。 | * year : [オプション] 対象とする年。指定しないと今年のデータを取得する。 | ||
* month : [オプション] 対象とする月。指定しないと一年分のデータを取得する。 | * month : [オプション] 対象とする月。指定しないと一年分のデータを取得する。 | ||
- | |||
- | === GCalHolidays.userIds === | ||
- | * GoogleカレンダーのIDの配列を指定するプロパティ | ||
- | * デフォルトはGoogleの公式の日本の祝日 | ||
- | |||
- | === GCalHolidays.maxResults === | ||
- | * 取得するデータの最大件数を指定するプロパティ | ||
- | * デフォルトは31 | ||
=== GCalHolidays.datepickerStyles === | === GCalHolidays.datepickerStyles === | ||
- | * [[http:// | + | * [[http:// |
===== さらに進んだ使い方 ===== | ===== さらに進んだ使い方 ===== | ||
- | GCalHolidaysのプロパティを変更すれば、他の国の祝日や祝日以外のデータ(Googleカレンダーで公開されているイベントのデータ)も取得できます。 | + | GCalendar-Holidays.phpで指定するGoogleカレンダーのIDを変更すれば、他の国の祝日や祝日以外のデータ(Googleカレンダーで公開されているイベントのデータ)も取得できます。 |
- | + | ||
- | 例:サッカーの日本代表のスケジュールを取得する場合 | + | |
- | <code javascript> | + | |
- | GCalHolidays.userIds = [" | + | |
- | GCalHolidays.max = 50; | + | |
- | GCalHolidays.get(callback, | + | |
- | </ | + | |
行 81: | 行 77: | ||
| | ||
| | ||
- | | + | |
- | | + | |
| | ||
- | * | ||
- | | ||
- | | ||
- | | ||
*/ | */ | ||
var GCalHolidays = { | var GCalHolidays = { | ||
- | /** GoogleカレンダーのID(複数でも可) */ | + | /** Google |
- | userIds: [ | + | |
- | " | + | |
- | //" | + | |
- | //" | + | |
- | ], | + | |
- | + | ||
- | /** 取得するイベント(スケジュール)の最大件数 | + | |
- | | + | |
- | + | ||
- | // @see http:// | + | |
- | visibility: "public", | + | |
- | + | ||
- | // @see http://code.google.com/intl/ | + | |
- | projection: " | + | |
/** jQuery UI Datepicker用のstyle(Themeに合わせてお好みで上書きして使う) */ | /** jQuery UI Datepicker用のstyle(Themeに合わせてお好みで上書きして使う) */ | ||
行 130: | 行 109: | ||
this._userCallback = callback; | this._userCallback = callback; | ||
- | | + | var cache = this._caches[start + " |
- | | + | |
- | | + | |
- | callback(cache, | + | callback(cache, |
- | | + | |
- | } | + | } |
- | | + | |
- | var url = location.protocol | + | var url = GCalHolidays.apiUrl |
- | url += encodeURIComponent(this.userIds[i]) + "/"; | + | |
- | url += this.visibility + "/" | + | |
- | url += "?alt=json-in-script& | + | |
- | url += "& | + | |
- | url += "& | + | |
- | | + | |
- | var script = document.createElement(" | + | var script = document.createElement(" |
- | script.type = " | + | script.type = " |
- | script.src = url; | + | script.src = url; |
- | script.charset = " | + | script.charset = " |
- | document.body.appendChild(script); | + | 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 links = gdata.feed.link; | + | |
- | var href = ""; | + | |
- | + | ||
- | for (var j = 0, len2 = links.length; | + | |
- | if (links[j].rel == " | + | |
- | href = links[j].href; | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | var userId = decodeURIComponent(href.split("/" | + | |
- | var index = null; | + | |
- | + | ||
- | // | + | |
- | 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, |
}; | }; | ||
/** | /** | ||
行 195: | 行 148: | ||
GCalHolidays._entries2days = function(entries) { | GCalHolidays._entries2days = function(entries) { | ||
var days = []; | var days = []; | ||
+ | var cnt = 0; | ||
if (!entries) { | if (!entries) { | ||
return days; | return days; | ||
} | } | ||
- | |||
- | // | ||
- | entries.sort(function(a, | ||
- | return (a.gd$when[0].startTime > b.gd$when[0].startTime) ? 1 : -1; | ||
- | }); | ||
// | // | ||
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++; | ||
} | } | ||
行 275: | 行 230: | ||
</ | </ | ||
+ | ==== 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.1365432973.txt.gz · 最終更新: 2013/04/08 23:56 by dgbadmin