« October 2004 | Main

November 25, 2005

PHPでAmazon Web サービス ~ SimpleXML(その2)

Amazon Web サービスにRESTリクエストを送り、それに対するレスポンスから例えば著者の情報を得るためには、次のようなコードでいいはずです。

$xml = simlexml_load_file("リクエストURL");
$result = $xml->xpath('//Author');
var_dump($result);
しかし、このコードではダンプ結果は array(0) {} となります。

レスポンスをローカルのファイルに落とし、単純化して確認してたのですが、Authorを取れたり取れなかったりで原因はわかりませんでした。それであちこち検索した結果原因がわかりました。namespaseが問題でした。-->(参考記事1, 参考記事2)

RESTレスポンスのルート要素は例えば次のようになっています。

<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">

このようにデフォルトのnamespaceが宣言されているため、XPATHのクエリにもnamespaceを指定する必要があるとのことです。

namespaceの指定は次のように、適当な接頭辞を登録すればOK。

$xml->registerXPathNamespace('aws', 'http://webservices.amazon.com/AWSECommerceService/2005-10-05');

接頭辞を登録した後のクエリの指定は次のとおり。

$result = $xml->xpath('//aws:Author');

ただ、このregisterXPathNamespace()は、現在CVS snapshot版でのみ提供されており、Ver.5.1でのリリースの予定だそうです。(T_T)

とかなんとか思っていると、5.1.0がリリースされた見たいですね。(^_^;)


| | Comments (4) | TrackBack (0)

PHPでAmazon Web サービス ~ SimpleXML(その1)

Amazon Web サービスに関する記事を色々と見てると、PHPなるものがよく目に付くので手を出して見ました。


PHPを使うには動作するサーバー環境が必要となりますが、php spotで紹介されているXAMPPを使いました。
XAMPPはApache, PHP, PHPMyAdmin, MySQLなどを一括インストールしてくれる優れもののパッケージです。

私はWindows用のインストーラ版を使用しましたが、簡単にインストール・設定できました。インストールはフォルダ以外はデフォルトのまま、設定については、またphp spotの記事を参考にさせてもらいました。


phpで使いたかったのはsimpleXML。ここここのように簡単にXMLデータを扱うことができるんです。

Amazon Web サービスの場合だとsimpleXML_load_file()にRESTのリクエストURLをそのまま渡せば、それだけでレスポンスが返ってくるので、手繰って行けば必要な情報が簡単に得られます。実にお手軽です。


simpleXMLではその他 XPATHで指定する機能もあります。ですが、Amazon Web サービスのレスポンスに対して使おうとするとうまくいきませんでした。

| | Comments (0) | TrackBack (0)

November 19, 2005

Amazon Web サービス [ECS4.0]メモ

Amazon新刊チェックを作るに当たって参考にしたサイトなどをメモしておきます。
とりあえずAmazonWebサービス関連とXML,XSLT関連です。
実際はHTML,CSS,Java scriptとかもほとんど初めて触るのに等しい状態だったので、これらに関してもあちこちのサイトに沢山お世話になっております。


[AmazonWebサービス関連]
ECS4.0チュートリアル 日本語版

まずはAmazon Web サービス E-Commerce Service 4.0 のチュートリアルの日本語版です。日本語だと助かります。

Amazon E-Commerce Service 4.0 簡易テスター

ItemLookupとItemSearchでのレスポンスを実際に試して見ることができます。

「複数のオペレーションを1つにまとめる」(Amazon Web サービス ブログ)

1秒1コールのルールの範囲内で、実質的に2コールを行う方法として、
バッチ・リクエストとマルチオペレーション・リクエストの説明があります。

「XSLTを利用してリクエストを連鎖的に発行する方法」(Amazon Web サービス ブログ)

XSLTのdocument()関数を使用し、数珠繋ぎ的にリクエストを発行する方法が紹介されています。
1秒1コールのルールと矛盾してるように思えますが...。
私はこれでItemSearchをページ数分連発しようと思ったんですが、受け取ったレスポンス内のKeywordから
次のリクエスト用のKeywordを生成(URLエンコード)する方法がわからず断念しました。





[XML,XSLT関連]

XMLっ何?状態だったので、一から調べてました。お世話になったサイトの主なものは次のとおりです。
たのしいXML

全然XMLを知らない私にも理解できる程度にわかりやすく説明されてます。XML,XSLT,XPATHあたりを読ませてもらいましたが、さらにDOM, SVG, DTD, XML Schemaといった技術についても説明があります。

XSLTスタイルシート書き方講座

@ITの基礎講座その1です。XLSTがどんなものか概要を把握するにはよいと思います。

サンプルで覚えるXSLTプログラミング

@ITの基礎講座その2です。

「XPathにおけるノード集合とその他のオブジェクトとの比較」

要素の比較での挙動がわからなかったので探していて見つけたページです。ノードセットの比較についてまとめられてます。

Tip:XSLTでの再帰によるループ

xsl内でdocument()を使って数珠繋ぎにリクエストを発行するときに、この方法で指定回数分ループすることができるなぁと思っていました。


| | Comments (0) | TrackBack (0)

November 16, 2005

Amazon新刊チェック~試運転中


Amazon新刊チェックを作ってみました。

気になられた方は試しにお使いください。


ここでは入力したキーワードでの検索結果をRSS2.0形式とするためのURIを生成しています。
生成したURIに定期的にアクセスすることで、その時点での検索結果をRSS2.0形式で受け取ることができます。
つまり、そのURIをRSSリーダーに登録しておくことで、キーワードにヒットする新刊情報を見逃さずにすみます。


このAmazon新刊チェックでは、次のようなことをしています。(URIなどをみれば一目瞭然かもしれませんが...)


  • Amazon Web サービスをREST方式で利用しています。

  • 登録したキーワードでItemSearchを行い、新しいもの順で結果(最大10件のみ)を得てます。

  • 検索対象はとりあえず書籍のみです。

  • アソシエイトIDを埋め込んでいます。(^_^;)

  • 検索結果をXSLTに通して、RSS2.0形式に整形しています。

  • RSS2.0形式のデータに含まれる要素は次のものだけです。

    • channelの子要素: title, link, description

    • itemの子要素: title, link, description

    • 現状、linkにはアマゾン内の商品説明ページ、descriptionにはテキストで基本情報と、小さいイメージを入れています。



  • URIの生成時のキーワードのエンコードなどにjavascriptを使用しています。



既知の問題とかは...


  • [item]-[link]の内容は DetailPageURLそのままのため、かなり長くなっており、yahooやgooのRSSリーダーでは途中で切れてしまいます。bloglinesやthumderbirdでは大丈夫。

  • RSS自体のURIも長いんですが、特に問題なくRSSリーダーに登録できてます。



なお、確認は自分の環境でやっただけなので、色々と問題が出てくると思います。コメントいただければ、私の技量で何とかなる分については対処していきます。

| | Comments (1) | TrackBack (0)

November 08, 2005

久々に...

少し前にオークションに初めて出品してから、アマゾンなどのWebサービスに興味を惹かれてます。

これまでPerlやPHPは全く知らず、HTMLもほんの少ししかわからない所から、あちこちのHPで調べ物をしながら何か作ろうとしているところです。

まずはアマゾンWebサービスをターゲットにしています。
個人的には本の新刊情報とかがあればいいなぁなんて思ってるので、勉強がてら簡単なページを作ってみます。

今まで知りませんでしたが、調べてみると FeedAmazonとか、ほぼ欲しいものはあるんですが...まぁ作ってみます。

| | Comments (0) | TrackBack (0)

« October 2004 | Main