それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Amazonのショッピングカートをすべて取り出す。ruby

Amazonのショッピングカートに保存した商品をどうしてますか? 私はとても便利にブクマ代わりに使っていました。

もはや増えすぎて訳がわかりません。そこで整理することにしました。

ショッピングカートに保存した商品を一覧で取り出す

ショッピングカートに保存した商品を、以下の様な形式で取り出しました。
意外と既に買ってる商品があったりして驚きました。

http://www.amazon.co.jp/gp/product/4063524566/ref=ox_sc_sfl_title_1?ie=UTF8&psc=1&smid=AN1VRQENFRJN5      -- もやしもん(12) (イブニングKC)
http://www.amazon.co.jp/gp/product/4091242855/ref=ox_sc_sfl_title_2?ie=UTF8&psc=1&smid=AN1VRQENFRJN5      -- 銀の匙 Silver Spoon(7) (少年サンデーコミックス)
http://www.amazon.co.jp/gp/product/4048914537/ref=ox_sc_sfl_title_3?ie=UTF8&psc=1&smid=AN1VRQENFRJN5      -- 苺ましまろ 7 (電撃コミックス)
http://www.amazon.co.jp/gp/product/4088795253/ref=ox_sc_sfl_title_4?ie=UTF8&psc=1&smid=AN1VRQENFRJN5      -- 君は淫らな僕の女王 (ヤングジャンプコミックス)
http://www.amazon.co.jp/gp/product/B00A2ZYRR0/ref=ox_sc_sfl_title_5?ie=UTF8&psc=1                         -- Y+X 高品質 13000mAh  多機能超大容量 モバイルバッテリー  ★Apple MacBook Air(給電ではなくて、充電!)★Notebook Computer★★iPhone5★iPhone4★スマートフォン★★iPad★Pad★Tab★★iPod★Nintendo DSLite★PSP★Tablet★Wi-Fiルータ★各種対応可★ (2A/1A USB 5V  2出力 and DC 16-19V  1出力) 一年保証
http://www.amazon.co.jp/gp/product/4478007519/ref=ox_sc_sfl_title_6?ie=UTF8&psc=1                         -- クルマは家電量販店で買え!―価格と生活の経済学
http://www.amazon.co.jp/gp/product/B00ASSGJ3Q/ref=ox_sc_sfl_title_7?ie=UTF8&psc=1&smid=A255NGDNMIH7CB     -- マルチデバイス対応 cheero Power Plus 2 10400mAh (シルバー) 大容量モバイルバッテリー
http://www.amazon.co.jp/gp/product/B003TVF700/ref=ox_sc_sfl_title_8?ie=UTF8&psc=1                         -- KARCHER 【確かな洗浄能力! 家庭用高圧洗浄機入門タイプ】高圧洗浄機 K2.020
http://www.amazon.co.jp/gp/product/4334033547/ref=ox_sc_sfl_title_9?ie=UTF8&psc=1                         -- 行動経済学 経済は「感情」で動いている (光文社新書)
http://www.amazon.co.jp/gp/product/B007OZO03M/ref=ox_sc_sfl_title_10?ie=UTF8&psc=1&smid=AN1VRQENFRJN5     -- Kindle Paperwhite
http://www.amazon.co.jp/gp/product/B009CMI5WC/ref=ox_sc_sfl_title_1?ie=UTF8&psc=1&smid=AN1VRQENFRJN5      -- WD Green 3.5inch IntelliPower 2.0TB 64MBキャッシュ SATA3.0 WD20EZRX
http://www.amazon.co.jp/gp/product/4806144142/ref=ox_sc_sfl_title_2?ie=UTF8&psc=1&smid=AN1VRQENFRJN5      -- 『日常』と学ぶ 物理基礎が面白いほどわかる本
http://www.amazon.co.jp/gp/product/4806145807/ref=ox_sc_sfl_title_3?ie=UTF8&psc=1&smid=AN1VRQENFRJN5      -- 『日常』と学ぶ 化学基礎が面白いほどわかる本

ruby で書いたら一瞬だった

Phantom.JS や node.js でやろうとしたけど、時間がかかって駄目だ。あれは、決まりきったテストには向いているが、サイトの構造を見ながら、Consoleでスクリプトを作り足していくことが出来ない。余計な時間がかかってしまった。

Amazonのショッピングカートを取り出すスクリプト
#codning:utf-8
require "rubygems"
require "mechanize"


azn_user_name = "takuya@eample.com"
azn_user_pass = "my_password"

m = Mechanize.new
m.user_agent_alias = 'Mac Safari'
m.get 'https://www.amazon.co.jp/ap/signin?_encoding=UTF8&openid.assoc_handle=jpflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0'
m.page.forms[1].field_with(:name=>/email/).value= azn_user_name
m.page.forms[1].field_with(:name=>/pass/).value= azn_user_pass
m.page.forms[1].submit()


ret = []
m.get "http://www.amazon.co.jp/gp/cart/view.html"
puts m.page.body

(1..25).map{|i| "http://www.amazon.co.jp/gp/cart/view.html/ref=ox_page_sfl_2?ie=UTF8&dc=df&page=#{i}&type=saved" }
.each{|e| 
		m.get(e);
		m.page.search("#cart-saved-items div.item-list .product-title a[href^='http']").map{|e| ret.push [e.text,e["href"]]
	}
}

# puts m.page.body.toutf8
# puts m.page.search("#cart-saved-items div.item-list .product-title a[href^='http']").map{|e|  e.text}
# puts ret
# puts ret.inspect
puts ret.map{|e| "%-105s -- %s" % [ e[1], e[0]] }.join("\n")

実行

ruby azn_cart_list.rb


これで出来上がり。


Amazonのアカウントを切り替えるときに保存した商品を持っていくのにも使えますね!めでたしめでたし