<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>ええもん屋 ラボ</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/" />
    <link rel="self" type="application/atom+xml" href="http://ecs.amonya.com/atom.xml" />
   <id>tag:ecs.amonya.com,2008://1</id>
    <link rel="service.post" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1" title="ええもん屋 ラボ" />
    <updated>2006-06-30T00:51:36Z</updated>
    <subtitle>Amazon E-Commerce Service(ECS4.0)、Javascript(Ajaxを含む)の技術についての話題。ECS4.0関連のライブラリやツールの提供もしています。たまに独り言も・・・</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type  3.2-ja-2</generator>
 
<entry>
    <title>新しいレビューが取得可能に！</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/ecs40/post_14.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=50" title="新しいレビューが取得可能に！" />
    <id>tag:ecs.amonya.com,2006://1.50</id>
    
    <published>2006-06-29T16:38:16Z</published>
    <updated>2006-06-30T00:51:36Z</updated>
    
    <summary>今日(2006/6/29)未明から、新しい商品のレビュー(ResponseGro...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="ECS4.0" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        今日(2006/6/29)未明から、新しい商品のレビュー(ResponseGroupのReviews)が取得できるようになりました。

最近のAmazonは頑張ってくれています！

        これは2005年12月以降のレビューのデータが取得できなかった問題で、新しい商品であるほどレビューが表示されず、「本来の作り手の欲しい情報が取得できない」という矛盾を抱えていました。

これが、やっと解消されました。
本来ならもっと早急に解決されるべき問題でしたが、まぁそれも過去のこと。今は純粋に喜びましょう。

また、トップセラーとソートのSalesrankでのデータの明らかな相違も緩和されたようで、若干順位は異なりますがだいぶ「マシ」にはなったようです。これから、Amazonも見直されて再びサイトを構築される人が増えていくのではないでしょうか？

    </content>
</entry>
<entry>
    <title>Amazonのアダルト商品の判別(Ver.2006-05-17)</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/ecs40/amazon_1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=47" title="Amazonのアダルト商品の判別(Ver.2006-05-17)" />
    <id>tag:ecs.amonya.com,2006://1.47</id>
    
    <published>2006-06-08T13:01:00Z</published>
    <updated>2006-06-09T22:12:07Z</updated>
    
    <summary>ECS4.0のバージョン「2006-05-17」からアダルト商品を判別出来るタグ...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="ECS4.0" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[ECS4.0のバージョン「2006-05-17」からアダルト商品を判別出来るタグが追加されました。

久しぶりに非常に<b>画期的な更新</b>です。
]]>
        <![CDATA[<h4>[今までのアダルト商品かの判断]</h4>

それまで、アダルト商品かどうかの判断はかなり曖昧かつ面倒でした。

<div class="explain">

・本以外（ＤＶＤ、ゲーム等）→
　&lt;format&gt;タグの値が”アダルト”になっているかどうかで判断。
　
・本→
　ResponseGroup-"BrowseNodes"によりブラウズノードの一覧を表示させ、その商品内のブラウズノードにアダルトが含まれているかどうか判断。

</div>

このように、「面倒くさい」、「余計なデータを取得して重くなる」、「漏れが結構ある」等不満だらけでした。


<h4>[「Ver.2006-05-17」以降の判断]</h4>

しかしこのバージョンからこのような処理は必要なくなり、ResponseGroupで"ItemAttributes"を指定した場合に、

<strong>&lt;IsAdultProduct&gt;</strong>

タグがあれば、アダルト商品のようです。ただ、タグ内の値は現在確認した中では全て”1”になっています。この詳細は不明ですが、アダルト商品以外ではこのタグ自体存在しないですし、条件分けでもしてくれるんでしょうかね？（”Is”が付いているので本来なら"0"(false)、"1"(true)だと思うんですが・・・）

今現状で利用するなら、

<div class="explain">

"IsAdultProduct"タグがあり、かつ値が"1"のものをアダルトと判断する。

</div>

といったところでしょう。

まぁこれで、アダルト商品に対する処理がかなり楽できるようになりますね。よかった、よかった。
]]>
    </content>
</entry>
<entry>
    <title>トップセラーが超おかしい＆あのブログが復活！？</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/ecs40/post_13.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=46" title="トップセラーが超おかしい＆あのブログが復活！？" />
    <id>tag:ecs.amonya.com,2006://1.46</id>
    
    <published>2006-05-31T22:13:21Z</published>
    <updated>2006-06-02T00:41:10Z</updated>
    
    <summary>昨日からECS4.0で返ってくるトップセラーの順位が超おかしい。というよりも、s...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="ECS4.0" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        昨日からECS4.0で返ってくるトップセラーの順位が超おかしい。というよりも、sortを&quot;salesrank&quot;にした際の商品の結果がアダルト商品ばっかりなんですが・・・(&apos;A`)

        <![CDATA[すぐに直ればいいんですが、うーんちょっと微妙ですね。
何か分かり次第、<a href="http://developer.amazonwebservices.com/connect/thread.jspa?threadID=10735&tstart=0" target="_blank">ここのスレッド</a>でアップデートしてくれるそうですが。


！？


あれ？いつの間に質問にちゃんと日本語で返答してくれるようになったんですか？？
と思って調べたら、<a href="http://aws.typepad.com/aws_jp/2006/05/amazon_web.html" target="_blank">Amazon Web サービス ブログ</a>が復活してるし！？（驚愕

いや、更新月度が２００５年８月ぶりなんで恐ろしくブランクを明けて復活ですね。。
さて、ECS4.0のリリースノートも日本語対応になるようで、これでAmazon Webサービスももっと普及することを切に願います。

寝起きで日本語むちゃくちゃ・・・すいません。
]]>
    </content>
</entry>
<entry>
    <title>ECS4.0-ItemLookup リファレンス</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/ecs40/operationitemlookup.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=42" title="ECS4.0-ItemLookup リファレンス" />
    <id>tag:ecs.amonya.com,2006://1.42</id>
    
    <published>2006-05-14T16:58:58Z</published>
    <updated>2006-05-17T05:05:05Z</updated>
    
    <summary>【ItemLookupの概要】 商品詳細オペレーション。固定の商品ID（主にAS...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="ECS4.0" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[<h3>【ItemLookupの概要】</h3>

商品詳細オペレーション。固定の商品ID（主にASIN）を用いて商品の詳細データを取得します。取得できるデータはほとんど<a href="http://ecs.amonya.com/ecs40/operationitemsearch.html">ItemSearch</a>と同じですが、レビューや売り手の情報等、複数ページ存在するデータに対してアクセスできるのが特徴です。

ItemSearchでどこまでデータを取得して、ItemLookupでどこまでデータを取得するかの振分けを考えるのが面白いですね（ItemSearchで大量のデータを取得するとレスポンスが悪化する為、ItemLookupと使い分けるのが吉。ただリクエスト回数が増えるのでそこら辺の加減が難しい・・・）。

以下、詳細]]>
        <![CDATA[<h3>【サンプル(REST)】</h3>

<div class="explain2">

http://webservices.amazon.com/onca/xml
?Service=AWSECommerceService
&AWSAccessKeyId=<span style="color:red;">[あなたのAccess Key ID]</span>
&Operation=ItemLookup
&ItemId=<span style="color:red;">[ASINコード]</span>
&ResponseGroup=Large

</div>

<hr />

<h3>【必須パラメータ】</h3>

<h4>[ItemId]</h4>

基本的にはASINコードを指定する。ASINコード以外を指定する場合には、次に説明するIdTypeパラメータを用いる。

このItemId、実は<b>複数のASINコードを","（カンマ）区切りで最大１０個まで指定できます</b>。これでまとめて１回でリクエストできるので、リクエスト回数を抑えることが可能です。ただし、指定したASINの順番にデータが返ってくるわけではないので注意。

<hr />

<h3>【任意パラメータ】</h3>

<h4>[IdType]</h4>

ASINコードを用いない場合、日本ではJANコードが利用できます。JANコードとは要するにバーコードの番号です。

<div class="explain">

[利用可能な値]

・ASIN・・・Amazon固有の商品番号。ItemSearchオペレーションやAmazonのサイトで知ることができる。
・EAN・・・EANとJANは互換性があるので、日本のバーコードから情報を得るにはこれを指定する。
・SKU・・・US Only
・UPC・・・US Only

</div>

<h4>[SearchIndex]</h4>

ASINコード指定（デフォルト）の場合は、利用できません（してはいけません）。逆にASIN以外を指定した場合はSearchIndexを指定する必要があります。

<div class="explain">

[EANを指定した場合の値（Books等は指定不可）]

・Electronics 
・Music 
・Classical 
・DVD 
・Kitchen 
・Software 
・VideoGames 

</div>

<h4>[MerchantId]</h4>

マーケットプライスの売り手の指定を行います。ResponseGroupの売り手の情報＋価格関連つまり"Offers"("OfferFull")を指定した場合のみ意味を持ちます。指定できる値は以下の通り。基本的に、次の"Condition"オペレーションとセットで利用します。

・Amazon・・・Amazonのみ表示。デフォルト？
・ALL・・・全て表示。
・Featured・・・特集のみ表示。いや私には意味が・・・？
・固有のMerchantId・・・固有のIDを指定します。

<h4>[Condition]</h4>

マーケットプライスでの商品のコンディションを指定します（新品・中古等）。指定できる値は以下の通り。

・New ・・・新品のみ表示。デフォルト値。
・All ・・・すべて表示。
・Used・・・中古のみ表示。
・Refurbished・・・修復品のみ表示。あってます？
・Collectible・・・コレクターアイテム。たぶん。。

<h4>[OfferPage]</h4>

ResponseGroupの売り手の情報＋価格関連つまり"Offers"("OfferFull")を指定した場合のみ意味を持ちます。Offerが複数ページあった場合にページを指定できます。これも基本的に"MerchantId"、"Condition"とセットで利用します。

<h4>[ReviewPage]</h4>

ResponseGroupの"Reviews"を指定した場合のみ意味を持ちます。レビューが複数ページあった場合にページを指定できます。

<h4>[VariationPage]</h4>

ResponseGroupの"Variations"を指定した場合のみ意味を持ちます。指定した商品のバリエーションに関する情報が複数ページあった場合にページを指定できます。

<h4>[ResponseGroup]</h4>

取得するデータを指定できます。全て指定するとかなりのサイズになるので、基本的には自分で必要な項目のみ指定します。デフォルト値は"Request,Small"です。

ItemLookupで指定できるResponseGroupは以下の通り。

・Request 
・ItemIds 
・Small
・Medium
・Large
・OfferFull
・Offers
・OfferSummary
・Variations
・VariationMinimum
・VariationSummary
・ItemAttributes
・Accessories 
・EditorialReview 
・SalesRank 
・BrowseNodes 
・Images 
・Similarities 
・Reviews 
・ListmaniaLists 
・SearchBins 
・Subjects 

詳細は<a href="http://ecs.amonya.com/ecs40/operations.html">OperationとResponseGroupの一覧</a>参照。

<hr />

<h3>【使えないパラメータ】</h3>

<h4>[DeliveryMethod]</h4>

発送方法の指定、らしい。郵便番号の種類っぽいですね。

<h4>[ISPUPostalCode]</h4>

郵便番号指定？US Only

<hr />

<h3>【まとめ】</h3>

ここでの味噌は、

<div class="explain">

・ItemIdパラメータで複数の商品を指定できる（カンマ区切り１０個まで）。
・ItemSearchと異なる点として、売り手情報、レビュー、バリエーションの複数ページある詳細なデータを取得できる。

</div>

という点です。
]]>
    </content>
</entry>
<entry>
    <title>ECS4.0-ItemSearch リファレンス</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/ecs40/operationitemsearch.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=41" title="ECS4.0-ItemSearch リファレンス" />
    <id>tag:ecs.amonya.com,2006://1.41</id>
    
    <published>2006-05-10T14:02:14Z</published>
    <updated>2006-05-17T05:04:44Z</updated>
    
    <summary>※翻訳しても分かりにくい上に、US Onlyが多いので自分なりにリファレンスを作...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="ECS4.0" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[※翻訳しても分かりにくい上に、US Onlyが多いので自分なりにリファレンスを作成していきます。多少のノウハウも入れていこうと思っているので参考にしてください。ただし、REST中心なのはご了承ください。

<h3>【ItemSearchの概要】</h3>

商品の検索オペレーション。書籍・ＤＶＤ等のカテゴリーの指定、「キーワード検索」・「タイトル検索」等の検索の種類、検索結果の内容の選択など、パラメータの指定を変更するだけで商品検索のほとんどをまかなうことができます。

以下、詳細]]>
        <![CDATA[<h3>【サンプル(REST)】</h3>

<div class="explain2">

http://webservices.amazon.com/onca/xml
?Service=AWSECommerceService
&AWSAccessKeyId=<span style="color:red;">[あなたのAccess Key ID]</span>
&Operation=ItemSearch
&Keywords=<span style="color:red;">[検索文字列]</span>
&ResponseGroup=Large

</div>

<hr />

<h3>【必須パラメータ】</h3>

<h4>[SearchIndex]</h4>

商品カテゴリーの指定。以下のどれか一つを指定してください。

<div>
<table border="1">
<tr>
<td>値</td>
<td>説明</td>
</tr>
<tr>
<td>Blended</td>
<td>すべての商品</td>
</tr>
<tr>
<td>Books</td>
<td>書籍（和書）</td>
</tr>
<tr>
<td>Classical</td>
<td>クラシック音楽</td>
</tr>
<tr>
<td>DVD</td>
<td>DVD</td>
</tr>
<tr>
<td>Electronics</td>
<td>電化製品</td>
</tr>
<tr>
<td>ForeignBooks</td>
<td>洋書</td>
</tr>
<tr>
<td>Hobbies</td>
<td>趣味・ホビー（フィギア・ガンプラ等）</td>
</tr>
<tr>
<td>Kitchen</td>
<td>キッチン</td>
</tr>
<tr>
<td>Music</td>
<td>音楽</td>
</tr>
<tr>
<td>MusicTracks</td>
<td>曲名</td>
</tr>
<tr>
<td>Software</td>
<td>ソフトウェア</td>
</tr>
<tr>
<td>SportingGoods</td>
<td>スポーツ</td>
</tr>
<tr>
<td>Toys</td>
<td>おもちゃ</td>
</tr>
<tr>
<td>VHS</td>
<td>VHS</td>
</tr>
<tr>
<td>Video</td>
<td>DVD&VHS</td>
</tr>
<tr>
<td>VideoGames</td>
<td>ゲーム</td>
</tr>
</table>
</div>

<hr />

<h3>【半必須パラメータ（どれか１つ以上指定）】</h3>

基本的には、キーワード(Keywords)かブラウズノード(BrowseNode)で十分事足ります。が、タイトル検索等目的にあったパラメータを使用することで、更に検索精度を高められます。指定する文字列は、ほとんどのパラメータで部分一致に対応しているので特に問題は起こらないはず。
※日本語（や半角スペース等）を含む場合は、HTMLのフォームを使わない限り自力でURLエンコードしてくださいね。

<h4>[Keywords]</h4>

キーワードを指定して検索。全てのSearchIndexに対応。

<h4>[Title]</h4>

タイトルを指定して検索。SearchIndexが"MusicTracks"以外に対応。

<h4>[BrowseNode]</h4>

ブラウズノードを指定して検索。ブラウズノードを指定することで、SearchIndexのより詳細なカテゴリーに絞り込むことができます。また、各カテゴリー毎の売上ランキング等を作る場合にも利用される結構便利なパラメータです。SearchIndex"MusicTracks"以外に対応。でも、"SportingGoods"のトップのブラウズノードに現在アクセスできません('A`)→<a href="http://ecs.amonya.com/ecs40/post_9.html">ここ</a>参照。
※ブラウズノードの検索は<a href="http://ecs.amonya.com/tool/amazonbrowsenode.html">ブラウズノードを探せ」</a>参照。

