フォーチュンサモナーズ
最新 追記

Don'tStopMusic

2003|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|12|
2006|01|02|03|04|05|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|

カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年

知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。


2007-08-05 この日を編集

_ [ゲーム] フォーチュンサモナーズ このエントリーを含むブックマーク

キャラがかわいいアクションゲームで有名なリズソフト(旧メルケンソフト)の最新作。横スクロール型のアクション RPG です。

今回もドット絵キャラがかわいいですが、白眉なのが走っているアニメーション。剣を使う元気っ子のアルチェは腕を大きく振って走る一方、おとなしい魔法使いのサナは女の子走りをしています。この細部へのこだわりが素晴らしい。

静止画では分かりにくい

製品は秋に出るようです。その第一章部分をベータ版として遊ぶことができます。↓にバナーをはっておきます。

フォーチュンサモナーズ

_ [redMine] 最近の redMine 07/18-08/05 このエントリーを含むブックマーク

ここ数週の redMine trunk の気になる変更点をチェックです。r594-r603 が対象です。

これまでの変更点のレポートはredMineカテゴリを参照ください。

今回はバグ修正と細かい変更だけで特に気になる機能追加などはありませんでした。


2007-08-06 この日を編集

_ [メモ] memcached を調べ中 このエントリーを含むブックマーク

仕事で使っている割には内部の仕組みを良く知らないことに気付きましたので、memcached について調べています。配布元の danga.com にも細かいことは書いていませんので、最終的にはソースコード読まないと詳細は分からないですね。調べたことのまとめを書いていますが、いい加減長いのでページ分割しないとですね。

_ [ゲーム] フォーチュンサモナーズ このエントリーを含むブックマーク

バナーをはってみました。この日記を読む人とマッチングしなさそうではありますが。


2007-08-12 この日を編集

_ [Ruby] あなたがfollowしている人はこんな人をfollowしています Ruby 版 このエントリーを含むブックマーク

つくってみたはいいけど、amachangさんとかHamachiya2さんとかdankogaiさんとか、上位にきそうな人が上位に来たので面白くなかった。

Rubyならこんなに短くかけるよ!とか、やればいいと思う。

きしだのはてな - [Twitter]あなたがfollowしている人はこんな人をfollowしています

書いてみました。ワンライナーで書き始めてしまったので、そのまま晒します。良いプログラマは真似しないでください。表示上適度に改行を入れています。改行抜いて 300b でしたけどもっと縮まりそう。

require'open-uri';require'hpricot';
def s(u);(Hpricot(open("http://twitter.com/statuses/friends/#{u}.xml"))/'//screen_name').map{|i|i.inner_text};end;
u=ARGV[0];h=Hash.new(0);f=s(u);f.each{|i|s(i).each{|j|h[j]+=1}};
f<<u;f.each{|i|h.delete(i)};h.sort_by{|i|i[1]}.reverse[0,5].each{|i,j|puts"#{i}:#{j}"}

2007-08-14 この日を編集

_ [Ruby] Hpricot で XML をハッシュにする このエントリーを含むブックマーク

XML を取り扱う必要が出たのですが、最近 Hpricot づいてますので、Hpricot で XML をパースすることにしました。

対象の XML が単なるデータ表現でしたので、オブジェクト化しやすいように、ノードを辿ってハッシュ・配列化するメソッドを書いてみました。とりあえず動いてますが、もう少しコードを整理したいところです。

require 'rubygems'
require 'hpricot'
 
def traverse(node, hash = {})
  case node
  when Hpricot::Elem
    have_siblings = (node/"../#{node.name}").size > 1
    if have_siblings
      hash[node.name] ||= []
    end
    if node.children.size > 1
      child_hash = {}
      if have_siblings
        hash[node.name] << child_hash
      else
        hash[node.name] = child_hash
      end
      node.each_child do |child|
        traverse(child, child_hash)
      end
    else
      if have_siblings
        hash[node.name] << node.inner_html
      else
        hash[node.name] = node.inner_html
      end
    end
  when Hpricot::Elements
    node.each do |child|
      traverse(child, hash)
    end
  end
  hash
