仕事、学んでいること、興味のあることなどの「アウトプット」を書き出すブログ。心を高め、魂を磨くために、今日も一生懸命働く。
AmazonウェブサービスのXMLデータを処理し続けて、
今回で第5段目をむかえることができました。
今日のテーマは、XMLReaderです。
実際、端から見たら、かなり無駄なんでしょうけど、
ぼくのようなプログラミング初心者は、
一丁前のセキュアなウェブサービスなんて、
まだ作れっこないので、
こうやって、課題を無理やり作って、
経験と知恵、ノウハウを積み上げていくのです!
今回の完成品は、以下のリンクからお確かめください。
⇒XMLReader版 書籍検索
あいかわらず、
タイトルと著者だけを表示させる、大変シンプルなものとなっております。^^
前回のSimpleXMLは、XML文書全体を、
まず読み込みますので、大きなデータの場合だと、
パフォーマンスに影響が出てくるようです。
ところが、XMLReaderは、
1件ずつ順番に読み込んでいくので、
文書量が大きい場合に、効果を発揮します。
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>PHPのXMLReaderを使ってAmazonウェブサービス</title>
<meta name="description" content="アマゾンウェブサービスからXMLデータを受け取り、PHPのXMLReaderを使って、変換しています。" />
</head>
<body>
<form method="POST" action="<?php $_SERVER['PHP_SELF'] ?>">
XMLReader版 書籍検索:
<input type="text" name="keywd" size="30" maxlength="255" value="<?php print($_POST['keywd']); ?>" />
<input type="submit" value="検索" />
</form>
<?php
// 検索ボックスに入力されたかの判定
if($_POST['keywd'] != '') {
$url = "http://ecs.amazonaws.jp/onca/xml";
$Service = "?Service=AWSECommerceService";
$AWSAccessKeyId = "&AWSAccessKeyId=*****************";
$Version = "&Version=2008-04-07";
$AssociateTag = "&AssociateTag=working16h-22";
$ContentType = "&ContentType=" . urlencode("text/xml");
$Operation = "&Operation=ItemSearch";
$SearchIndex = "&SearchIndex=Books";
$ResponseGroup = "&ResponseGroup=Medium";
$Keywords = "&Keywords=" . urlencode(htmlspecialchars($_POST['keywd']));
$urlall = $url.$Service.$AWSAccessKeyId.$Version.$AssociateTag.$ContentType.$Operation.$SearchIndex.$ResponseGroup.$Keywords;
$xReader=new XmlReader();
$xReader->open($urlall);
while($xReader->read()) {
switch($xReader->nodeType) {
case XmlReader::ELEMENT :
switch($xReader->name) {
case 'Items' :
// 飾りの処理
print("10件表示");
break;
default :
// $tmpDataの連想配列のキー
$tmpName=$xReader->name;
}
break;
case XmlReader::TEXT :
// 前タグと後ろタグの間の中身。とりあえず全てを代入
$tmpData[$tmpName]=$xReader->value;
break;
case XmlReader::END_ELEMENT :
switch($xReader->name){
case 'Item' :
// Itemsの中の10個のItem。Itemが閉じた時に出力。10件表示なので10回繰り返される。
print '<p>タイトル:<a href="' . $tmpData['DetailPageURL'] . '" target="_blank">' . $tmpData['Title'] . '</a><br />著者:' . $tmpData['Author'] . '</p>';
break;
default :
$tmpName='';
}
break;
}
}
// ifの閉じ
}
?>
</body>
</html>
【今回参考にしたもの】
XMLReaderは、
いろいろなことができるようですが、
今回は、本当にその一部分を使わせてもらいました。
少し構造を理解したら、
すぐに使えてしまうと思いますので、
使用感としては、まずまずの手ごたえでした。
それにしても、
今回も、独習PHPさんのお世話になってます。
PHPの学習のために、
最初は赤マンモス本を購入したのですが、
あっちはやや難易度が高く、
ピカピカの初心者には、あまり向いていないかもしれません。
次回は、SOAPかPEARに突入します!
<< PHPのSimpleXMLでAmazonのXMLをパース
[ 起業日記のホームへ ]
仕事の成果や興味を持って体験したこと、また今学んでいることで自分なりにまとめられるようになったことなど、とにかくアウトプットを中心として書いていくブログです。
「1日16時間 起業日記」の意味は、WEBの世界で起業した管理人が、京セラの稲盛和夫さん、HONDAの本田宗一郎さんのように、年間5,000時間以上を数十年と働き続けた名経営者達に憧れて、せめて時間だけでも同じことをしよう!という意気込みを表現しています。
けん♪
2008/10/12 at 5:19:31
同じように30超えてプログラムを本格的に始めた人間です。
PHPの勉強とか龍馬好きとか言う面で少し見てしまいましたw
かなりの初心者なので、PHPのSOAPのとこでてんてこまいですww
自分の場合、職辞めてぷう太郎なので職を探しながら勉強はしようと思っていますが・・。同じように1日16時間・・・・は無理でも10時間ぐらいは勉強に費やしてます・・・・。多分w(詰まったらwiki見まくったりしたり昔のマンガとか見てますがw)
また見させてもらいますー
koji
2008/10/12 at 10:01:53
けんさんはじめまして!けんさんも良い意味で龍馬(竜馬がゆく)に毒されてしまった人間ですね。笑
SOAPですか~。今度、教えてください~
ぼくは今、cakephpに取り組んでいて、それでいてブログの更新が止まってしまっています。
もうそろそろこの二ヶ月の成果をブログに書けそうです。
けんさんもcakephpいかがですか~??
けん♪
2008/10/12 at 12:03:14
SOAPさっぱりわかりませんwぐぐってもぐぐってもREST、RESTでww
本のSOAPってとこがAWSのバージョンが低い時のやり方のようで、バージョンアップしてからさっぱりその本のプログラムで出来ないし・・(;´▽`A“
PEARライブラリ、nuSoapとか、cakephpのやり方は書いてるのに
普通のやり方がどこにもない・・・・。。。。。
本のやり方が理解できても実践出来ないのが歯がゆいですww
普通に本買ってきた方が早いかなw
cakePHPはとりあえずフツーのPHP入門書が終わったら覗かせてもらいますー。
龍馬の近江屋は戦争で焼けてたって事実は判明しましたよね。最近。
柱の刀傷は偽物だったのでわ?と。
koji
2008/10/12 at 14:45:16
>本のSOAPってとこがAWSのバージョンが低い時のやり方のようで、
そ、そこぼくもまんまとはまったところです。結局、解決できずに諦めてしまいました。
確かに検索しても、古いやり方しか出てきませんでしたね。
本買うより、SOAP以外のやり方で納得する方が早いかもです。
>龍馬の近江屋は戦争で焼けてた
あんまり詳しく知りませんが、寺田屋が建て直しされたものだというニュースは最近聞いたような。
そもそも龍馬は小説のイメージが強く、実在の人物とはまったく違うとも言われますよね。
ぼくは「竜馬がゆく」の竜馬好きですから、そんなことは気にしませんけどね~♪
けん♪
2008/10/12 at 19:38:34
あはは。やっぱりそうですかねぇ・・・(;´▽`A“
それは凄い考えてたんですがw断念するべきかww
龍馬は前々から好きだったんですが、「おーい龍馬」でかなりハマりましたねぇ。竜馬がゆくをベースに漫画描いてるらしいんですが、なんかちっと違う描写があるとか言うのを聞いたような・・・。
確か龍馬が有名になったんは、死後、戦争の時に、天皇??の奥さんが「夢枕に見たことがない人が立って戦争に勝つと言われたけどあれは誰だったのか?」て聞いたら土佐の田中光顕が「それはきっと坂本龍馬」と言って、それが新聞に載ったのが始まりとか・・・。
なんか薩摩と長州中心の政治に一矢報おうとしたとか言われてますよね。。
まぁ、でも偉人の人の手紙とか見てたら、やっぱり凄い活躍をしたのは事実ぽいですね。。。勝海舟を切りに行ったってのは嘘とは言われてるけど・・・。
koji
2008/10/13 at 6:39:07
けんさんは「おーい龍馬」でハマッたんですか!
ぼくも全巻持ってますよ。
違う描写は結構あると思いますが、どちらも面白いと思います。
けんさんと話してたら、また「おーい龍馬」読みたくなりました~
けん♪
2008/10/15 at 22:43:16
kojiさんはUTF-8が?に文字化けするって現象ってなかったですか??
さっぱり直し方がわからずてんてこまいですw
php.iniとかもいじってますが・・・。うーん。
koji
2008/10/16 at 10:45:58
ヒントになるかわかりませんが、
上記のサンプルの
部分とか、
ブラウザの表示>文字エンコーディングを変えてみると、今どんな文字コードになっているかわかりますよ。
koji
2008/10/16 at 11:02:10
あと、上記サンプルの
ContentTypeやKeywordをurlencodeしておかないと、文字化けやらが起こったような記憶があります。
けん♪
2008/10/17 at 2:59:06
わかりましたっ。参考にします。
何やら文字化けしたのはおそらくphp.iniかhttpd.confだったのかなぁ・・・
と・・・w
知らん間に直ってましたw
5日ぐらい悩んだというのに・・(;´▽`A“