ISBNでAmazon検索
ISBNを用いてAmazonから本のデーターを取得します。
このアプリの目標は、バーコードリーダーで書籍管理をします。
書店に行った時、これ買ったかなぁってよく忘れるので。その場で登録した情報が携帯でチェックとかできるといいなってことです。
実際のサンプル
http://moeten.info/flex/20080308_amazonBook/bin-release/main.html
php側でAmazonのxmlを整形して出力します。
これには理由があって、Flex側で直接Amazonのxmlを取得する場合はnamespaceの問題があり、大変面倒です。
<?php ini_set('mbstring.internal_encoding', 'utf-8'); ini_set('mbstring.script_encoding', 'utf-8'); $_GET['isbn'] = $_GET['isbn'] ? $_GET['isbn'] : "9784088596662"; $isbn = str_replace( "-" , "" , trim( $_GET['isbn'] ) ); $request = array( "Service" => "AWSECommerceService", "AWSAccessKeyId" => "アマゾンの開発者用ID", "Operation" => "ItemLookup", "IdType" => "ISBN", "ItemId" => $isbn, "SearchIndex" => "Books", "ResponseGroup" => "Images,Small", "Version" => "2008-03-03", ); foreach( $request as $key => $val ){ $url .= "{$key}={$val}&"; } $url = "http://webservices.amazon.co.jp/onca/xml?" . $url ; $xml = simplexml_load_file( $url ); foreach( $xml->Items->Item as $item ){ $data['ASIN'] = $item->ASIN; $data['DetailPageURL'] = $item->DetailPageURL; $data['Author'] = $item->ItemAttributes->Author; $data['Creator'] = $item->ItemAttributes->Creator; $data['Title'] = $item->ItemAttributes->Title; $data['LargeImage'] = $item->LargeImage->URL; $MAIN .= <<<EOD <result> <ASIN>{$data['ASIN']}</ASIN> <ISBN>{$_GET['isbn']}</ISBN> <DetailPageURL>{$data['DetailPageURL']}</DetailPageURL> <Title>{$data['Title']}</Title> <LargeImage>{$data['LargeImage']}</LargeImage> <Author>{$data['Author']}</Author> <Creator>{$data['Creator']}</Creator> </result> EOD; } header ("Content-Type: text/xml; charset=UTF-8"); echo $MAIN; exit; ?>
Flex側のソースです。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> <mx:Script> <![CDATA[ private function init():void{ amazonS.send({ "isbn":txtIsbn.text }); } private function onFinish():void{ myLog.text += "finish\n"; } ]]> </mx:Script> <mx:HTTPService id="amazonS" url="http://moeten.info/flex/20080308_amazonBook/index2.php" useProxy="false" resultFormat="e4x" showBusyCursor="true" method="GET" result="onFinish()" /> <mx:Panel x="10" y="10" width="251" height="456" layout="absolute" title="ISBNでAmazon検索"> <mx:Button x="164" y="10" label="ボタン" click="init()"/> <mx:TextInput x="52" y="10" text="9784088596662" id="txtIsbn" width="104"/> <mx:Text x="10" y="12" text="ISBN"/> <mx:TextArea x="10" y="372" width="211" height="34" id="myLog"/> <mx:TileList x="10" y="38" width="210" height="305" dataProvider="{amazonS.lastResult}" columnCount="1" dragEnabled="true"> <mx:itemRenderer> <mx:Component> <mx:VBox horizontalAlign="left" horizontalScrollPolicy="off" verticalScrollPolicy="off"> <mx:Image source="{data.LargeImage}" width="100" height="100" /> <mx:Text text="{data.Title}"/> <mx:Text text="{data.ISBN}"/> <mx:Text text="{data.DetailPageURL}"/> <mx:Text text="{data.LargeImage}"/> <mx:Text text="{data.Author}"/> <mx:Text text="{data.Creator}"/> </mx:VBox> </mx:Component> </mx:itemRenderer> </mx:TileList> <mx:Text x="10" y="346" text="ログ"/> </mx:Panel> <mx:DataGrid x="269" y="10" width="189" height="456" dropEnabled="true" dragMoveEnabled="true" dragEnabled="true"> <mx:columns> <mx:DataGridColumn headerText="所有" width="70" > <mx:itemRenderer> <mx:Component> <mx:Image source="{data.LargeImage}" width="70" height="60" /> </mx:Component> </mx:itemRenderer> </mx:DataGridColumn> </mx:columns> </mx:DataGrid> <mx:TileList x="466" y="399" height="67" dropEnabled="true" width="90"> <mx:itemRenderer> <mx:Component> <mx:VBox horizontalAlign="left" horizontalScrollPolicy="off" verticalScrollPolicy="off"> <mx:Image source="{data.LargeImage}" width="50" height="50" /> </mx:VBox> </mx:Component> </mx:itemRenderer> </mx:TileList> <mx:Text x="466" y="373" text="ゴミ箱"/> </mx:Application>