PHPカレンダーに祝日の表示を追加

祝日のデータを得るにはPHP用のライブラリ集「PEAR(ぺあー)」にあるものを使えば簡単らしいが、Google カレンダーのサイトから引っ張ってくる方法もあるらしく、簡単そうなので試してみました。以下のサイトを参照させていただきました。
Googleカレンダーから祝日情報を取得。 | almondlab.

試しに、以下のテキストを作成し、.phpファイルとして保存し、サーバーへアップ。その後、ブラウザで表示してみました。

<!DOCTYPE html>
<html lang="ja">
<head>
<title>祝日の連想配列を作る</title>
<meta charset="UTF-8">
&lt;?php</p>

<p>//Googleカレンダーから祝日を取得
function getHolidays($year) {
$holidays = array();</p>

<p>//Googleカレンダーから、指定年の祝日情報をJSON形式で取得するためのURL
$url = sprintf(
'http://www.google.com/calendar/feeds/%s/public/full?alt=json&amp;%s&amp;%s',
'japanese__ja%40holiday.calendar.google.com',
'start-min='.$year.'-01-01',
'start-max='.$year.'-12-31'
);</p>

<p>//JSON形式で取得した情報を配列に変換
$results = json_decode(file_get_contents($url), true);</p>

<p>//年月日(例:20120512)をキーに、祝日名を配列に格納
foreach ($results['feed']['entry'] as $value) {
$date = str_replace('-', '', $value['gd$when'][0]['startTime']);
$title = $value['title']['$t'];
$holidays[$date] = $title;
}</p>

<p>//祝日の配列を早い順に並び替え
ksort($holidays);</p>

<p>//配列として祝日を返す
return $holidays;
}</p>

<p>?&gt;
&lt;/head&gt;
&lt;body&gt;</p>

<p>&lt;?php</p>

<p>for ($i = 2010; $i&lt; 2016; $i++) {
/////////年を指定し、その年の祝日データをGoogleカレンダーから得る/////////
$holidays = getHolidays($i);</p>

<p>/////////連想配列のキーと値を表示を表示する/////////
foreach ($holidays as $key =&gt; $val) {
print "\$holidays[\"".$key."\"] =\"".$val."\";&lt;BR&gt;";
}
}</p>

<p>?&gt;
&lt;/body&gt;
&lt;/html&gt;



確かに、データが取れているのですが、多少の問題がありそうです。

(1)Googleサイトがダウンしたら使えない。またデータ取得に多少時間がかかる。

(2)現在は取得できるデータは、2012年~2016年分のみ。まあ、これは問題ではない。

(3)データに抜けがある。

・・・という訳で、取得したデータに、不足分を追加して、そのままGoogleサイトへのアクセスなしで使えるようにしたいと思います。

赤文字の行が追加したデータです。

祝日の確認には、以下のサイトを利用させていただきました。
2013年3月カレンダー – 日めくりカレンダー.com

$holidays[“20120101″] =”元日”;
$holidays[“20120102″] =”振替休日”;
$holidays[“20120109″] =”成人の日”;
$holidays[“20120211″] =”建国記念の日”;
$holidays[“20120320″] =”春分の日”;
$holidays[“20120429″] =”昭和の日”;
$holidays[“20120430″] =”振替休日”;
$holidays[“20120503″] =”憲法記念日”;
$holidays[“20120504″] =”みどりの日”;
$holidays[“20120505″] =”こどもの日”;
$holidays[“20120716″] =”海の日”;
$holidays[“20120917″] =”敬老の日”;
$holidays[“20120922″] =”秋分の日”;
$holidays[“20121008″] =”体育の日”;
$holidays[“20121103″] =”文化の日”;
$holidays[“20121123″] =”勤労感謝の日”;
$holidays[“20121223″] =”天皇誕生日”;
$holidays[“20121224″] =”振替休日”;
$holidays[“20130101″] =”元日”;
$holidays[“20130114″] =”成人の日”;
$holidays[“20130211″] =”建国記念の日”;
$holidays[“20130320″] =”春分の日”;
$holidays[“20130429″] =”昭和の日”;
$holidays[“20130503″] =”憲法記念日”;
$holidays[“20130504″] =”みどりの日”;
$holidays[“20130505″] =”こどもの日”;
$holidays[“20130506″] =”振替休日”;
$holidays[“20130715″] =”海の日”;
$holidays[“20130916″] =”敬老の日”;
$holidays[“20130923″] =”秋分の日”;
$holidays[“20131014″] =”体育の日”;
$holidays[“20131103″] =”文化の日”;
$holidays[“20131104″] =”振替休日”;
$holidays[“20131123″] =”勤労感謝の日”;
$holidays[“20131223″] =”天皇誕生日”;
$holidays[“20140101″] =”元日”;
$holidays[“20140113″] =”成人の日”;
$holidays[“20140211″] =”建国記念の日”;
$holidays[“20140321″] =”春分の日”;
$holidays[“20140429″] =”昭和の日”;
$holidays[“20140503″] =”憲法記念日”;
$holidays[“20140504″] =”みどりの日”;
$holidays[“20140505″] =”こどもの日”;
$holidays[“20140506″] =”振替休日”;
$holidays[“20140721″] =”海の日”;
$holidays[“20140915″] =”敬老の日”;
$holidays[“20140923″] =”秋分の日”;
$holidays[“20141013″] =”体育の日”;
$holidays[“20141103″] =”文化の日”;
$holidays[“20141123″] =”勤労感謝の日”;
$holidays[“20141124″] =”振替休日”;
$holidays[“20141223″] =”天皇誕生日”;
$holidays[“20150101″] =”元日”;
$holidays[“20150112″] =”成人の日”;
$holidays[“20150211″] =”建国記念の日”;
$holidays[“20150321″] =”春分の日”;
$holidays[“20150429″] =”昭和の日”;
$holidays[“20150503″] =”憲法記念日”;
$holidays[“20150504″] =”みどりの日”;
$holidays[“20150505″] =”こどもの日”;
$holidays[“20150506″] =”振替休日”;
$holidays[“20150720″] =”海の日”;
$holidays[“20150921″] =”敬老の日”;
$holidays[“20150922″] =”国民の休日”; // 国民の祝日 → 国民の休日
$holidays[“20150923″] =”秋分の日”;
$holidays[“20151012″] =”体育の日”;
$holidays[“20151103″] =”文化の日”;
$holidays[“20151123″] =”勤労感謝の日”;
$holidays[“20151223″] =”天皇誕生日”;
$holidays[“20160101″] =”元日”;
$holidays[“20160111″] =”成人の日”;
$holidays[“20160211″] =”建国記念の日”;
$holidays[“20160320″] =”春分の日”;
$holidays[“20160321″] =”振替休日”;
$holidays[“20160429″] =”昭和の日”;
$holidays[“20160503″] =”憲法記念日”;
$holidays[“20160504″] =”みどりの日”;
$holidays[“20160505″] =”こどもの日”;
$holidays[“20160718″] =”海の日”;
$holidays[“20160919″] =”敬老の日”;
$holidays[“20160922″] =”秋分の日”;
$holidays[“20161010″] =”体育の日”;
$holidays[“20161103″] =”文化の日”;
$holidays[“20161123″] =”勤労感謝の日”;
$holidays[“20161223″] =”天皇誕生日”;