amazon_order 0.1.1 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.travis.yml +4 -4
- data/amazon_order.gemspec +4 -4
- data/lib/amazon_order.rb +1 -0
- data/lib/amazon_order/client.rb +10 -1
- data/lib/amazon_order/parsers/base.rb +1 -0
- data/lib/amazon_order/parsers/order.rb +31 -13
- data/lib/amazon_order/parsers/product.rb +4 -1
- data/lib/amazon_order/parsers/shipment.rb +38 -0
- data/lib/amazon_order/version.rb +1 -1
- data/lib/amazon_order/writer.rb +12 -2
- metadata +18 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 403169c4d75b77f2b0902673f841adc2e5b26a919321303054e76ce3e78b3363
|
4
|
+
data.tar.gz: 48a1cb6dca6655144a6c3aa2aaf9bc9bc92cf5d93f0efa133620eb762c5984ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ad026411155d3359878e9dcdb9dc16886e102b5807bd34487778009d9d3a60a348dc9935d6357eb8b09ba16099425eb65b4626608d54cfc51acd048e48113ae
|
7
|
+
data.tar.gz: 87d829052e7e65f6a2d0eff5c7ee897fcfa2982de28ebac707a546611aa0ada4bd3151fb5ca257060b09720608af3d25ed4246666b4cd898ea462864d21f31c5
|
data/.travis.yml
CHANGED
data/amazon_order.gemspec
CHANGED
@@ -21,10 +21,10 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
spec.add_runtime_dependency "amazon_auth", "~> 0.
|
25
|
-
spec.add_development_dependency "bundler"
|
26
|
-
spec.add_development_dependency "rake"
|
27
|
-
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_runtime_dependency "amazon_auth", "~> 0.6.0"
|
25
|
+
spec.add_development_dependency "bundler"
|
26
|
+
spec.add_development_dependency "rake"
|
27
|
+
spec.add_development_dependency "rspec"
|
28
28
|
spec.add_development_dependency "byebug"
|
29
29
|
spec.add_development_dependency "pry-rescue"
|
30
30
|
spec.add_development_dependency "pry-stack_explorer"
|
data/lib/amazon_order.rb
CHANGED
@@ -3,6 +3,7 @@ require "amazon_order/version"
|
|
3
3
|
require "amazon_order/client"
|
4
4
|
require "amazon_order/parsers/base"
|
5
5
|
require "amazon_order/parsers/order"
|
6
|
+
require "amazon_order/parsers/shipment"
|
6
7
|
require "amazon_order/parsers/product"
|
7
8
|
require "amazon_order/parser"
|
8
9
|
require "amazon_order/writer"
|
data/lib/amazon_order/client.rb
CHANGED
@@ -65,8 +65,17 @@ module AmazonOrder
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def go_to_amazon_order_page
|
68
|
+
if doc.css('.cvf-account-switcher').present?
|
69
|
+
log "Account switcher page was displayed"
|
70
|
+
session.first('.cvf-account-switcher-profile-details').click
|
71
|
+
wait_for_selector('#nav-main') # Wait for page loading
|
72
|
+
end
|
68
73
|
link = links_for('a').find{|link| link =~ %r{/order-history} }
|
69
|
-
|
74
|
+
if link.present?
|
75
|
+
session.visit link
|
76
|
+
else
|
77
|
+
log "Link for order history wasn't found in #{session.current_url}"
|
78
|
+
end
|
70
79
|
end
|
71
80
|
|
72
81
|
def fetch_orders_for_year(options = {})
|
@@ -3,7 +3,6 @@ module AmazonOrder
|
|
3
3
|
class Order < Base
|
4
4
|
ATTRIBUTES = %w[
|
5
5
|
order_placed order_number order_total
|
6
|
-
shipment_status shipment_note
|
7
6
|
order_details_path
|
8
7
|
all_products_displayed
|
9
8
|
]
|
@@ -17,36 +16,55 @@ module AmazonOrder
|
|
17
16
|
end
|
18
17
|
|
19
18
|
def order_total
|
20
|
-
@_order_total ||= @node.css('.order-info .a-col-left .a-column')[1].css('.value').text.strip.gsub(/[^\d\.]/,'').to_f
|
19
|
+
@_order_total ||= @node.css('.order-info .a-col-left .a-column')[1].css('.value').text.strip.gsub(/[^\d\.]/, '').to_f
|
21
20
|
end
|
22
21
|
|
23
|
-
def
|
24
|
-
|
25
|
-
@_shipment_status ||= @node.css('.shipment .shipment-top-row').present? ? @node.css('.shipment .shipment-top-row .a-row')[0].text.strip : nil
|
22
|
+
def order_details_path
|
23
|
+
@_order_details_path ||= @node.css('.order-info .a-col-right .a-row')[1].css('a.a-link-normal')[0].attr('href')
|
26
24
|
end
|
27
25
|
|
28
|
-
def
|
29
|
-
|
26
|
+
def order_type
|
27
|
+
if @node.css('[id^=Leave-Service-Feedback]').present?
|
28
|
+
return :service_order
|
29
|
+
elsif @node.css('.shipment').present?
|
30
|
+
:shipment_order
|
31
|
+
else
|
32
|
+
:digital_order
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
|
-
def
|
33
|
-
@
|
36
|
+
def shipments
|
37
|
+
@_shipments ||= @node.css('.shipment')
|
38
|
+
.map do |shipment|
|
39
|
+
AmazonOrder::Parsers::Shipment.new(shipment,
|
40
|
+
containing_object: self,
|
41
|
+
fetched_at: fetched_at)
|
42
|
+
end
|
34
43
|
end
|
35
44
|
|
36
|
-
def
|
37
|
-
@
|
45
|
+
def products
|
46
|
+
@products ||= shipment_products + digital_products
|
38
47
|
end
|
39
48
|
|
40
|
-
def
|
41
|
-
@
|
49
|
+
def shipment_products
|
50
|
+
@shipment_products ||= shipments.flat_map(&:products)
|
51
|
+
end
|
52
|
+
|
53
|
+
def digital_products
|
54
|
+
@_products ||= @node.css('.a-box:not(.shipment) .a-fixed-left-grid').map { |e| AmazonOrder::Parsers::Product.new(e, fetched_at: fetched_at) }
|
42
55
|
end
|
43
56
|
|
57
|
+
# might be broken now that orders have multiple shipments
|
58
|
+
def all_products_displayed
|
59
|
+
@_all_products_displayed ||= @node.css('.a-box.order-info ~ .a-box .a-col-left .a-row').last.css('.a-link-emphasis').present?
|
60
|
+
end
|
44
61
|
|
45
62
|
def to_hash
|
46
63
|
super do |hash|
|
47
64
|
hash.merge!(products: products.map(&:to_hash))
|
48
65
|
end
|
49
66
|
end
|
67
|
+
|
50
68
|
end
|
51
69
|
end
|
52
70
|
end
|
@@ -21,7 +21,10 @@ module AmazonOrder
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def image_url
|
24
|
-
@_image_url ||=
|
24
|
+
@_image_url ||= begin
|
25
|
+
img = @node.css('.a-col-left img')[0]
|
26
|
+
get_original_image_url(img.attr('data-a-hires').presence || img.attr('src'))
|
27
|
+
end
|
25
28
|
end
|
26
29
|
end
|
27
30
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module AmazonOrder
|
2
|
+
module Parsers
|
3
|
+
class Shipment < Base
|
4
|
+
ATTRIBUTES = %w[
|
5
|
+
shipment_status
|
6
|
+
shipment_note
|
7
|
+
]
|
8
|
+
|
9
|
+
# TODO shipment_date
|
10
|
+
|
11
|
+
def order
|
12
|
+
@containing_object
|
13
|
+
end
|
14
|
+
|
15
|
+
def shipment_status
|
16
|
+
# class names like "shipment-is-delivered" in '.shipment' node may be useful
|
17
|
+
@_shipment_status ||= @node.css('.shipment-top-row').present? ? @node.css('.shipment .shipment-top-row .a-row')[0].text.strip : nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def shipment_note
|
21
|
+
@_shipment_note ||= case order.order_type
|
22
|
+
when :shipment_order
|
23
|
+
@node.css('.shipment-top-row').present? ? @node.css('.shipment .shipment-top-row .a-row')[1].text.strip : nil
|
24
|
+
when :service_order
|
25
|
+
nil
|
26
|
+
when :digital_order
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def products
|
33
|
+
@_products ||= @node.css('.a-fixed-left-grid').map { |e| AmazonOrder::Parsers::Product.new(e, fetched_at: fetched_at) }
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/amazon_order/version.rb
CHANGED
data/lib/amazon_order/writer.rb
CHANGED
@@ -9,7 +9,7 @@ module AmazonOrder
|
|
9
9
|
data['orders']
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
12
|
+
def print_products
|
13
13
|
data['products']
|
14
14
|
end
|
15
15
|
|
@@ -21,7 +21,8 @@ module AmazonOrder
|
|
21
21
|
csv_file = "#{@output_dir}/#{resource}#{Time.current.strftime('%Y%m%d%H%M%S')}.csv"
|
22
22
|
puts " Writing #{csv_file}"
|
23
23
|
CSV.open(csv_file, 'wb') do |csv|
|
24
|
-
|
24
|
+
csv << attributes_for(resource)
|
25
|
+
data[resource].each { |r| csv << r }
|
25
26
|
end
|
26
27
|
csv_file
|
27
28
|
end
|
@@ -41,5 +42,14 @@ module AmazonOrder
|
|
41
42
|
data
|
42
43
|
end
|
43
44
|
end
|
45
|
+
|
46
|
+
def attributes_for(resource)
|
47
|
+
case resource
|
48
|
+
when 'orders'
|
49
|
+
AmazonOrder::Parsers::Order::ATTRIBUTES
|
50
|
+
when 'products'
|
51
|
+
AmazonOrder::Parsers::Product::ATTRIBUTES
|
52
|
+
end
|
53
|
+
end
|
44
54
|
end
|
45
55
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amazon_order
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kazuho Yamaguchi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: amazon_auth
|
@@ -16,56 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.6.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.6.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: byebug
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- lib/amazon_order/parsers/base.rb
|
132
132
|
- lib/amazon_order/parsers/order.rb
|
133
133
|
- lib/amazon_order/parsers/product.rb
|
134
|
+
- lib/amazon_order/parsers/shipment.rb
|
134
135
|
- lib/amazon_order/version.rb
|
135
136
|
- lib/amazon_order/writer.rb
|
136
137
|
homepage: https://github.com/kyamaguchi/amazon_order
|
@@ -152,8 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
153
|
- !ruby/object:Gem::Version
|
153
154
|
version: '0'
|
154
155
|
requirements: []
|
155
|
-
|
156
|
-
rubygems_version: 2.6.11
|
156
|
+
rubygems_version: 3.0.3
|
157
157
|
signing_key:
|
158
158
|
specification_version: 4
|
159
159
|
summary: Scrape information of amazon orders
|