さて、Amazon Web サービスの話題、今日も続きます。 昨日は XML/HTTP でキーワード検索はできたものの、 日本語をキーワードに指定すると、どうもそれが文字化けしているようで、 正しく検索結果が表示されないという状態…。あれ〜?
てなわけで、再度 AWS Discussion Board を読んでいると、 あやや、こんなことが書いてあるよ。
A few quick notes about sending Japanese characters to us in search requests:
All Parameters must be url encoded version of UTF-8 characters.
You need to add the following parameter as a short term fix if you are entering url encoded utf-8 characters:
__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8AHere is a valid query:
http://xml.amazon.com/onca/xml3?t=[ASSOC_ID]&dev-t=[DEV_TOKEN]&f=xml&type=heavy& KeywordSearch=%E3%83%A2%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0&locale=jp&mode=books-jp& __mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8AJeff at Amazon.com
…をいをい。まあ、始ったばかりのサービスでバグが多いのは致し方ないか。 って、「__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A」って何さ、 と思って URI unescape してみると、UTF-8 で「__mk_ja_JP=カタカナ」か…。 まあ、クイックハックなんだろうけど…「カタカナ」って何だ? まあいいか。
てなわけで、昨日のリソース指定の部分のコードを書き直してみた。 念のためだけど、スクリプト自体を UTF-8 でセーブしていないと、 uri_escape('カタカナ') が正しく機能しません。
my $resource = "/onca/xml3?t=$tag&dev-t=$devt&KeywordSearch=$esckeyword&" . "mode=$category&type=$type&page=1&f=xml&locale=jp";
# Hack: Following parameter is needed to pass Japanese UTF-8 encoded # characters to AWS. I don't know why it is needed, and it has no # effects on English queries (as far as I experienced). # See, http://forums.prospero.com/n/mb/message.asp?webtag=am-assocdevxml&msg=2704.1&ctx=0 my $jphack = '&__mk_ja_JP=' . uri_escape('カタカナ'); my $resource = "/onca/xml3?t=$tag&dev-t=$devt&KeywordSearch=$esckeyword&" . "mode=$category&type=$type&page=1&f=xml&locale=jp$jphack";
ということで、今度はどうかな? 「my $keyword = "広末涼子";」(をいをい)にして、検索してみました。 結果はこんな感じ。実際は何か怪しげな文字が入っているけど (「Happy20thBirthday広末涼子写真集〓ヒロスエ、ハタチ」の「〓」の部分に、 XEmacs-Mule ではうまく処理しきれていない文字が入っていた。 直接Amazon のページに行ってみると、 ただの長い横棒だ。 AWS の問題か XEmacs-Mule の問題か後で調査の必要があると思う)、 おおむねうまく行っている。
<?xml version="1.0" encoding="UTF-8"?> <ProductInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xml.amazon.com/schemas3/dev-lite.xsd"> <Request> <Args> <Arg value="jp" name="locale"> </Arg> <Arg value="1" name="page"> </Arg> <Arg value="広末涼子" name="KeywordSearch"> </Arg> <Arg value="MYDEVT" name="dev-t"> </Arg> <Arg value="MYTAG" name="t"> </Arg> <Arg value="xml" name="f"> </Arg> <Arg value="books-jp" name="mode"> </Arg> <Arg value="lite" name="type"> </Arg> </Args> </Request> <TotalResults>20</TotalResults> <TotalPages>2</TotalPages> <Details url="http://www.amazon.co.jp/exec/obidos/ASIN/4757714750/MYTAG?dev-t=MYDEVT"> <Asin>4757714750</Asin> <ProductName>広末涼子 New York RH Avenue 2003</ProductName> <Catalog>Book</Catalog> <Authors> <Author>丸谷 嘉長</Author> </Authors> <Manufacturer>エンターブレイン</Manufacturer> <ImageUrlSmall>http://images-jp.amazon.com/images/P/4757714750.09.THUMBZZZ.jpg</ImageUrlSmall> <ImageUrlMedium>http://images-jp.amazon.com/images/P/4757714750.09.MZZZZZZZ.jpg</ImageUrlMedium> <ImageUrlLarge>http://images-jp.amazon.com/images/P/4757714750.09.LZZZZZZZ.jpg</ImageUrlLarge> <ListPrice>¥ 1,900</ListPrice> <OurPrice>¥ 1,900</OurPrice> </Details> <Details url="http://www.amazon.co.jp/exec/obidos/ASIN/4838782829/MYTAG?dev-t=MYDEVT"> <Asin>4838782829</Asin> <ProductName>Happy20thBirthday広末涼子写真集〓ヒロスエ、ハタチ</ProductName> <Catalog>Book</Catalog> <Authors> <Author>藤代 冥砂</Author> </Authors> <Manufacturer>マガジンハウス</Manufacturer> <ImageUrlSmall>http://images-jp.amazon.com/images/P/4838782829.09.THUMBZZZ.jpg</ImageUrlSmall> <ImageUrlMedium>http://images-jp.amazon.com/images/P/4838782829.09.MZZZZZZZ.jpg</ImageUrlMedium> <ImageUrlLarge>http://images-jp.amazon.com/images/P/4838782829.09.LZZZZZZZ.jpg</ImageUrlLarge> <ListPrice>¥ 648</ListPrice> <OurPrice>¥ 648</OurPrice> </Details> ...(略)... </ProductInfo>
Expat の xmlwf での well-formed XML チェックはここでも問題なし。 ふう、何か様子が見えてきた感じだぞ。面白いな。
この話題、戻る← 2003/07/21 『AWS: Perl による XML/HTTP 検索』
この話題、続く→ 2003/07/22 『AWS: ソート順の謎』