end
 
doc = Hpricot.XML(<<_XML_)
<Export>
  <Product>
    <SKU>403276</SKU>
    <ItemName>Trivet</ItemName>
    <CollectionNo>0</CollectionNo>
    <Pages>0</Pages>
  </Product>
  <Product>
    <SKU>104577</SKU>
    <ItemName>Dish</ItemName>
    <CollectionNo>1</CollectionNo>
    <Pages>2</Pages>
  </Product>
</Export>
_XML_
 
pp traverse(doc/:Export)
#=> {"Export"=>
      {"Product"=>
        [{"ItemName"=>"Trivet",
          "Pages"=>"0",
          "SKU"=>"403276",
          "CollectionNo"=>"0"},
         {"ItemName"=>"Dish",
          "Pages"=>"2",
          "SKU"=>"104577",
          "CollectionNo"=>"1"}]}}

XML のサンプルはerr.the_blog.find_by_title('Parse XML with Hpricot')から借りました。

_ [Ruby] 既存クラスを C 言語で拡張する このエントリーを含むブックマーク

今、Miyakoのマップスクロールとか、Miyako::Screen.updateメソッドとかが遅いと感じるときがあるので、そこをC拡張でなんとかできないかと試しています。

ただ、「既存のモジュール(require済みと仮定)にモジュールメソッドを追加する」方法が、ドキュメントを読んだだけでは分からない。

Ruby拡張ライブラリのいいソース無いかなぁ?

README.EXT だけだと難しいかもしれないですね。

Pure Ruby で定義された Hoge クラスに対して、C 言語の拡張で hoge インスタンスメソッドを追加する方法というかソース例を説明します。

ファイルを三つ用意してください。extconf.rb、C 拡張ライブラリのソース、それを使う Ruby プログラムです。

全体では以下のような流れのプログラムです。

  1. Ruby プログラムで Hoge クラスを定義
  2. C 拡張ライブラリで Hoge クラスに hoge メソッドを追加
  3. Ruby プログラムで Hoge#hoge 呼び出し

extconf.rb

Makefile 生成用。これを実行すると exthoge.c をコンパイルして exthoge.so を作成する Makefile が作成されます。

require 'mkmf'
create_makefile('exthoge')

exthoge.c

拡張ライブラリのソース。Hoge#hoge を定義します。Init_**** は require されたときに実行されるスタートアップルーチンです。**** は create_makefile した拡張ライブラリ名と一致させます。この例では、create_makefile('exthoge') したので Init_exthoge です。

Ruby ではクラスは定数に結び付けられてますので、rb_const_get で取得できます。(rb_cObject から取得していいのかはちょっと不明です。)

#include 
 
static VALUE rb_hoge_hoge(VALUE obj)
{
    return rb_str_new2("hoge");
}
 
void Init_exthoge()
{
    VALUE cHoge;
    cHoge = rb_const_get(rb_cObject, rb_intern("Hoge"));
    rb_define_method(cHoge, "hoge", rb_hoge_hoge, 0);
}

test.rb

Hoge クラスを定義し、また exthoge 拡張ライブラリを読み込んで Hoge#hoge を呼び出します。

class Hoge
end
 
require 'exthoge'
 
hoge = Hoge.new
p hoge.hoge #=> "hoge"

拡張ライブラリのビルド

extronf.rb を実行して Makefile を作成、あとは make すれば拡張ライブラリができます。Linux 環境前提ですが。

$ ruby extconf.rb
creating Makefile
$ make
i686-pc-linux-gnu-gcc -shared -o exthoge.so exthoge.o -L'.' -L'/usr/lib' -Wl,-R'/usr/lib' -L.  -rdynamic -Wl,-export-dynamic    -Wl,-R -Wl,/usr/lib -L. -L/usr/lib -lruby18  -lpthread -ldl -lcrypt -lm   -lc
$ ls -l exthoge.so
-rwxr-xr-x 1 date users 6529 2007-08-14 23:46 exthoge.so

