全2件 (2件中 1-2件目)
1
2007/5/27(日) 3:00~6:00において、楽天トラベルのメンテナンスに伴い、楽天トラベル系のAPIのサービス提供を停止させていただきます。尚、メンテナンス中は、出力中の「共通パラメーター」のStatusに"Maintenance"が表示されます。【日時】2007年05月27日03時00分~2007年05月27日06時00分【影響範囲】楽天トラベル系の5つのAPI・楽天トラベル施設検索API・楽天トラベル施設情報API・楽天トラベル空室検索API・楽天トラベル地区コードAPI・楽天トラベルキーワード検索API
2007.05.23
前回では楽天商品検索APIから商品情報を取得してそのリクエスト結果(XML)を簡単な正規表現で要素分解(パース)するところまででした。いよいよ検索結果をHTMLで返す処理にはいります。 155: #--------------------------------- 156: # HTMLコンテンツ 157: #--------------------------------- 158: print "Content-type: text/html; charset=UTF-8\n\n";上記はこのPerlスクリプトがアクセスしてきたブラウザに返すレスポンスヘッダにになります。\n\n(改行2文字)まではブラウザ上に表示されません。文字エンコードの指定はUTF8にします。 159: print <<"EOF"; 160: <html lang="ja"> 161: <head> 162: <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 163: <title>$API_NAME/楽天ウェブサービス</title> 164: </head> 165: <body bgcolor="#ffffff" TEXT="#333333" LINK="#3333cc"> 166: 167: <!-- タイトル --> 168: <h1 style="font-size:16px;font-weight:bold;">楽天ウェブサービス</h1> 169: <hr size="1" noshade>$API_NAME<hr size="1" noshade> 170: <!--/タイトル --> 171: 172: <!-- HTMLフォーム表示 --> 173: <form action="item_search.pl" method="get"> 174: <table width="80%" border="0" cellspacing="0" cellpadding="0" style="margin: 5px 0pt&nbsnbsp;0px;"> 175: <tr><td bgcolor="#afafaf"> 176: <table width="100%" border=0 cellspacing=1 cellpadding=5 style="font-size:12px;"> 177: <tr><td style="background-color: #eeeeee;">検索キーワード</td><td style="background-color:#ffffff;"> 178: <!-- キーワード入力テキストボックス --><input type="text" name="keyword" value="$req_params{d}" size="30"> 179: </td></tr> 180: <tr><td style="background-color: #eeeeee;">価格</td><td style="background-color: #fffgt; 181: <!-- 最小価格入力テキストボックス --> 182: <input type="text" name="minPrice" value="$req_params{minPrice}" size="20"> 円 183: ~ 184: <!-- 最上価格入力テキストボックス --> 185: <input type="text" name="maxPrice" value="$req_params{maxPrice}" size="20"> 円 186: </td></tr> 187: </table> 188: </td></tr></table><br> 189: <input type="submit" name="submit" value="商品検索"> 190: </form> 191: <!-- HTMLフォーム表示 --> 192: EOF 193: 159行目のEOFはヒア文字の宣言で、191行目のEOFまでの内容をまとめて1つの文字列(ヒア文字列)として扱います。ですのでprintでそのまま内容を出力する、といった意味です。ヒア文字列の中の変数は展開(変数→値)されます。160行目~170行目まで通常のHTMLのヘッダ、タイトル等の宣言になります。172行目はフォームの表示です。ユーザーが入力したキーワードや価格があれば$rep_param連想配列にはっていますのでその値を表示するようにします。前回行ったようにURLデコードされ、サニタイズされた値になっています。以下、商品検索APIの出力結果になります。 194: print <<"EOF"; 195: <!-- API検索結果表示 --> 196: <font style="font-size:14px;"> 197: EOF 198: if($status) { print "取得結果: $status<br>" }; 199: if($statusmsg) { print "取得内容: $statusmsg<br>" }; 200: if($count ) { print "取得件数: $count<br>" }; 201: 前々回で取得したAPIからのステータス情報やメッセージ、取得件数を表示します。以下、取得件数が0以上の場合、商品情報の一覧を表示していきます。 202: if($count > 0 ){ 203: print <<"EOF"; 204: <table width="80%" border="0" cellspacing="0" cellpadding="0" style="margin: 5px 0pt&nbsnbsp;0px;"> 205: <tr><td bgcolor="#afafaf"> 206: <table width="100%" border=0 cellspacing=1 cellpadding=5 style="font-size:12px;"> 207: <tr align="center" style="background-color: #eeeeee;"> 208: <td width="8%" >写真</td> 209: <td width="47%">商品名</td> 210: <td width="15%">価格</td> 211: <td width="30%">ショップ名</td> 212: </tr> 213: EOF 214: # ベタな正規表現 215: foreach my $item ( @items ){ 216: if($item=~/<itemName>(.+)<\/itemName>/) {$itemname=$1;} 217: if($item=~/<itemPrice>(.+)<\/itemPrice>/) {$itemprice = $1;} 218: if($item=~/<itemUrl>(.+)<\/itemUrl>/) {$itemurl = $1;} 219: if($item=~/<affiliateUrl>(.+)<\/affiliateUrl>/) {$affiliateur;= $1;} 220: if($item=~/<smallImageUrl>(.+)<\/smallImageUrl>/){$smallimageurl&nnbsp;$1;} 221: if($item=~/<shopName>(.+)<\/shopName>/) {$shopname =$1;} 222: if($item=~/<shopUrl>(.+)<\/shopUrl>/) {$shopurl =$1;} 223: @items配列には<Item>(</Item>)タグの中の文字列、つまり1商品毎に配列としてはいっています。今回はXMLパーサは利用しません(XML::Perserモジュール等を利用するといいかもしれません。)その中で表示に必要なデータを簡単な正規表現で抜き出します。216行目の商品名から、222行目の店舗URLまでが以下のテーブルの列要素に入ります。 224: print <<"EOF"; 225: <tr style="background-color: #ffffff;"> 226: <td width="8%" align="center"><a href="$itemurl" target="_top"><img src="$smallil" border=0></a></td> 227: <td width="47%" align="left"> <a href="$affiliateurl" target="_top">$itemname</a></td& 228: <td width="15%" align="right" nowrap>$itemprice 円</td> 229: <td width="47%" align="left"><a href="$shopurl" target="_top"><font size="-1">$shopt;/a></td> 230: </tr> 231: EOF 232: } 233: print <<"EOF"; 234: </table> 235: </td></tr></table> 236: EOF 237: } 238: print <<"EOF"; 239: </font> 240: <!-- /API検索結果表示 --> 241: EOF 242: 243: exit 0;上記で商品検索一覧の表示が終了です。以上、Perlで呼び出す楽天商品検索APIのサンプルコード解説になります。以前に紹介したPHP版と実装方法はほとんど変わりません。XMLパースやWWWアクセスライブラリについてはCPAN等で探してみてください。CPANには数々の便利なPerlライブラリがあります。これらを利用するともっと実装がシンプルで美しくなるはずです!・CPAN
2007.05.10
全2件 (2件中 1-2件目)
1

![]()
