おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

毎日眠くて仕方がない

 kaeruspoonのamazon機能で使用するサービスをAWS3.0からECS4.0に移行しました。当然Ruby/Amazonは使えないので、net::httpでXMLを取得してREXMLでパースしています。

require 'net/http'  
require "rexml/document"  
 
class AmazonList < ActiveRecord::Base  
  include REXML  
 
  ASSOCIATE_TAG = 'アソシエートID'  
  AWS_ACCESS_KEY_ID = 'AWSのアクセスID'  
  SEARCH_ELEMENT = 'ItemLookupResponse/Items/Item/'  
 
  def self.find_web(asin)  
    Net::HTTP.version_1_2  
 
    item = self.find_by_asin(asin)  
    if (item == nil) || (item.updated_on.to_time.since(7.days) < Time.now)  
      amazon_list = Hash.new  
      Net::HTTP::start('webservices.amazon.co.jp') do |http|  
        response = http.get("/onca/xml?Service=AWSECommerceService&\  
                             AWSAccessKeyId=#{AWS_ACCESS_KEY_ID}&\  
                             AssociateTag=#{ASSOCIATE_TAG}&\  
                             Operation=ItemLookup&\  
                             ItemId=#{asin}&\  
                             ResponseGroup=Medium")  
        elements = Document.new(response.body).elements  
 
        elements.each("#{SEARCH_ELEMENT}MediumImage/URL")  do |element|  
          amazon_list[:image_url_medium] = element.text  
        end  
 
        elements.each("#{SEARCH_ELEMENT}SmallImage/URL") do |element|  
          amazon_list[:image_url_small] = element.text  
        end  
 
        elements.each("#{SEARCH_ELEMENT}ItemAttributes/Title") do |element|  
          amazon_list[:product_name] = element.text  
        end  
 
        elements.each("#{SEARCH_ELEMENT}DetailPageURL") do |element|  
          amazon_list[:url] = element.text  
        end  
 
        elements.each("#{SEARCH_ELEMENT}ItemAttributes/Manufacturer") do |element|  
          amazon_list[:manufacturer] = element.text  
        end  
 
        elements.each("#{SEARCH_ELEMENT}ItemAttributes/Binding") do |element|  
          amazon_list[:media] = element.text  
        end  
 
        elements.each("#{SEARCH_ELEMENT}ItemAttributes/ReleaseDate") do |element|  
          amazon_list[:release_date] = element.text  
        end  
 
        elements.each("#{SEARCH_ELEMENT}ItemAttributes/PublicationDate") do |element|  
          amazon_list[:release_date] = element.text  
        end  
 
        authors = Array.new  
        elements.each("#{SEARCH_ELEMENT}ItemAttributes/Author") do |element|  
          authors << element.text  
        end  
        amazon_list[:authors] = authors.join(',') unless authors.empty?  
 
        artists = Array.new  
        elements.each("#{SEARCH_ELEMENT}ItemAttributes/Artist") do |element|  
          artists << element.text  
        end  
        amazon_list[:artists] = artists.join(',') unless artists.empty?  
      end  
 
      if item  
        item.update_attributes(amazon_list)  
      else  
        amazon_list[:asin] = asin  
        item = self.new(amazon_list)  
        item.save  
      end  
    end  
 
    return item  
  end  
end  

とりあえず動くようにしただけですが、ちょっとなんとかしたいです。あまり美しくない感じ。REXMLをもうちょっと調べてみようかな。ちらりとオンライン上のドキュメントを見ただけなので。続きは今度です。検索機能も早くつけてしまおう。

 kaeruspoonに関しては、Ajaxチャットも作ろうと考えていたのでした。忘れてたよ。執筆と開発とを一日ごとにやりながらぼちぼち進めていきましょう。