2007/06/30

Book class for amazon

amazon 用のbook クラス考。テキストの中に isbn を探す始まるマークがみつかったら、Book クラスを呼び出す。
ItemLookup でamazon からのレスポンス XML は、Search で得られる結果とは異なり <Items><Item> 要素は1つ。指定したISBN がなければエラーXMLが返ってくる。

  item = Book.new(amazonxml).setup.item


amazon からのレスポンス xml を Book クラスに対して Book.new(xml) し...setup.item すると、Book の Struct で指定された要素を拾う。拾いたい要素のフルパスをコード内に記述しない方法の模索。

仮に<small><url>... <big><url>... といったように異なる親要素を持つ同一名の要素が レスポンス xml内 にあった場合で、
<big>要素の<url>要素 を拾いたい時、Book の Structに big_url とアンダーバーで要素名を連結するとその要素パスにマッチしたデータを探す。

Book クラス @h の中身は、{ [アマゾンXML の要素フルパス]=> 要素のテキスト ...]

#require 'time'
#require 'uri'
#require 'net/http'
#require "rexml/document"

class Book < Struct.new(:mediumimage_url, :detailpageurl, :author, :isbn, :publisher, :publicationdate, :title, :listprice_amount)

  def initialize(xml=nil)
    @getxml = REXML::Document.new(xml)
    #@tplxml = Tpl.new().tplamazon
    str = '<?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="amazon.xsl"?>
    <docroot>
      <link rel="alternate" type="text/html" href="http://www.midore.net/"/>
      <modified/>
      <Items/>
    </docroot>'
    @tplxml = REXML::Document.new(str)
    @h = Hash.new
  end
  
  def errorcheck
    @tplxml = nil
  end

  def setup
    get_ele() if @h.empty?
    @h.each{|k,v|
      members.select{|x| self[x] = v if k.downcase.include?(x)}
    }
    #unless detailpageurl.nil?
      #durl = detailpageurl.scan(/\/.\/ASIN\/.*?%/).last.gsub("%",'') 
      #self.detailpageurl = 'http://www.amazon.co.jp' + durl
    #end
    return self
  end
  
  def item
    return nil if @tplxml.nil?
    item = REXML::Element.new('item')
    each_pair{|k,v| 
      item.add_element(k.to_s).add_text(v.to_s)
    }
    return item
  end

  def get_ele(ele=nil)
    ele = @getxml.root if ele.nil?
    errorcheck if ele.to_s.include?('Error')
    return nil if @tplxml.nil?
    ele.each{|x| 
        get_ele(x.entries) if x.has_elements?
      @h[x.xpath.to_s.gsub("/", '_')] ||= x.text unless x.text.nil?
      }
  end

end 

p Book.new(amazonxml)
#<struct May::AmazonAWS::Book mediumimage_url=nil, detailpageurl=nil, author=nil, isbn=nil, publisher=nil, publicationdate=nil, title=nil, listprice_amount=nil>

p item = Book.new(amazonxml).setup.item
item 要素に自分が欲しい要素だけを集めてある。
<item> ... </>

最終的な item 要素の中身

<item>
<mediumimage_url/>
<detailpageurl/>
<author/>
<isbn/>
<publisher/>
<publicationdate/>
<title/>
<listprice_amount/>
</item>


問題点 :
1, 著者が複数だった場合はどうする?
2, 画像サイズ指定し忘れた。
3, 表示させる要素に ISBN or EAN を含めるべきかどうか。その他、etc

--imported_from
http://www.midore.net/daybook/2007/06/1183167964.html

パズルパレス

ダビンチコードを書いた Dan Brown の初期の作品

ISBN: 4047915173

1998 年に書かれたもの。日本では2006年が初版。
トランスレータという巨大な暗号解読機械をめぐっておこる脅迫事件。
この作者がいかに暗号好きかを察することができる。
ストーリが大どんでん返しで終わるのも、テレビをみているかのような画面切り替えのような描写方法も、この頃から使われていたのだな、とわかった。

--imported_from
http://www.midore.net/daybook/2007/06/1183161318.html

2007/06/29

芥川龍之介

「没後80周年特別企画」と帯に書かれてあった。現代の芥川賞、直木賞作家らのエッセイつき。

ISBN: 4796656774

++ 収録作品 ++
蜘蛛の糸
杜子春
羅生門
鼻
芋粥
半巾
戯作三昧
地獄編
奉教人の死
きりしとほろ上人伝
蜜柑
魔術
葱
秋山図
薮の中
トロッコ
玄鶴三房
河童
歯車
或阿呆の一生

この本の中で、作品「半巾」について平野敬一郎氏は、
「...芥川的なアイロニーのあり方が、初期において最も端的に描かれた作品...」
と述べている。

文学的テキストから受ける印象は人によって非常に千差万別なので、人それぞれ感じ方が違って当然なのだけど、面白いことに、同じ作品であっても感情が炸裂したかのような激情的な文章だという印象を受ける人もいれば、非常に冷徹で知的クールな文章だという印象を受ける人もいる、、、。まるで違う作品を読んだかのごとく。

芥川作品はまるで短距離走者のようだとどこかに書かれていたが、実際「単語」ひとつひとつに対してかなり熟考したのかもしれない、とみうけられなくもない。でもそれは読者の勝手な憶測なのかもしれない。それほど考えて書いた訳じゃないよと本人は云うかもしれない。
どちらだったにせよ、その単語を選んだという事実を眺めてみた時、芥川作品全般に流れる心の痛みに思いをはせてしまう。

河童は、中学生の時に読んでいたにも関わらず初めて読むような気がした。
読むべき対象年齢があるのかも?と思った。一定の年齢に達してからでないと、かなわない作品だったのかもしれない。。。じゃ、対象年齢て何?などと考えていたら、実は私のつまらん思い込みで読むべき対象年齢なんて実は「ない」のかもしれない。

途中、作者の怒りにまかせて溢れてくる鋭利な刃物のような単語のつらなりを感じた。怒れば怒るほどに、クールに的確に相手を論破できる人っているんだよなーと思う。そういう人物像を連想させられた。
と、おもいきや、作者のメンタリティはもっともっと違うところにもあるようにも読めてくるから面白い。

--imported_from
http://www.midore.net/daybook/2007/06/1183127623.html


+++ 追記 +++
2010-02-06
midorex.blogspot.com に import するにあたって

今、この本に収録されている作品の中で一番印象深いものをあげよといわれたら「半巾」かな。
短編であれ小説であれ、読んだことを忘れた頃、おもむろに開いたページを読んだその瞬間に鮮やかな何かを瞬時に読者の心に再現させてしまう作品ってある。しかもその再現は時間軸とともに微妙に変化し読む側はそれをはっきりと意識せざるをえないので、読者は何度も新鮮な読書ができてしまうの。