<h4>[Power]</h4>

書籍の詳細検索。よってSearchIndexは"Books"、"ForeignBooks"のみ。結構強力な予感がしたんですが、思ったより微妙で残念。一応使い方。文字列の中に更にパラメータ（分かり辛いので以下"Powerパラメータ"）を追加する。

<div class="explain">

[書式]
Power= [Powerパラメータ] : [値]

[例]
Power=author:ダン・ブラウン and title:ダ・ヴィンチ

</div>

パラメータと値を":"（コロン）でつなげます。更に複数の条件を結合する場合、"and"や"or"をつけます。
"(",")"（括弧）をつけることで優先順位も変えられます。

<div>
<table border="1">
<tr>
<td>Powerパラメータ</td>
<td>説明</td>
</tr>
<tr>
<td>author</td>
<td>著者名</td>
</tr>
<tr>
<td>keywords</td>
<td>キーワード</td>
</tr>
<tr>
<td>title</td>
<td>タイトル</td>
</tr>
<tr>
<td>pubdate</td>
<td>発売日の期間指定<br />※結果が０件('A`)</td>
</tr>
<tr>
<td>binding</td>
<td>本の種類<br />※結果が０件('A`)</td>
</tr>
</table>
</div>

肝心なところで結果が０件となり使えなかったのでここまで。他にもsubject,isbn等があります。サンプル等は<a href="http://www.amazon.com/exec/obidos/ats-query-page/002-9302909-7943214" target="_blank">Amazon.com Power Search</a>を見てください。

<h4>[その他]</h4>

その他パラメータです。各々名前を指定して検索。

・Artist・・・アーティスト
・Author・・・著者
・Actor・・・俳優
・Director・・・監督
・Manufacturer・・・製造メーカー
・MusicLabel・・・ミュージックレーベル（エイベックスとか）
・Composer・・・作曲家
・Publisher・・・出版社
・Brand・・・ブランド
・Conductor・・・指揮者
・Orchestra・・・オーケストラ名

<hr />

<h3>【任意パラメータ】</h3>

<h4>[ItemPage]</h4>

デフォルトでは"1"です（１ページ１０件）。検索結果が２ページ以上ある場合に、指定したページのデータを取得できます。任意とはいえど、かなりの頻度で使います。

<h4>[Sort]</h4>

デフォルトでは"salesrank"（売上順）です。SearchIndex毎に指定するパラメータが異なるので注意。
※詳細は<a href="http://ecs.amonya.com/ecs40/sort.html">Sortパラメータ</a>を見てください。

<h4>[MinimumPrice]</h4>

最低価格の指定。

<h4>[MaximumPrice]</h4>

最高価格の指定。

<h4>[MerchantId]</h4>

マーケットプライスの売り手の指定を行います。ResponseGroupの売り手の情報＋価格関連つまり"Offers"("OfferFull")を指定した場合のみ意味を持ちます。指定できる値は以下の通り。基本的に、次の"Condition"オペレーションとセットで利用します。

・Amazon・・・Amazonのみ表示。デフォルト？
・ALL・・・全て表示。
・Featured・・・特集のみ表示。いや私には意味が・・・？
・固有のMerchantId・・・固有のIDを指定します。

<h4>[Condition]</h4>

マーケットプライスでの商品のコンディションを指定します（新品・中古等）。指定できる値は以下の通り。

・New ・・・新品のみ表示。デフォルト値。
・All ・・・すべて表示。
・Used・・・中古のみ表示。
・Refurbished・・・修復品のみ表示。あってます？
・Collectible・・・コレクターアイテム。たぶん。。

<h4>[ResponseGroup]</h4>

取得するデータを指定できます。全て指定するとかなりのサイズになるので、基本的には自分で必要な項目のみ指定します。デフォルト値は"Request,Small"です。

ItemSearchで指定できるResponseGroupは以下の通り。

・Request 
・ItemIds 
・Small
・Medium
・Large
・OfferFull
・Offers
・OfferSummary
・Variations
・VariationMinimum
・VariationSummary
・ItemAttributes
・Accessories 
・EditorialReview 
・SalesRank 
・BrowseNodes 
・Images 
・Similarities 
・Reviews 
・ListmaniaLists 
・SearchBins 
・Subjects 

詳細は<a href="http://ecs.amonya.com/ecs40/operations.html">OperationとResponseGroupの一覧</a>参照。

<hr />

<h3>【使えないパラメータ】</h3>

多くはUS Only（アメリカのみ）のもの。それ以外にも日本ではいらない、微妙なものも含まれます。ただ、勘違いで実は使えるというものもあるかもしれません。

<h4>[Availability]</h4>

ひょっとすると利用価値があるかもしれませんが、基本的に"MerchantId"、"Condition"だけで事足ります。これを有効にすることで、商品検索自体から除外されてくれれば素敵だったんですがね。

<h4>[AudienceRating]</h4>

映画のレーティング（年齢制限フィルター）。日本では未対応です。

<h4>[TextStream]</h4>

キーワードの上位で、記事、ブログ等からも合致する商品を検索できるようですが、US Only。

<h4>[DeliveryMethod]</h4>

発送方法の指定、らしい。郵便番号っぽいですね。まぁ、関係なさそうです。

<h4>[City]</h4>

レストランの時点の関係なし。

<h4>[Cuisine]</h4>

料理の時点で関係なし。

<h4>[Neighborhood]</h4>

レストランの時点で関係なし。

<hr />

<h3>【雑記】</h3>

ItemSearchは最も使われるオペレーションです。色々な条件を指定できる分、仕様が結構ごっちゃりしてるので分かりやすくまとめられたかどうか分かりませんが、何かの役に立てれば幸いです。また、返ってくるデータについても触れようかと思いましたが、時間がかかり過ぎそうなのでまた機会があったら。。

う～ん、いつもながら１エントリーがとてつもなく長い。ブログのはずなのに、下書きを含めて１エントリーを投稿するまでに２，３日掛かるってどうなんでしょうね？(ﾉ∀｀)
]]>
    </content>