変数の取得

インスタンス変数は rb_iv_get で取得できます。後は ruby.h を眺めながら色々試すしかないですね。最悪 Ruby の eval 相当の rb_eval_string を使えば大体何でもできます。

本日のツッコミ(全3件) [ツッコミを入れる]

_ サイロス誠 [失礼をばいたしました・・・。 ご教授ありがとうございます。 試してみたのですが、かなり凄い量の関数呼び出しになります..]

_ なかだ [rb_const_get(rb_cObject)してもいいのですが、 class/moduleに限定するならrb_p..]

_ だて [>サイロスさん 参考になれば幸いです。 >ながださん rb_path2class は知りませんでした。便利ですね。]


2007-08-18 この日を編集

_ [Ruby] Vlad the Deployer このエントリーを含むブックマーク

Vlad the Deployer, is a Capistrano competitor, designed to provide a fast, uncomplicated remote application deployment tool, but without the supposed complexity Capistrano offers.

The Ruby Hit Squad Releases Capistrano Competitor "Vlad The Deployer"

Rails のデプロイツール Capistrano の競合が現れました。

Capistrano 同様 DSL を採用して、構文も共通するところが多いです(移行しやすい)。同じアプローチでより洗練させるということなのでしょう。

ざっと眺めたところではそこまで Capistrano に対する優位性は感じませんでしたが、開発が Seattle.rb メンバーなので今後に期待です。

