simplepie.inc ・・・ すごく仕様かわってたりする

2007/08/27 | XML

RSSをパースするためのライブラリにはいくつかある。有名どころはmagpieとsimplepieだと思う。自分はsimplepieを使っている。
ここ最近横着をして最新版を使っていなかったのだが、今日久しぶりに最新版のsimplepie.incをダウンロードして使ってみた・・・動かない。こともあろうに、ことごとく「Call to undefined method」が出る。なぜ?。

ソースを確認してみたら、実際問題、以前使用していたメソッドがなかった。ということで必要最小限のサンプルを書いてみて動作することを確認した。
困ってしまっている人がいたら以下のサンプルをどうぞ。

$feed=new SimplePie;
$feed->set_cache_location(‘./cache/’);
$feed->set_feed_url($target);
$feed->init();
$feedItems=$feed->get_items();
$entries=array();
foreach($feedItems as $item){
  $entry=array();
  $entry[‘title’]=$item->get_title();
  $entry[‘description’]=$item->get_description();
  $entry[‘date’]=$item->get_date(“U”);
  $entry[‘link’]=$item->get_link();
  $entries[]=$entry;
}

fsockopenは時間がかかる?

不思議?というか、わからない現象に出くわして、ちょっと悩んでいる。
外部URLに接続してコンテンツを持ってくる(要はRESTでxmlを取得したりする)時には、いろいろな取得方法がある。
(1) fopenとかfile_get_contentsで取得
 引数にURLを直接渡す方法で一番簡単だが、データを取りこぼすことがある。
(2) curlで取得
 インストール時のコンパイルオプションによっては使えないことがある。
(3) fsockopenで直接HTTPを話して取得
 直接HTTPを話すスクリプトを用意する必要がある。

PEARのHTTP_Requestを使うという選択肢もあるが、これも結局は内部で上記を呼び出している(と思う)ので同じことだ。
上記で一番確実な方法は(3)のfsockopenを使う方法だ。PHPの標準関数でできるし、取りこぼしもないので、これを使うべきだ(と思う)。しかし、ちょっと困ったことになってしまった。fsockopenでデータを取得するのに時間がかかるのだ。
fsockopenの手順としては、以下のような感じ。
(1) fsockopenで相手サーバに接続
(2) fputでリクエストを送信
(3) fgetsでレスポンスを受信

しかし(1)で異常に時間がかかってしまうのだ。時間にして20秒くらいかかる。これがなぜだかわからない・・・。
ちなみに当該URLを、ブラウザ上で開くと数秒で表示される。それにfile_get_contentsで取得しても、やはり数秒で結果を返してくる。

ん〜〜〜。

いろいろ調べてみたが理由がわからなかった。レスポンスを受信するのに時間がかかるのであれば、相手サーバの処理時間とか、通信速度の問題か、とも思うのだが、fsockopenで時間がかかるのが不思議だ。fsockopenで時間がかかるのなら、file_get_contentsでも時間がかかってしまいそうなのだが、あいにくこちらは時間がかからない。

どなたか、思い当たるところがあったら教えていただきたい。
どうぞよろしくお願いします。

PEARで依存関係の少ないライブラリ

2007/08/24 | その他PEAR全般

最近Xoopsでのモジュール開発やcakePHPでの開発が多いのだが、いずれもPEARライブラリとの相性という点ではそれほどいいわけではない。Xoopsはモジュール単位で開発することが多いので、別途PEARのライブラリを用意しておく、というのはいただけない。モジュールに同梱できる程度にとどめておくべきだ。かといって大量のPEARファイル群をモジュールに同梱するというのは考え物だ。ファイルが多いとそれだけコードが読みにくくなるので、PEARのように複雑に依存関係で絡み合っているようなものはいれたくない、というのが心情だ。
cakePHPはいちおう基本コンセプトとして「PEARなどの外部ライブラリを使用することなく・・・」と謳っているので、なんとなく気分的に使いたくないのだ。
とは言ってもPEARは有用なツールであるので捨てがたい。ということで依存関係がほとんどないようなものに限定して、それらの開発で使用することにしている。
一番手放せないのはPager。ページング処理ではもう手放せない。Pagerは本体(Pager.php)とその配下のディレクトリ一つ(ファイル数個)を丸ごとコピーすれば事足りる。
Cache_Liteもシンプルですばらしい。基本的に本体(Lite.php)だけあれば動作する。ただしエラー処理ルーチンとして、エラーが発生した場合にPEARのエラーオブジェクトを返すよう実装されているので、extendsしたクラスを作成し、その部分だけfalseを返すよう書き換えてしまえばいい。
この二つはシンプルで、非常にすばらしいライブラリだ。