</entry>
<entry>
    <title>ECS4.0の基本の基本（RESTのみ)</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/ecs40/ecs40rest.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=30" title="ECS4.0の基本の基本（RESTのみ)" />
    <id>tag:ecs.amonya.com,2006://1.30</id>
    
    <published>2006-05-08T13:35:37Z</published>
    <updated>2006-05-12T02:55:19Z</updated>
    
    <summary>[概要] Amazon Webサービス(AWS)の内、Amazon.co.jpの...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="ECS4.0" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[<h3>[概要]</h3>

Amazon Webサービス(AWS)の内、Amazon.co.jpの商品情報やカート機能を通じて商品を購入するまでのプロセス（過程）を支援するためのサービスをE-Commerce Service(ECS)と言います。ECSはXMLベースのWebサービスで、リクエストに応じてXMLデータを取得することができます。

※現在のバージョンは4.0なので、以下ECS4.0と記述します。
]]>
        <![CDATA[<hr />

<h3>[ECS4.0へのリクエスト（前説）]</h3>

ECS4.0へリクエストする方法は、<strong>REST方式</strong>と<strong>SOAP方式</strong>の２種類用意されていますが、ここではREST方式のみについて記述していきます（SOAPは説明がめんどくさいのでゴメンね☆）。機能的にはほとんど同じです。

ただ大きな違いがあるとすれば、REST方式ではHTTPプロトコルの<strong>GET</strong>でデータを取得するのに対して、SOAP方式では<strong>POST</strong>する形でリクエストが送信されます。実際使っている側からすると大した違いはありませんが。。個人的にはパラメータを与えてデータを取得するREST方式の方が理にかなっている気はします（REST VS SOAPの話になると長くなるのでこの辺で）。

話がそれましたが、RESTではWebブラウザだけでリクエスト～XMLデータ取得まで出来てしまいます。なので、これからECSについて勉強したい方にはREST方式が手軽でオススメです。XMLデータの解析がメンドクサイとかは全く別次元の話です（笑。

<hr />

<h3>[ECS4.0へのリクエスト（本題）]</h3>

では具体的なリクエスト方法について。実際にはベースのＵＲＬ＋パラメータを組み立てていくだけです。

<div class="explain2">

<h4>[サンプル]</h4>

http://webservices.amazon.co.jp/onca/xml
?Service=AWSECommerceService
&AWSAccessKeyId=<span style="color:red;">[あなたのAccessKeyId]</span>
&Version=2005-10-05
&ContentType=text/xml&Operation=ItemSearch
&SearchIndex=Books&Keywords=BLOG

</div>

<h4>・固定パラメータ</h4>

固定のパラメータはこんな感じ（Operation・ResponseGroupを除く）。

<div class="explain">
<table>
<tr>
<td>１．ベースＵＲＬ</td>
<td>http://webservices.amazon.co.jp/onca/xml</td>
</tr>
<tr>
<td>２．Service</td>
<td>AWSECommerceService</td>
</tr>
<tr>
<td>３．AWSAccessKeyId</td>
<td><span style="color:red;">[あなたのAccessKeyId]</span></td>
</tr>
<tr>
<td>４．Version</td>
<td>[ECS4.0のバージョン]</td>
</tr>
<tr>
<td>５．ContentType</td>
<td>"text/xml" or "text/html"</td>
</tr>
</table>
</div>

１～３については固定です（複数のAccessKeyIdを使い分ける等の例外を除く）。

４のバージョンについてはECS4.0では日付によるバージョン管理がされており、例えば"2005-10-05"を指定するとその時のバージョンでデータを取得できます。これは、データ構造等の変更があった場合にでも対応できるよう作られたもので、一度バージョンを決定すれば、固定にするべきです。指定しない場合は最新のバージョンを自動的に取得しますが、ＷＥＢアプリ等を作った場合にはなるべく指定した方が安全でしょう。

５は表示形式の指定です。XSLを用いて（パラメータ"Style"）表示する場合は"text/html"を、それ以外は"text/xml"で取得することになるでしょう。

<h4>・Operation・ResponseGroupパラメータ</h4>

上記の固定パラメータはECS4.0にアクセスする為の最低条件でしたが、"Operation"、"ResponseGroup"は実際に「何をする」か、「何を取得する」かを決める最重要パラメータです。

まず、"Operation"では商品を検索したり(ItemSearch)、商品の詳細データを取得したり(ItemLookup)、カートを操作したり(CartCreate,CartAdd等)、何をリクエストするかを決定します。

"ResponseGroup"では、どんなデータを取得するかを指定します。画像のデータの取得(Images)の有無や、レビューの取得、それとも最低限のデータのみ(Smallのみ)等、細かく取得するデータを指定できます。細かく指定するできる事で、必要なデータのみ取得しレスポンスを最適化することが可能です。また、複数のResponseGroupを指定する場合は、","（カンマ）でつないでいきます。（例：”Smal,Images,Offers”)

各々の種類は「<a href="http://ecs.amonya.com/ecs40/operations.html">OperationとResponseGroupの一覧</a>」参照。

ただしこの二つは密接に関わっており、一つのOperationで指定できるResponseGroupは決まっています。ここら辺はマニュアルを読むか、今後のエントリーを期待しておいてください。
]]>
    </content>
</entry>
<entry>
    <title>Yahoo! UI Library （圧縮版再配布）</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/download/javascript/yahoo_ui_library_1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=39" title="Yahoo! UI Library （圧縮版再配布）" />
    <id>tag:ecs.amonya.com,2006://1.39</id>
    
    <published>2006-04-16T13:08:10Z</published>
    <updated>2006-05-25T05:15:12Z</updated>
    
    <summary>※バージョンアップ 0.9.0→0.10.0に伴い、各々のライブラリに対して&quot;-...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="Javascript" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[<span style="font-weight:bold;">※バージョンアップ 0.9.0→0.10.0に伴い、各々のライブラリに対して"-mini"（animation.js→animation-mini.js）という圧縮ファイルが同梱されるようになりました。従って、この記事の有効性はあまりありません。</span>

ちまたを騒がせている <a href="http://developer.yahoo.com/yui/index.html" target="_blank">Yahoo! User Interface Library</a>(Yahoo! UI ライブラリ)ですが、結構<b>ファイル数が多い</b>上にコメント入りすぎで<b>ファイルサイズがかなりでかい</b>です（ビルド済みファイルで３００ＫＢ以上！）。そのまま使うには実用度から見て厳しそうです。

そこで一部ファイル結合し、更に圧縮したファイルを再配布します（<b>容量約７０％カット！</b>）。ソースを読む際やリファレンス、サンプルを見る場合はオリジナルを、実際に使用する場合はこの圧縮を利用する等使い分けてください。
※ＢＳＤライセンスにより再配布は認められていますのでご安心を。

<hr />

<h4>[ダウンロード]</h4>]]>
        <![CDATA[<div class="explain">

１．<a href="http://ecs.amonya.com/download/yui-util.js"><b>yui-util.js</b></a>・・・YAHOO.utilのセット（158KB->43KB = <b>約73%カット</b>）
　（animation.js,connection.js,dom,js,dragdrop.jsevent.js）
２．<a href="http://ecs.amonya.com/download/yui-calendar.js"><b>yui-calendar.js</b></a>・・・calendar.jsの圧縮（94KB->37KB = <b>約61%カット</b>）
３．<a href="http://ecs.amonya.com/download/yui-slider.js"><b>yui-slider.js</b></a>・・・slider.jsの圧縮（19KB->8KB = <b>約58%カット</b>）
４．<a href="http://ecs.amonya.com/download/yui-treeview.js"><b>yui-treeview.js</b></a>・・・treeview.jsの圧縮（39KB->14KB = <b>約64%カット</b>）
５．<a href="http://ecs.amonya.com/download/yui.js"><b>yui.js</b></a>・・・YAHOO.jsの圧縮（1.5KB->0.3KB = <b>約80%カット</b>）
６．<a href="http://ecs.amonya.com/download/yui-all.js"><b>yui-all.js</b></a>・・・１～５の全てを梱包（311KB->103KB = <b>約67%カット</b>）

</div>


<h4>[雑談]</h4>

最近はjavascriptのライブラリにはまってます。prototype.jsやYahoo! UI Library等かなり面白いですね。
prototype.jsの場合は、結構シンプルな構成なので気になりませんがYahoo!UI ライブラリの方はかなり複雑なので色々なファイルを定義しなければならず結構めんどくさいです。オーバーヘッドを起こさない為にもファイルを扱いやすいようにひとまとめにしてみました（ただそれだけです）。

また自分でテストした中では、prototype.jsとYahoo! UI Libraryの混在も可能です（オブジェクト汚染なんたらかんたらも過去のお話ですし）。Ajax部分についてはどちらも穴（＋バグ）がありどちらが良いとは言えません。ここらへんの話は後日・・・（別サイトに載せるかも？）。


<h4>[追記 2006/04/17]</h4>

一箇所修正。animation.jsのcorrectFrameというプライベート変数が関数の一番最後に定義されており
（変則的！）正しく圧縮が行われていなかった為、手作業で修正しました（雪さんThanx）。他にも同様の例がないかgrepしましたが、とりあえず見つかりませんでした。ほっ

他にもバグを発見次第報告してもらえると助かります。
]]>
    </content>