というかトップページがすごい(笑

追記

InfoQ に開発者の Eric Hodel たちへのインタビューがありますのであわせてどうぞ。


2007-08-19 この日を編集

_ [Ruby] Ruby技術者認定試験 このエントリーを含むブックマーク

とりあえず受けてみようかと思っているのですが、ニュースリリース以外の情報がどこにもないような。シルバー、ゴールドのようなグレードの違いや有効期限といった制度はどうなのか、出題範囲はどこまでなのかといった情報がほしいところです。

まつもとゆきひろ氏が理事長を務めるRubyの普及推進組織「Rubyアソシエーション」は技術者認定試験を開始する。2007年10月から東京と松江で筆記試験を行う。2008年2月にはインターネットで日本語版と英語版で,世界の技術者を対象にした試験を開始する。認定試験によりRubyの普及拡大などを図る。

Rubyの技術者認定試験が10月開始,2008年には世界に向け英語版も

2007/08/27 追記

まつもとさんがMatzにっき(2007-08-16) - Rubyの技術者認定試験が10月開始,2008年には世界に向け英語版も:ITproで多少情報を公開されています。

私が知りたかったあたりは……

試験のレベルは?
10月に開催されるのは「エントリレベル(正式名称未定)」です。 Rubyのバージョンには依存しない範囲の問題になります。
試験の内容は
範囲などはまだ公開できません。エントリレベルはあまり難しいものにはならないはずです。なお、回答は選択式です。
Matzにっき(2007-08-16) - Rubyの技術者認定試験が10月開始,2008年には世界に向け英語版も:ITpro

バージョンに依存しないというのはすなわち 1.8 前提ということでしょうかね。1.6→1.8 や 1.8→1.9 の仕様変更に依存しない範囲で問題作るのも難しそうな気がしますし。

_ [メモ] メガデモをニコ動で観る このエントリーを含むブックマーク

最近メガデモがニコ動にアップされていて実行環境のない人間にとっては有難い限りです。アップされている数は少ないですが、アップされている分はメガデモタグで検索すれば見れます。

最近のおすすめは ASD の Lifeforce。Assembly2007 での新作です。メガデモから連想される幾何学・無機質を超えた ASD 一流の映像表現に圧倒されます。これを動かすためだけにハイスペックの PC がほしくなりますね。


2007-08-20 この日を編集

_ [Mozilla] SVG とネイティブビデオを実装した Firefox だそうで このエントリーを含むブックマーク

Firefox 3 にオープンなビデオフォーマットである Theora のネイティブ実行をサポートする

SVG とネイティブビデオを実装した Firefox

SVG は W3C で標準化されたウェブ向けのベクタグラフィックス記述言語なわけですが、普及が進んでいるとはいえません。部分的ながらも Firefox がネイティブで対応していますが、IE では Adobe の SVG プラグインが必要です。

次世代の Flash を目指して Adobe の Flex と Microsoft の Silverlight が覇を競おうとしていますが、SVG もしぶとく生き残ってほしいですね。重なる部分もありますが、補完的にも使えると思いますので。

ところで、Safari は 3 で SVG 対応したとのこと。Windows 版の Safari 3 beta で W3C の SVG 1.1 Full test suite を表示させてみたところ、フィルタやアニメーションはダメでしたが基本的なところは結構ちゃんと表示できました。Firefox 2.0 と同程度ですね。

元記事とあんまり関係なくなってしまったので、話を戻します。Silverlight はストリーミングビデオを Flash よりも自由に扱えることを売りの一つにしていますが、「SVG とネイティブビデオを実装した Firefox」は機能面では近いところまで来ていますね。クロスブラウザ、DRM 対応、対応コーデックという面で Silverlight に軍配が上がりますが。

_ [RubyForge] backlog はもう少し落ち着いてほしい このエントリーを含むブックマーク

RubyForge New Releases の RSS フィードを読んでいるんですが、この backlog というのが毎日のようにリリースがあり(0.6.20.6.3 の間なんて 6 分しかありません……)、しかもニュースの文章が無駄に長い。開発が活発なのはいいですが、もう少し落ち着いてリリースしていただきたいところです。


2007-08-22 この日を編集

_ [Ruby] ウェブページを mht ファイルに保存する このエントリーを含むブックマーク

mht は IE でウェブページを保存するときの「Web アーカイブ、単一のファイル」というやつです。Windows 環境であれば win32ole を使って簡単にできました。

require 'win32ole'
cdo = WIN32OLE.new('CDO.Message')
cdo.CreateMHTMLBody('http://www.google.co.jp/')
cdo.GetStream.SaveToFile("google.mht")

Chilkat Ruby MHT Libraryというのが $149 で売ってたりしますが、これって自前で処理してるんでしょうかね。

本日のツッコミ(全1件) [ツッコミを入れる]

_ a [>これって自前で TMAILとWWW::Mechanizeを使うと同様のことが出来るんで、自前なんではないかと。 私..]


2007-08-27 この日を編集

_ [Firefox] LDRize このエントリーを含むブックマーク

Just another Ruby porter,経由

livedoor reader のキーボードショートカット操作を色々なウェブページでも可能にする greasemonkey スクリプトです。例えば tDiary やはてなダイアリーなどで j で次の段落に移動、k で前の段落に戻るといったことができます。これは快適です。

_ [Ruby] m17n が trunk にマージ このエントリーを含むブックマーク

とうとう r13261 / r13263 で m17n が trunk にマージされました。まだ coding プラグマ以外に m17n な文字列を作る方法がない?とか、euc-jp や sjis の文字列に chop すると無限ループに入ったりとか未実装やバグもありますが、今後ブラッシュアップされていくことと思います。

m17n で何が変わるかは m17n 対応で Ruby ができるようになること を参照ください。

svn trunk の Ruby をお使いの方は以下のようにすれば m17n を試せます。

  • coding プラグマで文字エンコーディングを指定する
  • 多バイト文字の文字リテラルを記述する
  • 文字列に対して size や reverse をしてみる

coding プラグマは 1.9 で導入された機構で、プログラムファイルの文字エンコーディングを指定できます。現在の $KCODE がインタプリタ全体での指定だったのに対して、coding プラグマはファイル単位です。

現在の Ruby 1.8 の String はバイト列であり、正規表現エンジンが多バイト文字列対応です。そのため、String のメソッドは「文字」単位ではなく「バイト」単位で働きます。例えば "あいうえお".size は sjis なら 10、utf-8 なら 15 を返します。

しかし、m17n Ruby では "あいうえお".size は 5 を返しますので、split(//).size という文字数を得るためのイディオムがあったり、jcode.rb というなくしたいけどなくせないライブラリがあったり、業を煮やした Rails 陣営が ActiveSupport で 「Unicode 対応」したりといった歪が解消できます。Rails が 1.9 対応するかは知りませんけど。

さて、サンプルプログラムを挙げます。これを BOM なしの UTF-8 で保存します。で、1.8 と trunk で実行してみます。なお、encoding、bytesize、each_char は 1.8 では存在しないメソッドです。

#-*- coding: utf-8 -*-
str = 'AABBCC'
p str
p str.class
p str.encoding if str.respond_to?(:encoding)
p str.size
p str.bytesize if str.respond_to?(:bytesize)
p str.reverse
p str[0]
str.each_char{|i| p i} if str.respond_to?(:each_char)
p str.count('B')
p str.delete('A')
p str.squeeze
p str.tr('A-Z', 'a-z')
p str.tr_s('A-Z', 'a-z')
p str.chop
p str.succ

まず、1.8.6 での実行結果です。

$ ruby -Ku -v 1.rb
ruby 1.8.6 (2007-06-07 patchlevel 36) [i686-linux]
"AABBCC"
String
18
"\243\274......\357"
239
14
"\242\242\243\243"
"AABBCC"
"zzczzczzdzzdzzezze"
"zczczdzdzeze"
"AABBC"
"AABBCD"

次に trunk での結果です。

$ ruby19 -v 1.rb
ruby 1.9.0 (2007-08-27 patchlevel 0) [i686-linux]
"AABBCC"
String
"UTF-8"
6
18
"CCBBAA"
"A"
"A"
"A"
"B"
"B"
"C"
"C"
2
"BBCC"
"ABC"
"aabbcc"
"abc"
"AABBC\000"
"\357\274\241\357\274\241\357\274\242\357\274\242\357\274\243\357\274\243"

chop と succ がまだ未対応のようですが、他は良い感じです。

chop と succ については [ruby-dev:31735]で中田さんが直してくれました。

_ [つぶやき] 大規模ってなんだろう このエントリーを含むブックマーク

Ruby/Rails が(というより動的言語が)大規模に向かないというような言葉を最近またちらほら見かけますが、大規模って具体的に何でしょうかね。思いつくのは以下の 3 種類ですが、分けて考えないといけないんじゃないかと思ったりします。

  • ソフトウェアの嵩が大きい。平たく言ってしまうとコード行数が多い
  • 関わる人たちの作る組織が大きい。開発者がたくさんいる
  • 利用するユーザの数が大きい。例えば流行ってるウェブアプリ
本日のツッコミ(全3件) [ツッコミを入れる]

_  [失敗したら大規模みたい。成功したら小規模だそうです。]

_ だて [笑)大規模システムは人間の手には負えないのかもですね。]

_ とおりすがり [関わっている会社や組織の数が多く、意志決定が合議制。 責任者が複数いて、最高責任者が一人もいない。 意志決定に必要な..]


2007-08-29 この日を編集

_ [Rails] Webistrano - ウェブ UI で Capistrano このエントリーを含むブックマーク

Webistrano は名前から連想されるように、Capistrano を使ってウェブで Rails アプリのデプロイ管理ができるソフトウェアです。Webistrano の目的を、

Webistrano's purpose is to make the deployment of multi-stage and multi-environment scenarios easy. Further it allows you to track who deployed what when to which servers and be alerted by email on each deployment.

BlogFish: Webistrano - Capistrano deployment the easy way

としています。なるほど、誰がいつデプロイしたかを追跡できる―作業記録が残る―のはいいですね。


2007-08-30 この日を編集

_ [Ruby] NoMethodError はぬるぽ このエントリーを含むブックマーク

テストだなんだと標榜するRubyがNoMethodErrorを出すのは(至極個人的には)ださいよなぁ、

と思う。*1

静的言語ならこういうことは殆どないだけに、

動的な言語の弱点だと思うんだよね。

気付かずに放置、みたいな。

もうtDiaryじゃなくてRubyがいけてないんだよ!!

この件に限定して言えば、nil に対してメソッド呼び出しして NoMethodError というのは、null に対してメソッド呼び出しして NullPointerException (実行時例外)と同じですので、静的言語ならこういうことは殆どないということもないのでは。

テストをちゃんと書いていれば防げるという点は同意します。


2007-08-31 この日を編集

_ [Perl] Amazon ECS は難しい このエントリーを含むブックマーク

珍しく Perl でコードを書いています。作っているのは Net::Amazon を使って複数の ASIN で検索して、結果を JSON::XS で JSON にするというだけプログラムですが、いくつか困ったことが。難しいのは Amazon ECS じゃなくて Net::Amazon ですね。

  • ItemNotAccessible な商品が混じっているとレスポンスがエラーと扱われる
  • ResponseGroup に複数指定できない?

ItemNotAccessible な商品が混じっているとレスポンスがエラーと扱われる

ASIN B000TXC2RW のような予約もできない商品を ECS で検索すると、エラーコード AWS.ECommerceService.ItemNotAccessible、エラーメッセージ「この商品はECSを通してアクセスすることはできません。」というエラーが返ってきます。

複数の ASIN を指定してまとめて検索した場合には、ItemNotAccessible ではない他の商品の情報は取得できています。が、Net::Amazon ではレスポンスにエラーが含まれていると $response->is_success が偽になり、$response->properties も空でエラーではない他の商品の情報が得られないっぽいです。

ResponseGroup に複数指定できない?

Net::Amazon はデフォルトでは ResponseGroup=Large で検索しますが、不要な情報が多いので ResponseGroup=Small,Images で検索したいのですが、ResponseGroup=Small&ResponseGroup=Images となってしまいます。

長いですが、試した結果をメモっておきます。

期待通りに検索できるパターン

$ perl -MNet::Amazon -e '
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init($DEBUG);
$ua = Net::Amazon->new(token => "********************", locale => "jp");
$response = $ua->search(asin => "B000FSEM4C", type => "Small");
print $response->is_success ? "OK" : "NG" , "\n";
'
2007/08/31 14:32:43 request: params = $VAR1 = {
          'ItemId' => 'B000FSEM4C',
          'ResponseGroup' => 'Small',
          'locale' => 'jp',
          'Sort' => 'salesrank',
          'ItemPage' => 1,
          'Operation' => 'ItemLookup'
        };
 
2007/08/31 14:32:43 urlstr=http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=********************&Version=2007-01-17&ItemId=B000FSEM4C&ItemPage=1&Operation=ItemLookup&ResponseGroup=Small&Sort=salesrank&locale=jp
2007/08/31 14:32:43 Fetching http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=********************&Version=2007-01-17&ItemId=B000FSEM4C&ItemPage=1&Operation=ItemLookup&ResponseGroup=Small&Sort=salesrank&locale=jp
2007/08/31 14:32:43 Received [ <?xml version="1.0" encoding="UTF-8"?><ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2007-01-15"><OperationRequest><HTTPHeaders><Header Name="UserAgent" Value="libwww-perl/5.805"></Header></HTTPHeaders><RequestId>0XPD1HEBZR86B19TS6MW</RequestId><Arguments><Argument Name="ItemId" Value="B000FSEM4C"></Argument><Argument Name="Sort" Value="salesrank"></Argument><Argument Name="locale" Value="jp"></Argument><Argument Name="ItemPage" Value="1"></Argument><Argument Name="Service" Value="AWSECommerceService"></Argument><Argument Name="ResponseGroup" Value="Small"></Argument><Argument Name="Operation" Value="ItemLookup"></Argument><Argument Name="AWSAccessKeyId" Value="********************"></Argument><Argument Name="Version" Value="2007-01-17"></Argument></Arguments><RequestProcessingTime>0.0161001682281494</RequestProcessingTime></OperationRequest><Items><Request><IsValid>True</IsValid><ItemLookupRequest><ItemId>B000FSEM4C</ItemId><ResponseGroup>Small</ResponseGroup></ItemLookupRequest></Request><Item><ASIN>B000FSEM4C</ASIN><DetailPageURL>http://www.amazon.co.jp/gp/redirect.html%3FASIN=B000FSEM4C%26tag=ws%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/B000FSEM4C%253FSubscriptionId=********************</DetailPageURL><ItemAttributes><Manufacturer>マイクロソフト</Manufacturer><ProductGroup>Video Games</ProductGroup><Title>Halo 3 リミテッド エディション</Title></ItemAttributes></Item></Items></ItemLookupResponse>]
2007/08/31 14:32:43 xmlref_add (after):$VAR1 = bless( {
                 'xmlref' => {
                               'Items' => [
                                            {
                                              'ASIN' => 'B000FSEM4C',
                                              'ItemAttributes' => {
                                                                  'ProductGroup' => 'Video Games',
                                                                  'Manufacturer' => "\x{30de}\x{30a4}\x{30af}\x{30ed}\x{30bd}\x{30d5}\x{30c8}",
                                                                  'Title' => "Halo 3 \x{30ea}\x{30df}\x{30c6}\x{30c3}\x{30c9} \x{30a8}\x{30c7}\x{30a3}\x{30b7}\x{30e7}\x{30f3}"
                                                                },
                                              'DetailPageURL' => 'http://www.amazon.co.jp/gp/redirect.html%3FASIN=B000FSEM4C%26tag=ws%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/B000FSEM4C%253FSubscriptionId=********************'
                                            }
                                          ]
                             },
                 'messages' => [],
                 'total_results' => undef,
                 'status' => '',
                 'items' => []
               }, 'Net::Amazon::Response::ASIN' );
2007/08/31 14:32:43 Received valid XML (1 items)
OK

ItemNotAccessible な商品が混じった場合

$ perl -MNet::Amazon -e '
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init($DEBUG);
$ua = Net::Amazon->new(token => "********************", locale => "jp");
$response = $ua->search(asin => ["B000FSEM4C", "B000TXC2RW"], type => "Small");
print $response->is_success ? "OK" : "NG" , "\n";
'
2007/08/31 14:42:05 request: params = $VAR1 = {
          'ItemId' => 'B000FSEM4C,B000TXC2RW',
          'ResponseGroup' => 'Small',
          'locale' => 'jp',
          'Sort' => 'salesrank',
          'ItemPage' => 1,
          'Operation' => 'ItemLookup'
        };
 
2007/08/31 14:42:05 urlstr=http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=********************&Version=2007-01-17&ItemId=B000FSEM4C%2CB000TXC2RW&ItemPage=1&Operation=ItemLookup&ResponseGroup=Small&Sort=salesrank&locale=jp
2007/08/31 14:42:05 Fetching http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=********************&Version=2007-01-17&ItemId=B000FSEM4C%2CB000TXC2RW&ItemPage=1&Operation=ItemLookup&ResponseGroup=Small&Sort=salesrank&locale=jp
2007/08/31 14:42:05 Received [ <?xml version="1.0" encoding="UTF-8"?><ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2007-01-15"><OperationRequest><HTTPHeaders><Header Name="UserAgent" Value="libwww-perl/5.805"></Header></HTTPHeaders><RequestId>0M92SBJWBF2HF8ZKZ909</RequestId><Arguments><Argument Name="ItemId" Value="B000FSEM4C,B000TXC2RW"></Argument><Argument Name="Sort" Value="salesrank"></Argument><Argument Name="locale" Value="jp"></Argument><Argument Name="ItemPage" Value="1"></Argument><Argument Name="Service" Value="AWSECommerceService"></Argument><Argument Name="ResponseGroup" Value="Small"></Argument><Argument Name="Operation" Value="ItemLookup"></Argument><Argument Name="AWSAccessKeyId" Value="********************"></Argument><Argument Name="Version" Value="2007-01-17"></Argument></Arguments><RequestProcessingTime>0.0187308788299561</RequestProcessingTime></OperationRequest><Items><Request><IsValid>True</IsValid><ItemLookupRequest><ItemId>B000TXC2RW</ItemId><ItemId>B000FSEM4C</ItemId><ResponseGroup>Small</ResponseGroup></ItemLookupRequest><Errors><Error><Code>AWS.ECommerceService.ItemNotAccessible</Code><Message>この商品はECSを通してアクセスすることはできません。</Message></Error></Errors></Request><Item><ASIN>B000FSEM4C</ASIN><DetailPageURL>http://www.amazon.co.jp/gp/redirect.html%3FASIN=B000FSEM4C%26tag=ws%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/B000FSEM4C%253FSubscriptionId=********************</DetailPageURL><ItemAttributes><Manufacturer>マイクロソフト</Manufacturer><ProductGroup>Video Games</ProductGroup><Title>Halo 3 リミテッド エディション</Title></ItemAttributes></Item></Items></ItemLookupResponse>]
Wide character in print at /usr/lib/perl5/vendor_perl/5.8.8/Log/Log4perl/Appender/Screen.pm line 30.
2007/08/31 14:42:05 Fetch Error: この商品はECSを通してアクセスすることはできません。
NG

ResponseGroup に複数を指定した場合

$ perl -MNet::Amazon -e '
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init($DEBUG);
$ua = Net::Amazon->new(token => "********************", locale => "jp");
$response = $ua->search(asin => "B000FSEM4C", type => ["Small", "Images"]);
print $response->is_success ? "OK" : "NG" , "\n";
'
2007/08/31 14:31:07 request: params = $VAR1 = {
          'ItemId' => 'B000FSEM4C',
          'ResponseGroup' => [
                               'Small',
                               'Images'
                             ],
          'locale' => 'jp',
          'Sort' => 'salesrank',
          'ItemPage' => 1,
          'Operation' => 'ItemLookup'
        };
 
2007/08/31 14:31:07 urlstr=http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=********************&Version=2007-01-17&ItemId=B000FSEM4C&ItemPage=1&Operation=ItemLookup&ResponseGroup=Small&ResponseGroup=Images&Sort=salesrank&locale=jp
2007/08/31 14:31:07 Fetching http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=********************&Version=2007-01-17&ItemId=B000FSEM4C&ItemPage=1&Operation=ItemLookup&ResponseGroup=Small&ResponseGroup=Images&Sort=salesrank&locale=jp
2007/08/31 14:31:08 Received [ <?xml version="1.0" encoding="UTF-8"?><Errors xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05"><Error><Code>AWS.ParameterRepeatedInRequest</Code><Message>The parameter, ResponseGroup, appeared more than once in your request.</Message></Error></Errors>]
2007/08/31 14:31:08 xmlref_add (after):$VAR1 = bless( {
                 'xmlref' => {
                               'Items' => []
                             },
                 'messages' => [],
                 'total_results' => undef,
                 'status' => '',
                 'items' => []
               }, 'Net::Amazon::Response::ASIN' );
2007/08/31 14:31:08 Received valid XML (0 items)
OK

最近のコメント:

  1. だて (09-14)
  2. a (09-09)
  3. とおりすがり (09-08)

RSS
Creative Commons License
This work is licensed under a Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).