「ECS」+「Timeline」で発売日リストをつくってみました
Amazonの「ECS」から商品リストを取得して、商品を発売日順に「Timeline」で表示してみました。
作業内容は、以下のとおりです。
(A)「ECS」から商品リストを取得する
(B)「ECS」から取得した商品リストのXMLフォーマットを「Timeline」で利用するXMLフォーマットに変換する
(C)「Timeline」で商品リストを表示する
今回の作業(A)(C)についての詳しい説明は、次の記事を参照してください。
「Amazon E-Commerce Service(ECS) Ruby編」
「「Timeline」 - スケジュール管理、年表作成だっておてのもの」
(B)についても、コードを見ていただくのが早いと思いますので、以下にコードを示します。
(A)「ECS」から商品リストを取得する
(ファイル名: ecs.rb)
require 'net/http'
require 'cgi'
require 'rexml/document'
class ECS
AWS_BASE_URL = "http://webservices.amazon.co.jp/onca/xml?"
AWS_ACCESS_KEY_ID = "[アクセスキーを指定する]"
SERVICE_NAME = "AWSECommerceService"
SERVICE_VERSION = "2006-11-14"
ASSOCIATE_TAG = "[アソシエイトキーを指定する(省略可)]"
@@operation = "ItemSearch"
@@responseGroup = "ItemAttributes,Images"
@keywords
@searchIndex
@parameters
def searchBooks keywords
@keywords = keywords
@searchIndex ="Books"
setParameters
url = createURL
xml = requestToECS url
return xml
end
private
def setParameters
@parameters = {
:Service => SERVICE_NAME,
:Version => SERVICE_VERSION,
:AWSAccessKeyId => AWS_ACCESS_KEY_ID,
:AssociateTag => ASSOCIATE_TAG,
:Operation => @@operation,
:ResponseGroup => @@responseGroup,
:Keywords => @keywords,
:SearchIndex => @searchIndex
}
end
def createURL
paramString = (
@parameters.collect { |key,value| "#{key}=#{CGI::escape(value)}" }
).join('&')
url = URI.parse( AWS_BASE_URL + paramString )
return url
end
def requestToECS url
xml = REXML::Document.new( Net::HTTP.get( url ) )
return xml
end
end
(B)「ECS」から取得した商品リストのXMLフォーマットを「Timeline」で利用するXMLフォーマットに変換する
(ファイル名: ecsXML.rb)
require 'rexml/document'
class ECS_XML
@@xpath = "ItemSearchResponse/Items/Item"
@@xpathURL = "DetailPageURL/text()"
@@xpathImage = "SmallImage/URL/text()"
@@xpathTitle = "ItemAttributes/Title/text()"
@@xpathDate = "ItemAttributes/PublicationDate/text()"
def initialize xml
@ecsXML = xml
end
def toEventXML
eventXML = ""
eventXML << "\n"
eventXML << ""
@ecsXML.elements.each( @@xpath ) { |element|
url = REXML::XPath.match(element, @@xpathURL)
image = REXML::XPath.match(element, @@xpathImage)
title = REXML::XPath.match(element, @@xpathTitle)
date = (REXML::XPath.match(element, @@xpathDate))[0].to_s.split("-")
date = (Time.gm *date).strftime("%b %d %Y") + " 00:00:00 GMT+9:00"
eventXML << "
isDuration=\"false\"
title=\"#{title}\"
image=\"#{image}\"
link=\"#{url}\"
>
\n"
}
eventXML << ""
return eventXML
end
end
(ファイル名: ecsToEvent.rb)
require 'ecs.rb'
require 'ecsXml.rb'
ecs = ECS.new
# "Java"というキーワードで商品検索を行う
xml = ecs.searchBooks "Java"
# XMLフォーマットを変換する
ecsXML = ECS_XML.new xml
event = ecsXML.toEventXML
puts event
コマンドラインから次のコマンドを実行します。
ruby ecsToEvent.rb > ecs.xml
(C)「Timeline」で商品リストを表示する
(B)でつくった、「ecs.xml」というXMLファイルを「Timeline」に読み込ませると、年表上に商品リストが表示されます。
こちらの例のように表示されると思います。
タイトルが日本語なので、年表上に表示される文字の区切りがおかしくなっています。
なんとか、修正できないかと検討中です。