</entry>
<entry>
    <title>XMLパーサー(xmlparser.js) ver0.1.0</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/download/javascript/xmlxmlparserjs.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=38" title="XMLパーサー(xmlparser.js) ver0.1.0" />
    <id>tag:ecs.amonya.com,2006://1.38</id>
    
    <published>2006-04-07T14:29:14Z</published>
    <updated>2006-06-09T01:56:47Z</updated>
    
    <summary>Ajax経由で受け取ったXMLHTTPRequest.responseXML.d...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="Javascript" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[<p>Ajax経由で受け取ったXMLHTTPRequest.responseXML.documentElementをシンプルな形式でアクセス可能にするXMLパーサーです(javascriptライブラリ)。</p>
<p>DOMで直接アクセスするのがややこしい、面倒くさい場合に役立つライブラリです。</p>

<p>※ブラウザ依存の処理はほとんどないので汎用的に使えると思います。<br />　(文字コード（バグ？）の関係でSafariでは動かないかもしれません。今後対応予定)</p>

<p><b>pathメソッド</b>が味噌です。</p>
]]>
        <![CDATA[<h4>[ダウンロード]</h4>

<div class="explain">

・XMLパーサー：<a href="http://ecs.amonya.com/download/xmlparser.js">xmlparser.js(Ver0.1.0)</a>

</div>

<br />

<h4>[簡単なサンプル]</h4>

<p>Ajax部分はprototype.jsを使用しています（サンプルなので実際にはprototype.jsである必要はありません。Yahoo!UIライブラリや自作のライブラリでも動作します）。</p>

<div class="explain2"><pre>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html lang="ja"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;

&lt;title&gt;xmlparser.js Test&lt;/title&gt;

&lt;script type="text/javascript" src="./prototype.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="./xmlparser.js"&gt;&lt;/script&gt;
&lt;script&gt;
function loadXML(){
 var url = './test.xml';
 new Ajax.Request(url, {
  method: 'get',
  onComplete: function(request){
<span style="color:#FF0000;">   var xml = XMLParser.parse(request.responseXML.documentElement); // 1
   $('result').innerHTML = xml.dumpHTML(); // 2</span>
  }
 });
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body onload="loadXML();"&gt;
&lt;div id="result"style="white-space:nowrap;" &gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div>

<p>XMLParserの処理は<span style="color:#FF0000;">赤字</span>で書いた２行だけです。XMLParser.parse(documentElement)で<b>documentElement</b>を解析し、xml.dumpHTML()でxmlの内容を全てHTMLで吐き出しています。</p>

<hr />

<p>以下、<b>xml</b>（小文字）という表記は<br />
var xml = XMLParser.parse(request.responseXML.documentElement);<br />
で作成したxmlを指します。</p>
<br />

<h4>[XMLノードへのアクセス]</h4>

例えば、test.xmlの中身が以下のようなデータとします（適当なのは気にしないでください）。

<div class="explain"><pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;aaa&gt;
 &lt;bbb xxx="bbbの属性１" yyy="bbbの属性２"&gt;bbbの値&lt;/bbb&gt;
 &lt;ccc&gt;
  &lt;ddd&gt;dddの値１&lt;/ddd&gt;
  &lt;ddd&gt;dddの値２&lt;/ddd&gt;
 &lt;/ccc&gt;
&lt;/aaa&gt;</pre></div>

<p>例えば、"bbb"のXMLノードを取得するには、</p>

<div class="expain">
<b>xml.path('aaa->bbb')</b>
</div>

<p>と、記述すれば取得できます。もっと具体的に書くと、</p>

<div class="explain2"><pre>
var bbb = xml.path('aaa->bbb');
alert(bbb.name + ':' + bbb.value);
alert(bbb.getAttribute('xxx').name + ':' + bbb.getAttribute('xxx').value);
alert(bbb.getAttribute('yyy').name + ':' + bbb.getAttribute('yyy').value);</pre></div>

<p>こんな感じで直感的にXMLデータにアクセスすることができます。<br />
※必ずしもxmlからpathメソッドを呼び出さなくても、bbb.path('・・・')というように、各々のノードでも同様の処理ができます。</p>

<p>例ではdddは２つありますが、この場合は"dddの配列"が作成されます。アクセス方法としては、<br />
<b>xml.path('aaa->ccc->ddd->0') または、 xml.path('aaa->ccc->ddd')[0]</b><br />
という風に書くこともできます。配列なのでもちろんループ等も自由です。
</p>

<br />

<hr />

<h3>【各クラス解説】</h3>

<h4>[XMLParserクラス]</h4>

<table border="1">
<tr>
<td>メソッド</td>
<td>パラメータ</td>
<td>説明</td>
</tr>
<tr>
<td>parse(documentElement)</td>
<td>documentElement：基本的にはXMLHTTPRequest.responseXML.documentElement</td>
<td>DOMを解析して、XMLParser.Elementを作成する。</td>
</tr>
</table>

<br />

<h4>[XMLParser.Elementクラス]</h4>

<table border="1">
<tr>
<td>メソッド</td>
<td>パラメータ</td>
<td>説明</td>
</tr>
<tr>
<td>path(path)</td>
<td>path：XMLの走査順序を'->'区切りで指定</td>
<td>pathに当たるXMLParser.Nodeを取得する</td>
</tr>
<tr>
<td>dumpHTML()</td>
<td></td>
<td>XMLデータをダンプし、HTMLにて出力する（重いのであくまでデバッグ・確認用）。</td>
</tr>
<tr>
<td>dump()</td>
<td></td>
<td>XMLをダンプし、その配列を返す。dump().join('\n')、dump().join('&lt;br /&gt;')という風に使用する（重いのでデバッグ・確認用）。</td>
</tr>
</table>

<br />

<h4>[XMLParser.Nodeクラス]</h4>

<table border="1">
<tr>
<td>メンバ変数</td>
<td>説明</td>
</tr>
<tr>
<td>parent</td>
<td>親のXMLParser.Node</td>
</tr>
<tr>
<td>attributes</td>
<td>自身の属性（javascriptのattributesと同じ）</td>
</tr>
<tr>
<td>name</td>
<td>自身のタグ名</td>
</tr>
<tr>
<td>value</td>
<td>自身の値</td>
</tr>
</table>

<br />

<table border="1">
<tr>
<td>メソッド</td>
<td>パラメータ</td>
<td>説明</td>
</tr>
<tr>
<td>path(path)</td>
<td>path：XMLの走査順序を'->'区切りで指定</td>
<td>XMLParser.Elementと同じ</td>
</tr>
<tr>
<td>getParent()</td>
<td></td>
<td>親のXMLParser.Nodeを取得</td>
</tr>
<tr>
<td>getName()</td>
<td></td>
<td>自身のXMLタグ名を取得</td>
</tr>
<tr>
<td>getValue()</td>
<td></td>
<td>自身の値を取得</td>
</tr>
<tr>
<td>getAttribute(name)</td>
<td>name: 属性名称</td>
<td>属性名称から属性(Attr)を取得</td>
</tr>
<tr>
<td>getAttributes()</td>
<td></td>
<td>自身の属性(Attr)を全て取得</td>
</tr>
<tr>
<td>dumpHTML()</td>
<td></td>
<td>XMLParser.Elementと同じ。</td>
</tr>
<tr>
<td>dump()</td>
<td></td>
<td>XMLParser.Elementと同じ。</td>
</tr>
</table>

<p>※属性に関しては、javascriptのattributes(Attr)の挙動と同じ（というかそのもの）です。もう少し書くと、XMLParser.Nodeと同じようにname、valueにて名称、値を取り出すことができます。</p>

<br />

<hr />

<h4>[もう一つのアクセス方法]</h4>

<p>実際にはもう一つのアクセス方法があります。おそらくpathメソッドを使ったほうが分かりやすいですが、更に高速に処理しようと思えば、$+'XMLタグ名'という形式でアクセス可能です。</p>

<p>xml.$aaa.$ccc.$ddd[0].value</p>

<p>こんな感じでアクセスすることができます。頭に'$'が付いているのは、name,value,その他メソッド名と重複させない為です。また、javascriptで使えて、XMLで使えない先頭文字というと、'$'くらいしかないというところも大きいですが・・・。とりあえず試行錯誤の結果生まれたアクセス方法番外編でした（これを使う必要はありません）。</p>
]]>
    </content>
</entry>
<entry>
    <title>Version 2006-02-15(2006-03-08)の変更点</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/ecs40/version_2005100520060215200603.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=37" title="Version 2006-02-15(2006-03-08)の変更点" />
    <id>tag:ecs.amonya.com,2006://1.37</id>
    
    <published>2006-04-03T07:15:43Z</published>
    <updated>2006-04-03T07:36:48Z</updated>
    
    <summary>ECSのVersionが&quot;2005-10-05&quot;から&quot;2006-02-15&quot;にア...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="ECS4.0" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        ECSのVersionが&quot;2005-10-05&quot;から&quot;2006-02-15&quot;にアップデートされています。更に&quot;2006-03-08&quot;にまでアップデートされました。

このアップデートでの変更点について。

        <![CDATA[<hr />

<h4>[変更点]</h4>

※あまり時間がなかったので、とりあえずItemSearchで、ResponseGroup=Largeにした際の変更点を調べました。

<div class="explain">

【2005-10-05→2006-02-15】
・画像サーバーが変更
　ec1.images-amazon.com → images.amazon.com
・Offerに項目追加
　AverageFeedbackRating、TotalFeedback、TotalFeedbackPages
　※おそらく日本では関係なし

【2006-02-15→2006-03-08】
変更無し

</div>

<h4>[結論]</h4>

ど、どうでもいいし・・・。画像サーバーもimages-jp.amazon.comの方が速いのでは・・・？せめてimages-jpにしてくれたらら記述少なくて済むんですがね？

レビューがごく最近のものまで見れるとか、salesrankの順位が異なるとかなら有用な情報提供になったんですが・・・。期待はずれで申し訳ない（私が謝る事ではないですが）。

ま、まぁバージョンを新しくしても同じように使えるということで。

以上っ。
]]>
    </content>
</entry>
<entry>
    <title>いつのまにかスポーツ追加</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/ecs40/post_9.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=36" title="いつのまにかスポーツ追加" />
    <id>tag:ecs.amonya.com,2006://1.36</id>
    
    <published>2006-03-29T11:07:11Z</published>
    <updated>2006-03-29T05:13:05Z</updated>
    
    <summary> １．いつの間にやらスポーツが対応！ ２．ECS4.0のVersionも&quot;200...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="ECS4.0" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[<div class="explain2">

１．いつの間にやらスポーツが対応！
２．ECS4.0のVersionも"2006-02-15"に！

</div>

の２本立てでお送りします。（今回はドキュメンタリードラマ風味）
]]>
        <![CDATA[<hr />

<h4>[１．いつの間にやらスポーツが対応！？]</h4>

<div class="explain">

SearchIndex　　：　"SportingGoods"
BrowseNodeId　：　"14304371"

</div>

これで念願のスポーツを追加できる！よし、じゃあさっそくテストしてみよう。


-----自作のXSLTツールにてテスト（あえてAjaxではありません）-----


SearchIndexに"SportingGoods"を設定して、Keywordsに"<span style="color:red;">イチロー</span>"と、よし実行・・・

----- 処理実行中 -----

結果キター。一番目の結果が


<span style="font-size:16px;">「<a href="http://www.amazon.co.jp/exec/obidos/redirect?tag=osusumemovie-22%26link_code=xm2%26camp=2025%26creative=165953%26path=http://www.amazon.co.jp/gp/redirect.html%253fASIN=B000AR6SNG%2526tag=osusumemovie-22%2526lcode=xm2%2526cID=2025%2526ccmID=165953%2526location=/o/ASIN/B000AR6SNG%25253FSubscriptionId=00REHF8VDA8YM54A6CG2" target="_blank">第一精工 ボートイチロー 02016</a>」</span>


・・・・・・・・・あれ？


<span style="font-size:16px;">ま</span>、まぁ予想した結果と違ったけど、キーワードを指定しての検索は使えるな。
これでやっとスポーツのカテゴリーを追加できるよ。


念のためBrowseNodeIdに"14304371"を指定して実行と・・・

----- 処理実行中 -----

<div class="explain">

【AWS.InvalidParameterValue】
14304371は、BrowseNodeIdの値として無効です。値を変更してから、再度リクエストを実行してください。

</div>


<b>へ？</b>


えーっと、もう一度AmazonでBrowsenode調べてコピペして実行・・・

----- 処理実行中 -----

<div class="explain">

【AWS.InvalidParameterValue】
14304371は、BrowseNodeIdの値として無効です。値を変更してから、再度リクエストを実行してください。

</div>


<span style="font-size: 18px;"><b>な、なんだってー（驚愕</b></span>


という訳で、まだしばらくスポーツは封印します_no

<hr />

<h4>[２．ECS4.0のVersionも"2006-02-15"に！]</h4>

ECS4.0で指定する"Version"（Versionによってデータ結果が異なる可能性がある）が"2006-02-15"にＵＰしました。実に去年の10月から4ヶ月ぶりの更新ですね。ちょっとだけ試して気になったのは、Versionを指定しなかった場合は最新のVersionになるようなことを書いてた気がするんですが、Versionを指定しないで取得したXMLは"2005-10-05"でした。"2006-02-15"を指定するとキチンと反映されました。"2005-10-05"のバージョンが安定版なのかな？それとも日本Amzonのてぬｋ・・・いや、これ以上は止めておきましょう。


ごめんなさい。スポーツのBrowsenode未対応のショックで今日のところはこれ以上は調査する元気がありません。という訳で、変更点等については気が向いたら（気がついたら）書きます。まぁ、ほとんど変更ないような予感がしますが・・・。
]]>
    </content>
</entry>
<entry>
    <title>バーチャルウィンドウ(virtual-window.js)</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/download/javascript/post_8.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=33" title="バーチャルウィンドウ(virtual-window.js)" />
    <id>tag:ecs.amonya.com,2006://1.33</id>
    
    <published>2006-03-10T13:41:18Z</published>
    <updated>2006-04-26T08:19:22Z</updated>
    
    <summary>Javascriptで仮想的にウィンドウ環境を作るライブラリです。 仮想的にスク...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="Javascript" />
            <category term="Javascript" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[<strong>Javascriptで仮想的にウィンドウ環境を作るライブラリです。</strong>

仮想的にスクリーンを作り、その内側に移動できるウィンドウや画像を梱包する事ができます。ウィンドウは最小化・最大化も可能です（スクリーンサイズ依存）。ウィンドウは単体でも利用可能です（最大化は不可）。また、ウィンドウの内部（クライアント領域）には、HTMLや、他サイトの表示も可能です。

思っていたよりも大掛りになったので、とりあえずライブラリのダウンロードとこんなことができるというサンプルを紹介します。クラス等の使い方については後々追加していきます。

<h4>[動作確認ブラウザ]</h4>

<div class="explain">

・Internet Explore 6.0
・Mozilla Fire Fox 1.5
・Netscape 7.1
・Opera 8.5

</div>

↓ではサンプル↓]]>
        <![CDATA[<h4>[サンプル]</h4>

<div class="explain">

・<a href="http://ecs.amonya.com/test/virtual-window.html" target="_blank">バーチャルウィンドウ サンプル（色々動かしてみてください）</a>

</div>

<h4>[ダウンロード]</h4>

<div class="explain">

・virtual-window.js(Ver0.2.1)[公開中止（Yahoo! UI Libraryで実現する方が現実的）]

</div>

<h4>[必要なライブラリ]</h4>

<div class="explain">

・<a href="http://prototype.conio.net/" target="_blank">Prototype.js</a>・・・Ajax分野のデファクト・スタンダード
・<a href="http://ecs.amonya.com/download/javascript/style.html" target="_blank">Style.js</a>・・・スタイル設定ライブラリ

</div>

<h4>[更新履歴]</h4>

(03月10日：virtual-window.js ver0.2.1)

メンバ変数の命名規則を変更しました。public変数名は、”backgroundColor”のように、今後javascriptに合わせます。その他、MovableScreenの動作遅延の対処。

(03月09日：virtual-window.js ver0.2.0)

拡張性を高める為、クラスを大幅に改良しました。クラス名、メソッド、プロパティ等一通り見直しましたので、Ver0.1.0との互換性はあまりありません。従ってなるべくVer0.2.0を利用するようにしてください。今後の開発は0.2.0ベースになります。

(03月06日：vritual-window.js ver0.1.0)

できるだけ継承させることで、汎用的に使える・他の人が拡張しやすいライブラリを目指したいと思っています。が、まだソース整理できていない部分が結構あるので(特にMovableWindow)、バージョンは0.1.0としています。

<h4>[独り言]</h4>

ふぅ、何とかVer0.2.1で何とか初期バージョンと言えるくらいにはなったかな？という所です。問題点はだいぶ克服してきたので、次は機能拡張していきます。次はD&Dでリサイズできるようにするか、最大化・最小化するときにアニメーションにするか・・・。次回バージョンUPをお楽しみに～。
]]>
    </content>
</entry>
<entry>
    <title>Style設定ライブラリ(style.js)</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/download/javascript/style.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=32" title="Style設定ライブラリ(style.js)" />
    <id>tag:ecs.amonya.com,2006://1.32</id>
    
    <published>2006-02-20T12:11:02Z</published>
    <updated>2006-04-26T08:18:10Z</updated>
    
    <summary>javascriptでスタイルの設定・削除をシンプルに行う為のライブラリ。 [メ...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="Javascript" />
            <category term="Javascript" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[<strong>javascriptでスタイルの設定・削除をシンプルに行う為のライブラリ。</strong>

<h4>[メリット]</h4>

<div class="explain">

１．特定のオブジェクト（を含む）以下の<b>指定したタグ</b>に対して自由にスタイルを設定できる。
２．オブジェクトだけでなく、”ID”の名称のみでもアクセス可能（利便性）。
３．その他、利便性の高いメソッド。
４．全てstaticにアクセスできる為、わざわざオブジェクトを作成する必要なし。
５．スタイルの削除も可能（HTMLのタグ内で直に指定したスタイルの削除も可）。

</div>

<h4>[ダウンロード]</h4>]]>
        <![CDATA[<div class="explain2">

・Style.js(ver1.1.0)・・・スタイル設定ライブラリ（※utf-8）[公開中止]

</div>


<h4>[簡単な使用例]</h4>

Style.[メソッド名]でアクセスします。

<div class="explain2">

&lt;HTML&gt;
&lt;HEAD&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;

&lt;script type="text/javascript" charset="utf-8" src="./style.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
function init(){
<font color="red">Style.initMAP(document);</font> <b>/*1*/</b>
<font color="red">Style.setMAP('id1', 5, 5);</font> <b>/*2*/</b>
<font color="red">Style.setMAP('id2', '0px', '3px 8px 3px 8px');</font> <b>/*3*/</b>
<font color="red">Style.set('id1', 'border', 'solid #DDDDDD 1px');</font> <b>/*4*/</b>
<font color="red">Style.setInnerTag('id2', 'p', 'color', 'red');</font> <b>/*5*/</b>
<font color="red">Style.removeAll('id2');</font> <b>/*6*/</b>
}
&lt;/script&gt;

&lt;/HEAD&gt;
&lt;BODY onLoad="init();"&gt;
&lt;div id="id1"&gt;
&lt;h1&gt;title&lt;/h1&gt;
&lt;div id="id2"&gt;
&lt;p&gt;test1&lt;/p&gt;
&lt;p&gt;test2&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/BODY&gt;
&lt;/HTML&gt;

</div>

/*1*/は、<strong>全てのタグ</strong>のmarginとpaddingを'0px'で初期化しています。
/*2*/は、id='id1'のmarginとpaddingを設定しています（数字の場合、"px"に変換されます）。
/*3*/のように通常のmargin、paddingの書式で書くこともできます。
/*4*/では、ID(またはオブジェクト)に対して汎用的に全てのスタイルを記述できます。
/*5*/は、指定したタグのスタイルを設定しています（文字色を赤）。
/*6*/は、指定したIDの全てのスタイルを削除します。


<h4>[各メソッド一覧]</h4>

<table border="1">
<tr>
<td>initMAP(element, myself)</td>
<td>element - ID or オブジェクト<br />myselef - true or false(自分自身も対象にするか)</td>
<td>element以下の全てのタグのmarginとpaddingを'0px'で初期化する。</td>
</tr>
<tr>
<td>setMAP(element, margin, padding)</td>
<td>element - 略<br />margin - marginの値<br />padding - paddingの値</td>
<td>elementに対するmarginとpaddingの設定（直接数値も可）</td>
</tr>
<tr>
<td>setMAPInnerTag(element, tag_name, margin, padding)</td>
<td>element - 略<br />tag_name - 対象のタグ名('*'で全て)<br />margin - marginの値<br />padding - paddingの値</td>
<td>element以下指定したタグに対するmarginとpaddingの設定</td>
</tr>
<tr>
<td>setWAH(element, width, height)</td>
<td>element - 略<br />width - 幅<br />margin - 高さ</td>
<td>element以下指定したタグに対するmarginとpaddingの設定（直接数値も可）</td>
</tr>
<tr>
<td>set(element, style, value)</td>
<td>element - 略<br />style - スタイル名<br />value - スタイルに設定する値</td>
<td>汎用のスタイル設定（styleにはjavascriptでのスタイル名を指定する）</td>
</tr>
<tr>
<td>setInnerTag(element, tag_name, style, value)</td>
<td>element - 略<br />tag_name - 対象のタグ名<br />style - スタイル名<br />value - スタイルに設定する値</td>
<td>element以下指定したタグに対する汎用スタイル設定</td>
</tr>
<tr>
<td>get(element, style)</td>
<td>element - 略<br />style - スタイル名</td>
<td>elementに対するstyleの取得。オマケ</td>
</tr>
<tr>
<td>remove(element, style)</td>
<td>element - 略<br />style - スタイル名</td>
<td>elementの指定したstyleの削除</td>
</tr>
<tr>
<td>removeInnerTag(element, tag_name, style)</td>
<td>element - 略<br />tag_name - 対象のタグ名<br />style - スタイル名</td>
<td>element以下指定したタグに対するstyleの削除</td>
</tr>
<tr>
<td>removeAll(element)</td>
<td>element - 略</td>
<td>elementの全てのスタイルの削除</td>
</tr>
<tr>
<td>removeAllInnerTag(element, tag_name)</td>
<td>element - 略<br />tag_name - 対象のタグ名</td>
<td>element以下指定したタグに対する全てのスタイルの削除</td>
</tr>
<tr>
<td style="background-color:#eeeeee;">_getElement(element)</td>
<td style="background-color:#eeeeee;">element - 略</td>
<td style="background-color:#eeeeee;">内部メソッド。Prototype.jsでいうところの”$()”（の簡易版）。</td>
</tr>
</table>


<h4>[基本的な使い方]</h4>

・スタイルシートのmargin、padding設定の影響をなくす為、最初にinitMAP([id名])の使用を推奨。
・initMAP使用後、各々のID（タグ）に対してmargin、paddingを設定していきます。
・指定したID以下全てのタグに対して設定する場合は、tag_nameに'*'を入れます。
・initMAPを除き、ほとんどのメソッドは「element設定用」、「element以下のタグ設定用（elementを含まない）」の２種類あります。タグ用はメソッドの最後に"InnerTag"を追加した名称になっています。
・WAH、MAPは各々"width and height"、"margin and padding"の略です。initMAPを除き、必ずしもこのメソッドを利用する必要はなく、setメソッドで代用できます（行数を減らす目的のみです）。好みで使い分けてください。

<h4>[コラム]</h4>

スタイルシートでmarginやpaddingを設定している場合、ツールなど他サイトで使いまわすようなjavascriptはいちいち細かくまでスタイルを設定しなければなりませんでした。特に「<b>特定のID以下の内部タグのスタイルを全て設定する</b>」というのはかなり骨が折れ、さらにソースが美しくなくなります。なので、その部分を解消する為にこのライブラリを作成しました。最初が全てStyle.[メソッド名]で始まるので、結構ソースは綺麗に整いますよ。ま、まぁ処理速度は速くないです、はい。

<h4>[資料：styleで設定できる値の一覧]</h4>

<div class="explain">

background 
backgroundAttachment
backgroundColor
backgroundImage
backgroundPosition
backgroundRepeat
border
borderBottom
borderBottomColor
borderBottomStyle
borderBottomWidth
borderColor
borderLeft
borderLeftColor
borderLeftStyle
borderLeftWidth
borderRight
borderRightColor
borderRightStyle
borderRightWidth
borderStyle
borderTop
borderTopColor
borderTopStyle
borderTopWidth
borderWidth
bottom
captionSide
clear
clip
color
cursor
direction
display
emptyCells
float
font
fontFamily
fontSize
fontStretch
fontStyle
fontVariant
fontWeight
height
left
letterSpacing
lineHeight
listStyle
listStyleImage
listStylePosition
listStyleType
margin
marginBottom
marginLeft
marginRight
marginTop
maxHeight
maxWidth
minHeight
minWidth
overflow
padding
paddingBottom
paddingLeft
paddingRight
paddingTop
pageBreakAfter
pageBreakBefore
position
right
scrollbar3dLightColor
scrollbarArrowColor
scrollbarBaseColor
scrollbarDarkshadowColor
scrollbarFaceColor
scrollbarHighlightColor
scrollbarShadowColor
scrollbarTrackColor
tableLayout
textAlign
textDecoration
textIndent
textTransform
top
verticalAlign
visibility
width
wordSpacing
zIndex

</div>
]]>
    </content>
