Skip to content

Instantly share code, notes, and snippets.

@tarot
Last active December 22, 2015 13:48
Show Gist options
  • Save tarot/6481327 to your computer and use it in GitHub Desktop.
Save tarot/6481327 to your computer and use it in GitHub Desktop.
Kindle検索のクエリパラメータのメモ
require 'nokogiri'
require 'open-uri'
=begin
パラメータ:
node: ジャンル。例: 2293143051=コミック, 2275256051=本, 2292700051=SF/ホラー/ファンタジー
field-releasedate: 発売日の範囲。nxはn日前、nyはn日後らしい。
例: "0x-0x"=今日, "1x-1y"=昨日から明日, "0x-"=今日以降, "-0x"=今日以前
発売日未設定の本は無限に昔の扱いらしい。"-1000000x"とかやるとヒットする。
page: 最大400(19200件)まで。400ページを超えた場合、401以上は400と同じ結果になる。
sort: ソート順序。しかしdaterankはよくわからない順序になる。先頭に"-"をつけると逆順になる。
daterank=発売日の新しい順, paidsalesrank=人気降順, price=価格の安い順,
reviewrank_authority=レビュー評価降順, relevancerank=キーワード関連順, reviewrank=おすすめ度
field-title: 書名。単語のAND検索。単語の先頭に"-"をつけるとその単語が除外される。
field-author: 著者。単語のAND検索。単語の先頭に"-"をつけるとその単語が除外される。
"ハインライン"でRobert A. Heinleinがヒットするけど"ロバート"じゃヒットしないとか。
日本人は苗字と名前をスペース区切りにしなくてもヒットするっぽい。
field-publisher: 出版社。単語のAND検索。単語の先頭に"-"をつけるとその単語が除外される。
field-dateyear: 紙の本の出版年。field-dateopも指定しなければならない。
field-datemod: 紙の本の出版月。field-dateyearとfield-dateopも指定しなければならない。
field-dateop: 出版年月の指定方法。紙の本の出版年月が未設定だったりいい加減だったりすることもある。
before=以前, during=のみ, after=以後
field-pct-off: ディスカウント。多分現状は無意味なパラメータ。Kindle端末やアクセサリにしか設定されていない。
例: "-9"=0から9%オフ, "50-"=50から100%オフ, "10-19"=10から19%オフ
=end
def search node, releasedate: '0x-0x', sort: 'datarank', page: '1', ie: 'UTF8'
doc = Nokogiri::HTML open "http://www.amazon.co.jp/s/?ie=#{ie}&node=#{node}&field-releasedate=#{releasedate}&sort=#{sort}&page=#{page}",
'User-Agent' => 'nokogiri'
raise 'noResultsTitle #{releasedate}' unless doc.css('#noResultsTitle').empty?
puts doc.css('#resultCount span').text
doc.css('.prod').each do |e|
asin = e[:name]
(title, author) = e.css('h3 span').map &:text
image = e.css('img.productImage').map{|e| e[:src]}.first
puts [asin, title, author, image].join "\t"
end
end
nodes = { comic: '2293143051',
book: '2275256051',
sf: '2292700051' }
search nodes[:comic], releasedate: '0x-0x'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment