CakePHPのvendorsでPEAR::SOAPを試してみた
Mon, Oct 8, 2007CakePHPで作成中のカレンダーで、祝日のデータを取得できないか色々考えていました。自動判定はなかなか難しそうなので、祝日用のデータベーステーブルを作って年1回、手作業でメンテすればいいかな?とか考えましたが、ここはやはりWeb2.0っぽくSOAPを使って祝日情報を取得しようと思います。
祝日をSOAPで取得させてくれるサービスを探してみたところ、下記のサイトを発見しました。
また、レンタルサーバーのPHPのバージョンが4のため、SOAP機能を使うためにはPEAR::SOAPを使わなければいけないことが判明。CakePHPでは、サーバにPEARがインストールされていなくてもvendorsを使うことでPEARを使用することができるようです。ただ、この設定が上手くいかず苦労しました…。自分で解決するのは難しいと判断し、CakePHPフォーラムで質問をしました。
・ vendorsにpear::soapを組み込んでSOAPを使いたい
すぐにshunさんという方から返信をいただき、その情報を元に試してみたところ、vendorsでPEARを使用することが出来るようになりました。そのフォルダ構成などをまとめておきます。
1.app/vendors/pear_ini.php(下記のソースで配置)
define(‘PEAR_PATH’, dirname(\__FILE__) . DS . ‘PEAR’);
set_include_path(PEAR_PATH . PATH_SEPARATOR . get_include_path());
2.必要なパッケージをPEARのサイトからダウンロードし、vendorsに配置
app/vendors/PEAR/HTTP/*
app/vendors/PEAR/NET/*
app/vendors/PEAR/SOAP/*
3.app/views/schedules/index.thtml(適当なビューファイルでテスト)
vendor(“pear_ini”);
require_once(‘SOAP’ . DS . ‘Client.php’);
$wsdl = new SOAP_WSDL(“http://bearmini.net/publicholidays/JP.asmx?WSDL”, array(‘timeout’ => 20));
$proxy = $wsdl->getProxy();
$ary_result = $proxy->GetPublicHolidayNames(2007,10,8);
echo $ary_result[0]->value;
これで、「2007/10/8」の祝日である「体育の日」が出力されます。気になるのはbear.miniさんのサーバに負荷がどれぐらいかかってしまうかってとこでしょうか。Googole Calendar APIを使う方法もあるみたいなんですが、bear.miniさんの方が使いやすそうなんですよね…(^^;)