</entry>
<entry>
    <title>第四話：ECS4.0のデータを取得してみよう！</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/ecs/ecs40_1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=28" title="第四話：ECS4.0のデータを取得してみよう！" />
    <id>tag:ecs.amonya.com,2006://1.28</id>
    
    <published>2006-02-07T09:01:00Z</published>
    <updated>2006-02-07T09:27:52Z</updated>
    
    <summary>この物語は、ECSどころかアフェリエイトすら曖昧な知識のキョーコが立派に成長して...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="ECS初心者物語" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[この物語は、ECSどころかアフェリエイトすら曖昧な知識のキョーコが立派に成長していくサクセスストーリである（もうね、ビックリするくらいフィクションです）。

<a href="http://ecs.amonya.com/ecs/ecs_1.html">ECS4.0の概要の説明</a>が終わり、実際にアクセスする方法の説明に移っていく・・・。

<h4>[登場人物]</h4>

<span style="color:#0000ff;">シ</span>：シズマル・・・俺。ECSを教えながらも勉強中。
<span style="color:#ff5555;">キ</span>：キョーコ・・・何とかAmazonアフェリエイトの基礎を取得。

では、はじまりはじまり。]]>
        <![CDATA[<hr />

<span style="color:#0000ff;">シ</span>「お～っす。キョーコ」


シズマル、不敵な笑みをこぼす。


<span style="color:#ff5555;">キ</span>「シズ。ま、また勉強？」

<span style="color:#0000ff;">シ</span>「その通り！」

<span style="color:#ff5555;">キ</span>「げ～。めんどくさいな～」

<span style="color:#0000ff;">シ</span>「まぁまぁ、前回はECS4.0の概要の話だったけど、今回は実践を兼ねてアクセスしていくつもりだから、楽しいと思うよ」

<span style="color:#ff5555;">キ</span>「りょ～か～い」

<span style="color:#0000ff;">シ</span>「それじゃあ、キョーコに飽きられないようにXMLデータを取得するところから始めようか」

<span style="color:#0000ff;">シ</span>「と思ったけど、先にAmazon Web サービスのアカウントを取得しないとダメだね。」

<span style="color:#ff5555;">キ</span>「ん？AmazonのIDは持ってるよ？」

<span style="color:#0000ff;">シ</span>「あぁ、Amazon Web サービスのアカウントは、AmazonショッピングのIDやAmazonアソシエイトIDとは別に取得しないとダメなんだよ」

<span style="color:#ff5555;">キ</span>「うーん。めんどくさいね」

<span style="color:#0000ff;">シ</span>「まぁまぁ。更に面倒なことに、全部英語なので注意（笑。詳しいアカウントの取得方法は<a href="http://www.bayashi.net/" target="_blank">お気楽極楽ブログ</a>さんの<a href="http://www.bayashi.net/archives/entry/2005/000185.html" target="_blank">Amazon Web サービス アカウントの取得方法</a>を参照してIDを取得してみて。」

<span style="color:#ff5555;">キ</span>「シズも説明するのがめんどくさくなったんでしょ」


キョーコ、シズマルに冷ややかな目線を送る。


<span style="color:#0000ff;">シ</span>「<span style="font-size:16px;">そ</span>、そんなことはないよ。。色々なサイトから情報を得る事も大事なんですよ、きっと（何故か敬語」

<span style="color:#ff5555;">キ</span>「<span style="font-size:14px;">ふ～～ん。</span>」


キョーコ、そういいながらも淡々とIDを取得。


<span style="color:#ff5555;">キ</span>「はい、ID取ったわよ。」

<span style="color:#0000ff;">シ</span>「ごくろうさん。Amazon Web サービスではこの”Access Key ID”っていうのが全てのリクエストで必要になるんだ。だからどこかにメモしといてね。」

<span style="color:#ff5555;">キ</span>「りょーかいっ」

<span style="color:#0000ff;">シ</span>「前置きが長くなったけど、これでもうAmazonからXMLデータを取得できる準備は完了。何も考えずに下のURLにアクセスしてみて。Access Key Id にはさっき取得したIdを入れてね」

<div class="explain2" width="520px">

http://webservices.amazon.co.jp/onca/xml
?Service=AWSECommerceService
&AWSAccessKeyId=<span style="color:red;">[あなたのAccess Key Id]</span>
&AssociateTag=<span style="color:red;">[あなたのアソシエイトID]</span>
&Version=2005-10-05
&ResponseGroup=Small
&ItemPage=1
&Sort=titlerank
&Operation=ItemSearch
&ContentType=text%2Fxml
&Keywords=bio
&SearchIndex=VideoGames

</div>

【<a href="./sample01.xml" target="_blank">→サンプル</a>】

<span style="color:#ff5555;">キ</span>「おお！お？な、何この文字の羅列！？」

<span style="color:#0000ff;">シ</span>「これが前回説明したXMLデータだよ。上のURLでは、カテゴリーが”ゲーム”でキーワードが”bio”のデータを取得するようなリクエストが含まれているんだ。」

<span style="color:#ff5555;">キ</span>「そうなんだ。でもURLだけで取得できちゃうの？」

<span style="color:#0000ff;">シ</span>「その通り！それがこのWebサービスの最大の特徴なんだよ。技術的には”REST”っていう方式なんだけど、要はURLの中にリクエストを含めて、その組み立てたURLにアクセスするだけで、好きなデータを取得できるんだよ！」

<span style="color:#ff5555;">キ</span>「きょ、今日は熱く語るのね。でも、これって意外と簡単なんだね。」

<span style="color:#0000ff;">シ</span>「そうそう、理屈はいたって簡単なんだ。じゃあ、実際に今回リクエストした検索(ItemSearch)のパラメータを解説していこう。」

<div class="explain">

●http://webservices.amazon.co.jp/onca/xml
　・・・ベースとなるＵＲＬ
●Service=AWSECommerceService
　・・・サービスの内容。ECS4.0を使う場合は固定。必須。
●AWSAccessKeyId=<span style="color:red;">[あなたのAccess Key Id]</span>
　・・・取得したAccess Key Idを指定。必須。
●AssociateTag=<span style="color:red;">[あなたのアソシエイトID]</span>
　・・・アソシエイトＩＤ。任意。商品のURLを自分で作成するなら不必要。
●Version=2005-10-05
　・・・ECS4.0のバージョン。この指定がない場合は最新のバージョン。
●ContentType=text%2Fxml
　・・・取得するテキストフォーマット。text/xmlまたはtext/html。
●Operation=ItemSearch
　・・・オペレーション名を指定。ItemSearch(商品の検索)、ItemLookup(商品詳細)等
●SearchIndex=VideoGames
　・・・カテゴリーの指定。Books、DVD、VideoGames、Software、Blended(全て)等。必須。
●ResponseGroup=Small
　・・・取得データの指定。Small、Medium、Largeの簡易指定から、Images、Offersなど詳細指定まで多岐に渡る。
●ItemPage=1
　・・・取得するページ番号。１ページ１０件（まで）取得。省略時は"1"。
●Sort=titlerank
　・・・ソートの種類。省略するとsalesrank(売上順)。カテゴリー毎に違う為若干ややこしい。任意。
●Keywords=bio
　・・・検索キーワード。任意。

※特殊な記号（"/"、" "）や、日本語は<strong>ＵＲＬエンコード</strong>する必要がある。

</div>

<span style="color:#ff5555;">キ</span>「うっ、難しい・・・。」

<span style="color:#0000ff;">シ</span>「だろうね。ただ今回は雰囲気だけ掴んでもらったら十分だよ。ようはこんな感じで指定していくんだろうなって感じで。」

<span style="color:#ff5555;">キ</span>「じゃあ質問～。途中に出てくる"?"とか"&"とかって何？」

<span style="color:#0000ff;">シ</span>「あ、基本的な事を教えてなかった・・・。CGI(Perl、PHP等）で、パラメータを指定してアクセスする時に使うんだよ。パラメータの指定は"?"から始まって、一つのパラメータを指定するのに"[パラメータ名]=[値]"って定義していくんだ。２つめ以降のパラメータについては"&"で繋いでいくっていう仕組み」

<span style="color:#ff5555;">キ</span>「なるほどね。じゃあこのパラメータって順番は決まってるの？」

<span style="color:#0000ff;">シ</span>「いや、中には決まってる場合もあるけど、ECS4.0の場合は順番は関係ないよ。後ろに追加していく感じでＯＫ。」

<span style="color:#ff5555;">キ</span>「う～ん。何となく分かったような、分からないような。」

<span style="color:#0000ff;">シ</span>「ははは、キョーコは○○だからねっ。」


<span style="font-size:18px;">ドゴッ</span>。鈍い音が響き渡る。


<span style="color:#0000ff;">シ</span>「<span style="font-size:18px;">うﾞっ</span>・・・。み、み、みぞおちに入りましたよ。<span style="font-size:10px;">キョーコさん・・・</span>」

<span style="color:#ff5555;">キ</span>「そういうのを自業自得っていうのね、きっと。うんうん」


シズマル。５分後やっとまともに喋れるように。


<span style="color:#0000ff;">シ</span>「ま、まぁ、こういうのは慣れだよ。最初は最小限でＵＲＬ作って、その後に徐々に機能を覚えていけばいいと思うよ。」

<span style="color:#ff5555;">キ</span>「分かったわ。で、このXMLデータをどうやって加工するの？」

<span style="color:#0000ff;">シ</span>「気が早いな。もうちょっとキョーコが自分で色々試してみてからにしようか。」

<span style="color:#ff5555;">キ</span>「りょ～か～い。<span style="font-size:16px;"で、</span>今日はもう終わりよね？？」


キョーコ、すごむ！


<span style="color:#0000ff;">シ</span>「は、はい。今日はここで終わらせていただきます！」

<span style="color:#ff5555;">キ</span>「よろしい！」


という訳で、次回に続く。
]]>
    </content>
</entry>
<entry>
    <title>画像追加版の広告完成！</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/post_6.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=26" title="画像追加版の広告完成！" />
    <id>tag:ecs.amonya.com,2006://1.26</id>
    
    <published>2006-02-01T17:34:25Z</published>
    <updated>2006-02-03T00:36:02Z</updated>
    
    <summary>やっと「AmonyaAds」に画像追加版が完成しました。テキスト版の広告だけでも...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[やっと「<a href="http://ads.amonya.com/" target="_blank">AmonyaAds</a>」に画像追加版が完成しました。テキスト版の広告だけでも十分かと思っていましたが、やっぱり需要がありそうなので画像版も作成しました。

これからもシンプルだけど、自在にカスタマイズできるような広告を作っていけたらいいなぁと思う今日この頃でありましたとさ。めでたし、めでたし。

以下詳細。
]]>
        <![CDATA[私はテキスト版の方が好きですが、ユーザーの事を考えると画像の有無はユーザーに任せるというのが筋だと思ったので画像版追加しました。

ただ、実際にテストした限り小さいサイズの広告は明らかに画像を小さくするか、テキストをほとんどなくすかのどちらかしかできず、逆に見づらくなると判断しました。従って、小さめの広告は画像追加はできないようにしています。小さめの広告でも表示数を減らせばできなくはないですが・・・。

<div class="explain">

<h4>[画像追加対応]</h4>

・ビッグバナー (728×90)
・ワイド スカイスクレイパー (160×600)
・レクタングル（小） (180×150)
・レクタングル（中） (300×250)
・レクタングル（大）(336×280)
・スクウェア(250×250)

<h4>[画像追加未対応]</h4>

・ハーフ バナー (234×60)
・バナー (468×60)
・バナー（縦） (120×240)
・スカイスクレイパー (120×600)
・ボタン (125×125)

</div>

<h4>[サンプル(300×250・音楽)]</h4>

<div align="left">
<script type="text/javascript">
amonya_width = 300;
amonya_height = 250;
amonya_search_index = 'Music';
amonya_format='image';
amonya_associate_id='osusumemovie-22';
amonya_color_border='555555';
amonya_color_bg='FFFFFF';
amonya_color_title='333333';
amonya_color_text='000000';
amonya_color_price='FF3300';
amonya_timer_second=10;
amonya_flg_fadein=true;
</script>
<script type="text/javascript" src="http://ads.amonya.com/lib/show_ads.js">
</script>
</div>

さてさて、次は裏技のみで公開しているBrowsenode対応を正式版に移行するかなぁ。でも実際のところ色々問題があるんだよな～。
]]>
    </content>
