さて、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: ソート順の謎』