CakePHPのvendorsでPEAR::SOAPを試してみた

CakePHPで作成中のカレンダーで、祝日のデータを取得できないか色々考えていました。自動判定はなかなか難しそうなので、祝日用のデータベーステーブルを作って年1回、手作業でメンテすればいいかな?とか考えましたが、ここはやはりWeb2.0っぽくSOAPを使って祝日情報を取得しようと思います。

祝日をSOAPで取得させてくれるサービスを探してみたところ、下記のサイトを発見しました。

bear.mini:休日情報Webサービス

また、レンタルサーバーの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さんの方が使いやすそうなんですよね…(^^;)

CakePHPでカレンダーアプリ作成に挑戦(2)

カレンダーアプリ作るからには、まずはカレンダーを表示するところから始めなければ話になりません。わざわざ一からカレンダー生成のスクリプトを書くのも面倒なので、誰かCakePHPで同じようなことしている方がいらっしゃらないかググッていたところ、素晴らしいブログ記事を発見!

CREATIVE@INTERACTIVE : CakePHPとカレンダー表示(2)

日が結構開いてるようで…。

再開されることを願ってトラックバックさせていただきます。(´∀`)

PHPはプログラム初心者だったころ半年程度やった程度なのでPEARとか全然分からないのですが、こちらの記事のおかげで(…というか丸々コピー)PHPでカレンダー出力することが出来ました。

ただ、CakePHPのモデル名が「Calendar」だと、Pear::Calendarが生成するオブジェクト名と重複してしまうため登録や更新処理を実装するところで上手くいかない気がします。とりあえず、CakePHP側のモデル名を「Schedule」に変更することで解決。

cake_cal.gif

cal_add.gif

cal_edit.gif

とりあえず、カレンダーの表示と登録・編集機能を実装するところまで進めることが出来ました。続きはまた後日。

CakePHPでカレンダーアプリ作成に挑戦(1)

遅い夏休みをいただいていたため、久しぶりの更新。

最近、CakePHPを使ってカレンダーアプリを作成中で、現段階でこのような感じ。

cake_cal.gif

実はフレームワークを使ってアプリ作るのは、これが初めてだったりします…(つД`)。(普通はStrutsぐらいやってますよね…。)

明日から、進捗をブログにUPしていこうと思います。