本当はHTML_QuickFormを使いたいのだが、こちらは少し状況が変わってくる。ファイル数も多くなるし、PEAR内での依存関係も少しある。それにXoopsで使用する場合は、Xoopsで用意されたフォーム生成クラスとバッティングしてしまっているということで、どうもためらってしまうのだ。便利だからいいじゃん、って思えるのだが・・・、どこかで一線を越えてチャレンジしてみようと思う。

minihakuでのアカウント情報表示

2007/08/23 | XOOPS

minihakuでは、アクセスがあったURLから、アカウント登録、アカウント編集、アカウント情報表示の場合だけプログラムを乗っ取り(hookし)、minihaku/include内の各スクリプトへその動作を流すよう設計されている。しかしアカウント情報表示の場合に限っては、hookはしているものの実際には何もしていない(アカウント情報表示は結局はXoops本来のものを使用していて、minihakuでは何もしていない)。これではきっと後継版を作るのに都合が悪いだろうと思い、アカウント情報表示もminihaku内で動作するようスクリプトとテンプレートを追加した。実際の作業は以下のとおり。

(1) テンプレートマネージャーから「system_userform.html」をダウンロードし、minihaku_userinfo.htmlとリネームしてminihakuモジュール内のテンプレートディレクトリに配置。
(2) xoops_version.phpのテンプレートの設定で、上記を追加。
(3) Xoopsのルートディレクトリにあるuserinfo.phpの中身を丸ごとコピーして、minihaku/include/userinfohook.phpペースト。ただし、テンプレートの指定を(1)で指定したテンプレートに変更しておく。
(4) minihakuモジュールのアップデート。

これでOK。minihaku内でアカウント情報表示プログラムも乗っ取ることが出来た。

白扇・ミニ白後継モジュールのその後

2007/08/22 | XOOPS

Xoops Cubeのリリース時に白扇後継モジュール開発を継続しようかどうか迷ってはいたが、依然としてその野望(?)は消えていない。Cubeでのユーザ関連機能のモジュール化に伴い、おそらく仕様ががらっと変わっているとは思うが、これまで蓄積した知識をこれからも利用したいので、いちおう開発は続けている(といってもまだ検証中だが)。
今回「物は試し」ということで、minihakuを実際にxoopsに組み込んでみた。といっても追加項目を設定したわけではなく、必要最低限な項目に限って登録・編集できるようにしてみた。
実際にしてみた作業は簡単。minihakuのconfig.php内にデフォルトで記入されている項目を全てコメントアウトし、テンプレートで記述されている不要な項目についても全てコメントアウトしてみた。実際の処理ルーチンには手を入れなかったが、これだけで対応できた(ログインID、メールアドレス、パスワードだけにしてみた)。
ここまでやってみてわかったこと。ユーザ情報の登録・編集の各機能はminihakuで用意されているが、ユーザ情報参照機能はXoops標準の機能を利用しているのだが、これは違和感がある。やはり入力した内容に応じた情報が表示されないと・・・。幸い、プログラムを組み込む余地だけは残してあるようなので、おいおい組み込んでみることにする。
実際にminihakuを組み込むことで、後継モジュール作成の基盤がずいぶん明確になったような気がする。ただ、のんびり作っていくことにした。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net