« Yahoo! デベロッパーネットワークで遊んでみる | メイン | rpm , yum の使い方を覚えておく »

PHPにdomxmlモジュールをインストールしてみる



Yahoo! デベロッパーネットワークでサンプルを作ろうとしていたのだが、「xml」の解析ではまる。
自宅サーバには「domxml」が入っていないのでとりあえず「xml_parse_into_struct()」で対応したのだけど、どうにもソースが汚い...。エレガントじゃない...。ひとえにわたしの技術不足なのですが...。
Yahoo!のSDKダウンロードのサンプルコードでも使ってるので「domxml」のインストールを考える。

この拡張モジュールは、 --with-dom=[DIR] を指定してPHPを設 定した場合のみ利用可能です。
とのことなので、早速「domxml」のモジュールを探すのですが...、ないのですよ。 PHPのマニュアルページへ行き、PECLレポジトリからダウンロードできるというので、行ってみて検索したらdomxmlのページには辿り着くも「Available Releases」が無いっすよ。

途方にくれる。

気付く。

注意: この拡張モジュールは PECL レポジトリに移動されており、以下のバージョン以降 PHP にバンドルされなくなっています。 PHP 5.0.0.
ってことは「バージョン4.xにはバンドルされている」ってこと!?さっそくPHP本家のサイトからソースを取得する。今のバージョンは4.3.11。ソースのバージョンは4.4.4。いきなりこんなにバージョン上げて大丈夫か?今動いているPHPスクリプトに影響はないか?PHPは細かいバージョンの違いでバグがあったりするから心配...。まぁサーバは俺様の私物だからいいかっ! ダウンロードして
tar xvzf php-4.4.4.tar.gz
cd php-4.4.4

「phpinfo()」で現状のコンフィグを控えておく。「./configure」なのですが、「--with-dom 」を足す。ほんとに足すだけでいいのか?「 --with-dom=[DIR] 」とあるようにディレクトリの指定は?とりあえず「./configure」!

./configure --with-apxs=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/apache/conf --enable-versioning --enable-mbregex --with-pgsql=/usr/local/pgsql --enable-mbstring --enable-mbstr-enc-trans --enable-ftp --with-kakasi --with-namazu --without-mysql --with-dom
checking for DOM support... yes
checking for libxml version... >= 2.4.14
configure: error: DOMXML requires ZLIB. Use --with-zlib-dir=<DIR>
ここでエラーで止まる。...。 「--with-zlib-dir=<DIR>」をしろと怒られる。でも「zlib」のディレクトリってどこ?強引にディレクトリを指定せずにもう一回「./configure」!
./configure --with-apxs=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/apache/conf --enable-versioning --enable-mbregex --with-pgsql=/usr/local/pgsql --enable-mbstring --enable-mbstr-enc-trans --enable-ftp --with-kakasi --with-namazu --without-mysql --with-dom --with-zlib-dir
コンフィグ成功!?おそるおそるmake
make
make install
インストール成功!?

phpinfo()で確認。「domxml」の項目あります。「enable」となっている。問題は本当に使えるかどうか。

PHPのテクメモ | Yahoo Japanのウェブ検索APIを参考にさせてもらう。エラーは出ない。「domxml」はうまく動いているようだ。ただ検索結果がおかしい...。日本語コードの違いか?
「YahooWebSearch.class.php」の方で検索ワードを飛ばす前にURLエンコードしたら正しく動きました。

function getResults(){
if(strlen($this->appID)==0 || strlen($this->phrase)==0){
return false;
}else{
$this->phrase=rawurlencode($this->phrase);//ここを追加
$query=$this->buildQuery($this->phrase,$this->appID,$this->format,
$this->start,$this->results,$this->similar);
$xml=file_get_contents($this->reqURL.$query);

得られた結果は、

[0]=>
array(3) {
["Title"]=>
string(15) "Wii [ウィー]"
["Summary"]=>
string(222) "任天堂の据置型ゲーム機「Wii(ウィー)」の公式サイト(以下省略)"
["Url"]=>
string(30) "http://www.nintendo.co.jp/wii/"
}
[1]=>
array(3) {
["Title"]=>
string(7) "Wii.com"
["Summary"]=>
string(144) "任天堂 , 製品とサービス任天堂 , Nintendo , ニンテンド(以下省略)"
["Url"]=>
string(15) "http://wii.com/"
}
[2]=>
array(3) {
["Title"]=>
string(77) "N-Wii.net 任天堂「Wii」のニュース、ソフト発売予定、本体スペック・機能紹介など"
["Summary"]=>
string(223) "任天堂の新型ゲーム機「Wii(ウィー)」の最新ニュース、ソ(以下省略)"
["Url"]=>
string(21) "http://www.n-wii.net/"
}
と期待通り。URLが一個飛びになることもなし。こないだ作ったサンプルを書き直してみよう。

参考URL:
PHPのテクメモ | Yahoo Japanのウェブ検索API

PHP: DOM XML 関数 - Manual


トラックバック

このエントリーのトラックバックURL:
http://www.duelsisters.com/cgi-bin/mt/mt-tb.cgi/19

コメント (2)

PHPテクメモのかおるんです。トラックバックありがとうございます。urlencodeの件、私の転記ミスのようです。ご指摘いただきありがとうございました。あとで直しておきます。今後ともよろしくお願いいたします。

sosukanri:

>>かおるんさま
こんばんは。
PHP初心者なのでこれからも参考にさせていただきます。こちらこそよろしくお願いします。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2007年01月31日 02:14に投稿されたエントリーのページです。

ひとつ前の投稿は「Yahoo! デベロッパーネットワークで遊んでみる」です。

次の投稿は「rpm , yum の使い方を覚えておく」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

スポンサードリンク

人気blogランキングへ