Amazonから画像を取得したい! 1

2008/10/11

おはようございます。きんくまです。
なんだか景気が悪くなってきましたね。その一方でノーベル賞受賞というお話。いや、それに何か意見があるわけじゃないんですが。

さて、私は先日バンブラDXを買いまして、こんなものを投稿してました。

ゲームやらない方に説明すると、DSでこんなソフトがあります。
大合奏!バンドブラザーズDX
このソフトがどんなもんかというと、簡単にいえば音楽のタイミングに合わせてボタンを押すゲームです。なんですが、このゲームに作曲という機能がありまして、そこにいろいろとうちこめば8パートまでの曲ができるというわけです。
まあそんなんで、昔のソフトを耳コピしました。SFCの少ない音源数でヒーヒーいってるので、普通のポップスなんかを耳コピしている人はすごいなあと思います。

さて、今回はAmazonから画像を取得したい!です。
ActionScriptとAmazon Web Servicesの情報は以下からいただきました。ありがとうございます。trick7さん、いつも見てますよ~。
●Amazon Web Services (AWS) での複数ストア(SerchIndex)指定法(trick7.com blog)
●Amazon Web ServiceをActionScript3.0から利用する方法(throw Life)

以下のようなコードで、ローカル環境ではこんな感じに動作します。

package {
  import flash.display.Bitmap;
  import flash.display.Loader;
  import flash.display.Sprite;
  import flash.display.StageScaleMode;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.events.Event;
  import flash.system.LoaderContext;
  import flash.system.Security;
  import flash.text.TextField;

  public class Main extends Sprite
  {
  private var loader:URLLoader;
  private var _n:uint = 0;

  public function Main()
  {
    var url:String = "http://webservices.amazon.co.jp/onca/xml?"
           + "Service=AWSECommerceService&"
           + "AWSAccessKeyId=アクセスキー&"
           + "Operation=ItemSearch&"
           + "SearchIndex=Books&"
           + "Keywords=actionscript&"
           + "ResponseGroup=Request,Images";
    loader = new URLLoader();
    loader.addEventListener(Event.COMPLETE, completeFnc);
    loader.load(new URLRequest(url));

    stage.scaleMode = StageScaleMode.NO_SCALE;
  }

  private function completeFnc(event:Event):void {
    var ns:String = "http://webservices.amazon.com/AWSECommerceService/2005-10-05";
    default xml namespace = new Namespace(ns);
    var xml:XML = new XML(loader.data);
    var s:String = "";
    trace(xml);
    var loader:Loader;
    var k:String;
    for (var i:uint = 0; i < 10; i++)
    {
      k = xml..SmallImage.URL[i];
      s += k + "n";
      loader = new Loader();
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, comp);
      if (k != null) {
        trace(k);
        loader.load(new URLRequest(k), new LoaderContext(true));
      }
    }

    var tf:TextField = new TextField();
    tf.width = 200;
    tf.height = 300;
    addChild(tf);
    tf.text = s;
    tf.multiline = true;
  }

  private function comp(e:Event):void
  {
    var l:Bitmap = e.target.content as Bitmap;
    addChild(l);
    l.x = 75 * (_n - 1);
    _n++;
  }
  }
}

それで、これをサーバー上でも動作させたいんですが、クロスドメインポリシーにひっかかっちゃいました。
以下のコードを追加してもうまくいかず。

    Security.loadPolicyFile("http://webservices.amazon.co.jp/crossdomain.xml");
    Security.loadPolicyFile("http://ecx.images-amazon.com/crossdomain.xml");

それで、サーバーまわりのことを勉強してActionScriptとうまく連携できればいいのかなと思いました。今後他のWebサービスも利用したいし。

言語はPerlとPHPで迷ったんですが、どちらも少しだけかじったことあるぐらいの状態です。なんですがとりあえずPerlを選択。理由は特にないです。うちにあった書籍の数がPerlが多かったんで。

それで、PerlでAmazonを利用としたらこんなページがありました。ありがとうございます。
●第5回 Amazon Webサービスを料理してみる (3/3)
●Net::Amazon のメモ

それでよくわからないながらも情報を取得するところまではできました。
あとはこれをActionScriptと連携すれば、、。

で、今回はここで終了です。途中経過報告ということです。
次回は、画像データはPerlだとLWP::UserAgent というもので取得できるっぽいんでそのあたりを探ってみたいと思っています。

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る