毎日眠くて仕方がない
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チャットも作ろうと考えていたのでした。忘れてたよ。執筆と開発とを一日ごとにやりながらぼちぼち進めていきましょう。