</entry>
<entry>
    <title>Cartオペレーション（カート処理）</title>
    <link rel="alternate" type="text/html" href="http://ecs.amonya.com/ecs40/cart.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://mt.amonya.com/mt-atom.cgi/weblog/blog_id=1/entry_id=24" title="Cartオペレーション（カート処理）" />
    <id>tag:ecs.amonya.com,2006://1.24</id>
    
    <published>2006-01-27T14:40:55Z</published>
    <updated>2006-02-08T03:46:32Z</updated>
    
    <summary>ECS4.0ではカートの処理を自サイトに組み込むことができます。実際にどこまで使...</summary>
    <author>
        <name>shiz</name>
        <uri>http://www.amonya.com/</uri>
    </author>
            <category term="ECS4.0" />
    
    <content type="html" xml:lang="ja" xml:base="http://ecs.amonya.com/">
        <![CDATA[ECS4.0ではカートの処理を自サイトに組み込むことができます。実際にどこまで使えるか色々試したので、その内容について書きたいと思います（<a href="http://www.amonya.com/" target="_blank">ええもん屋.com</a>にも組み込みたかったんですが、画面遷移なしでカート処理をしようと思うと色々見た目上・操作上の問題があったので今後の課題です）。

一通りカート処理するには、５つのオペレーションを使わなければならず一見複雑そうにみえますが、取得するXMLデータはほとんど同じなのでそれほど問題にはならないでしょう。ただし、リクエスト時は他のオペレーションよりもやや複雑です。

Amazon.co.jpのカートに追加するオペレーションを使う方法以外にも存在します。その方法についてはこのエントリーの最後に追記しています(2006/01/31)。

では、詳細↓]]>
        <![CDATA[<hr />

<h4>[ショッピングカートオペレーションのおさらい]</h4>

<a href="http://ecs.amonya.com/ecs40/operations.html">OperationとResponseGroupの一覧</a>にも書きましたが、一応カートオペレーションの一覧。

<div style="text-align:left;margin-left:15px;">

<table border="1px">
<tr>
<td>CartAdd</td>
<td>ショッピングカートに商品を追加。</td>
</tr>
<tr>
<td>CartClear</td>
<td>ショッピングカートの中身をクリア。</td>
</tr>
<tr>
<td>CartCreate</td>
<td>新しくショッピングカートを作成。</td>
</tr>
<tr>
<td>CartGet</td>
<td>ショッピングカートの中身を検索。</td>
</tr>
<tr>
<td>CartModify</td>
<td>カート内の商品の数量変更や削除。</td>
</tr>
</table>

</div>


<h4>[おおまかな流れ]</h4>

<div class="explain">

１．カートの作成
２－１．商品の追加
２－２．商品の変更（削除も含む）
２－３．カートの中身のクリア
３．Amazon.co.jpのカートに追加

</div>

最初に”カートを作成”し、最終的に”Amazon.co.jpのカートに追加”します。その間に”別の商品をカートに追加”したり、”商品の変更”をしたり、”カートを空”にしたりを繰り返すというのが大まかな流れです。

※ECS4.0で作成したカートは普段使う<b>Amazon.co.jpのカートとは別に管理されます</b>。従って、Amazonのカートに追加する処理が別途必要になります。


<h4>[基本知識]</h4>

カートを処理する上で覚えておかなければいけないXML内のデータについて書いておきます。

<div class="explain">

・CartId ・・・ カートのIDです。
・HMAC ・・・ 意味合いはよく分かりませんが、必ずCartIdとセットで必要になります。
・URLEncodedHMAC ・・・ 上記のURLエンコード版。何故かここだけ親切です（笑
・PurchaseURL ・・・ Amazon.co.jpのショッピングカートへ追加するURLです。
・CartItemId ・・・ カートに入っている個々の商品に対するId。変更する際に必要です。
・他の項目はXMLデータを見れば分かる範囲だと思います。

</div>

次に、商品の指定方法について。カートに商品を追加や変更をする場合、複数の商品を一度に指定することができます。その指定方法は、以下のようになっています。

<div class="explain" style="background-color:#eeeeff;">

Item.<span style="color:#FF0000;">[番号]</span>.<span style="color:#FF0000;">[パラメータ名]</span>

</div>

例えば、”・・・Item.1.ASIN=B0007YT8XE”のように書きます。[番号]については特に厳密な制限がある訳ではなさそうです。"1"から順番に書く必要はないですし、順不同でも大丈夫です。更に"0"でも"99"でも"01"のような書き方でもOKです。ただ[番号]が若い順から処理が実行されるようです。逆に言うと[番号]は処理順序という意味合いしかない事を覚えておきましょう。

また重要な点として、５つのオペレーションは<b>全て</b>カートの中身を返します。従ってどの処理をしてもカートの中身を更新することが可能です。


<h4>[CartCreateオペレーション]</h4>

CartCreateオペレーションは、カートを作成するオペレーションであり、カート処理の一番最初に行うオペレーションですが、先にカートだけを作成することはできません。必ずカートに入れる商品が必要となります。別の言い方をすると、<b>最初に商品をカートに入れる段階まで、カートを作成することはできません</b>。

では、パラメータについて。あまり使わないパラメータは書きませんのでご了承を。書いてないパラメータは英文のHelpを読んでください。

<div class="explain" style="background-color:#eeeeff;font-size:medium;">

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=<span style="color:#ff0000;">[あなたのAccessKeyID]</span>&AssociateTag=<span style="color:#ff0000;">[あなたのアソシエイトID]</span>&Operation=CartCreate&Item.1.ASIN=<span style="color:#ff0000;">[ASINコード]</span>&Item.1.Quantity=<span style="color:#ff0000;">[商品の個数]</span>&Item.2.ASIN=<span style="color:#ff0000;">[ASINコード]</span>&Item.2.Quantity=<span style="color:#ff0000;">[商品の個数]</span>&MergeCart=True

</div>

まず商品の書き方は、上の「基礎知識」で書いた通り、Item.[番号].[パラメータ]です。で、CartCreateの場合は、”Item.[番号].ASIN”と”Item.[番号].Quantity”がワンセットになります。このASINとQuantityの[番号]は同一である必要があります。

・ASIN ・・・ カートに入れる商品のASINコード。
・Quantity ・・・ 商品の購入数量。
・MergeCart ・・・ カートにマージするかしないか(”True” or ”False”)。

MergeCartに関しては以下全てのオペレーションで共通ですが、MergeCartをFalseにすると、Amazon.co.jpのカートに追加した時に、カート内ではなく保存したデータとして取り扱われ、もう一度カートに戻す処理をしなければ購入できません。つまり、かなり購入率が下がってしまうと思われますので、全てのカートオペレーションでMergeCartはTrueにしておいた方がいいでしょう。

また英文のHelpでは省略されていますが、AssociateTagは忘れずに入れましょう。PurchaseURLにアソシエイトIDが付加される為、MergeCart同様いつAmazon.co.jpのカートに追加されてもいいように５つ全てのオペレーションに入れておくことをオススメします（さすがにCartClearはいらないかもしれませんが・・・）。


<h4>[CartAddオペレーション]</h4>

CartAddオペレーションは、”カートを作成しない”ことを除けばほぼCartCreateと同じ挙動です。もちろん追加なので、パラメータに作成したカートの情報は必要です。

<div class="explain" style="background-color:#eeeeff;font-size:medium;">

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=<span style="color:#ff0000;">[あなたのAccessKeyID]</span>&AssociateTag=<span style="color:#ff0000;">[あなたのアソシエイトID]</span>&Operation=CartAdd&CartId=<span style="color:#ff0000;">[カートID]</span>&HMAC=<span style="color:#ff0000;">[HMAC]</span>&Item.1.ASIN=<span style="color:#ff0000;">[ASINコード]</span>&Item.1.Quantity=<span style="color:#ff0000;">[商品の個数]</span>&Item.2.ASIN=<span style="color:#ff0000;">[ASINコード]</span>&Item.2.Quantity=<span style="color:#ff0000;">[商品の個数]</span>&MergeCart=True

</div>

[カートID]と[HMAC]は、CartCreateでカートを作成した際に取得した”CartId”と"HMAC"のデータを入れます。CGI等で自前でURLエンコードしなければならない場合は、[HMAC]に”URLEncodedHMAC”を入れると更に楽できます。


<h4>[CartGet・CartClearオペレーション]</h4>

パラメータが同じなので、CartGetとCartClearは一緒に書きます。CartGetはカートの中身の取得、CartClearはカートの中身のクリア（空にする）です。カートをクリアしても、カートは消えず再度CartAddする等そのまま使えます。

<div class="explain" style="background-color:#eeeeff;font-size:medium;">

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=<span style="color:#ff0000;">[あなたのAccessKeyID]</span>&AssociateTag=<span style="color:#ff0000;">[あなたのアソシエイトID]</span>&Operation=CartGet&CartId=<span style="color:#ff0000;">[カートID]</span>&HMAC=<span style="color:#ff0000;">[HMAC]</span>&MergeCart=True

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=<span style="color:#ff0000;">[あなたのAccessKeyID]</span>&AssociateTag=<span style="color:#ff0000;">[あなたのアソシエイトID]</span>&Operation=CartClear&CartId=<span style="color:#ff0000;">[カートID]</span>&HMAC=<span style="color:#ff0000;">[HMAC]</span>&MergeCart=True

</div>

[カートID]と[HMAC]はCartAddともちろん同じです。


<h4>[CartModifyオペレーション]</h4>

カートに入っている商品の内容変更です。基本的には商品の数量変更がメインになると思います。特定の商品の削除もこのオペレーションで行います。

<div class="explain" style="background-color:#eeeeff;font-size:medium;">

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=<span style="color:#ff0000;">[あなたのAccessKeyID]</span>&AssociateTag=<span style="color:#ff0000;">[あなたのアソシエイトID]</span>&Operation=CartModify&CartId=<span style="color:#ff0000;">[カートID]</span>&HMAC=<span style="color:#ff0000;">[HMAC]</span>&Item.1.CartItemId=<span style="color:#ff0000;">[CartItemId]</span>&Item.1.Quantity=<span style="color:#ff0000;">[商品の個数]</span>&Item.2.CartItemId=<span style="color:#ff0000;">[CartItemId]</span>&Item.2.Quantity=<span style="color:#ff0000;">[商品の個数]</span>&MergeCart=True

</div>

ここでは”ASIN”ではなく、カート内の個別の商品に対する”CartItemId”がパラメータとなります。 ”CartItemId”と”Quantity”がワンセットです。[商品の個数]に<b>変更後の数量</b>を指定します。0を指定すればカートから商品が削除されます。

このCartModifyでは、変更したい商品のみをパラメータに設定すればOKです。また、間違ったCartItemIdを入れてもスルーされるだけでエラーにはなりません（Errorの項目を入れてくれてもいいもんなんですが・・・）。


<h4>[Amazon.co.jpのカートへの追加]</h4>

最終的に取得したXMLデータ内の”PurchaseURL”にアクセスすれば、Amazon.co.jpのカートに追加されます。Amazon.co.jpのカート内にすでに商品がある場合は、自動的にマージされます。同時に現在のカートの中身は空になります（CartClearと同じような状態）。


<h4>[まとめ]</h4>

これで、一通りカートで必要な処理ができるはずです。

私が実際に色々試した感じでは、結構快適に動作しました（CartCreate時のみ若干時間がかかる場合はありましたが）。こういう複数入り乱れた流れの処理って不安定だったり、挙動不審な箇所があったりするもんですが、中々一貫していて優秀でした。さすがはAmazonといったところでしょうか？

この処理の弱点としては、”PurchaseURL”にアクセスしてもらうまで、アソシエイト対象外なところですね。いかにこのカートの使い勝手を良くするかにかかっている気がします。

それにしても、このカート処理を組み込んだWebサイトをほとんど見ないのは気のせいでしょうか？私が使った限りでは問題らしい問題も見当たらなかったんですがねぇ。


<h4>[追記(2006/01/31)]</h4>

Amazon.co.jpのカートへの追加する方法は上記オペレーションを使う以外にも存在し、現在稼動している多くのWebサービスはこの方法を利用しています(AWS3.0の場合はそれしかなかったというのも大きいはずです)。

<div class="explain" style="background-color:#eeeeff;font-size:medium;">

http://www.amazon.co.jp/gp/aws/cart/add.html?AWSAccessKeyId=<span style="color:#ff0000;">[あなたのAccessKeyID]</span>&AssociateTag=<span style="color:#ff0000;">[あなたのアソシエイトID]</span>&ASIN.1=<span style="color:#ff0000;">[ASINコード]</span>&Quantity.1=<span style="color:#ff0000;">[商品の個数]</span>

</div>

ASIN.[番号]は、Cartオペレーション同様[番号]は任意です（未確認ですが、いや、おそらく）。

この方法の最大の利点は、このURLにアクセスした段階でAmazon.co.jpのカートに追加されることです。ただ、逆に最大の欠点でもあり、URLにアクセスしなければ商品を追加できない為、自サイトのみでカートを操作できず、ユーザーは毎回Amazonへアクセスしなければならない煩わしさがあります。

作成簡単なAmazonへ直接カートに追加する方法と、カート処理のオペレーションを使った応用力のある方法、どちらを使うかはサイトの内容、提供する形式にもよると思うので自由に必要に応じて選んだら良いと思います。
]]>
    </content>
</entry>

</feed> 

