magento_remote 0.1.0 → 0.1.1
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 +8 -8
- data/README.md +5 -1
- data/bin/magento_add_to_cart +2 -1
- data/bin/magento_scrape +80 -0
- data/lib/magento_remote/magento_mech.rb +30 -1
- data/lib/magento_remote/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTY4MzBjMGViZWVjZTQwMGVhNjBkZDViNjRhYzNlNzVmYzUwZjc3ZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTUwYzU3MzllMmE0MjQ0ZjFlYjhiN2VlYzUwMWNhOGQ2OTg2Y2E4YQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YWRkOTg3MTY5YjVmZGFiNDdjNjA1NjA0ZTcwMmRkNzQxODg3NzU3ZmY0ZDI5
|
10
|
+
YmE4NzM5YmI0MTM3YmNkNTRjMjgxZmIxMjVhNDhiYTY1NjEwYzJhZTg3MDcz
|
11
|
+
MmVkYmI1YmQ0YmM1ZmVkMzM5NGIwNGU1NzFkNWY2ZjUxNzU2MzU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MTQ1NGUxMGQ0NDBmNTc5OGVlZWM0ZGQ4ZWNlMTMyODY0OWRhMjg2ZDMxMDhh
|
14
|
+
MWI5YjVmNDExMjMzMTE5OTU4Y2JhNGM3OTRlYTU0ZWVkNDNhN2JmN2RhNDMy
|
15
|
+
MjJjYzEyNmE5YTgyZjgxMDM1M2NhMTAwZTg1OTM2MWY5MzhjYjU=
|
data/README.md
CHANGED
@@ -28,7 +28,11 @@ to put *quantity* of the product with *productid* in your shopping cart.
|
|
28
28
|
|
29
29
|
to display a table of matching products.
|
30
30
|
|
31
|
-
|
31
|
+
magento_scrape -b https://theshop -l limit -s startpid
|
32
|
+
|
33
|
+
to display *limit* number of products, starting with product id of *startpid*.
|
34
|
+
|
35
|
+
Note that all scripts show you information about possible parameters when invoked with `--help`.
|
32
36
|
|
33
37
|
Note that you should work with
|
34
38
|
|
data/bin/magento_add_to_cart
CHANGED
@@ -81,6 +81,7 @@ if options[:quantity].to_i < 1
|
|
81
81
|
STDERR.puts "Error: Quantity to put in cart has to be > 0."
|
82
82
|
exit 1
|
83
83
|
end
|
84
|
+
options[:quantity] = options[:quantity].to_i
|
84
85
|
|
85
86
|
mech = MagentoMech.from_config options
|
86
87
|
if options[:debug] == true
|
@@ -95,7 +96,7 @@ mech.login
|
|
95
96
|
|
96
97
|
if options[:amap]
|
97
98
|
qty = mech.add_to_cart! options[:product_id], options[:quantity]
|
98
|
-
if qty == options[:quantity]
|
99
|
+
if qty == options[:quantity].to_i
|
99
100
|
puts "INFO: Succeeded in adding to cart"
|
100
101
|
elsif qty > 0
|
101
102
|
puts "INFO: #{options[:quantity]} items not available, added #{qty}."
|
data/bin/magento_scrape
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'terminal-table'
|
5
|
+
require 'magento_remote'
|
6
|
+
|
7
|
+
# Sweet, sweet options.
|
8
|
+
options = {}
|
9
|
+
|
10
|
+
optparse = OptionParser.new do |opts|
|
11
|
+
opts.banner = "Usage: magento_scrape [OPTIONS]\n Find product(s) in shop."
|
12
|
+
|
13
|
+
opts.separator ""
|
14
|
+
opts.separator "Magento shop options"
|
15
|
+
|
16
|
+
opts.on('-b', '--base-uri URI', 'base URI of shop.') do |b|
|
17
|
+
options[:base_uri] = b
|
18
|
+
end
|
19
|
+
|
20
|
+
opts.separator ""
|
21
|
+
opts.separator "Product options"
|
22
|
+
|
23
|
+
opts.on('-s', '--start PRODUCT_ID', 'Product ID from which to start scraping') do |s|
|
24
|
+
options[:start_pid] = s
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on('-l', '--limit LIMIT', 'Maximum number of product_ids to scrape') do |l|
|
28
|
+
options[:limit] = l
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.separator ""
|
32
|
+
opts.separator "Output options"
|
33
|
+
|
34
|
+
opts.on('-d', '--debug FILE', 'enable debugging output, STDOUT, or FILE if given') do |d|
|
35
|
+
if d
|
36
|
+
options[:debug] = d
|
37
|
+
else
|
38
|
+
options[:debug] = true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
opts.separator ""
|
43
|
+
opts.separator "General options"
|
44
|
+
|
45
|
+
opts.on_tail('--version', 'Show version.') do
|
46
|
+
puts "magento_scrape #{MagentoRemote::VERSION}"
|
47
|
+
exit 0
|
48
|
+
end
|
49
|
+
opts.on('-h', '--help', 'Show help.') do
|
50
|
+
puts opts
|
51
|
+
exit 0
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
optparse.parse!
|
56
|
+
|
57
|
+
if !options[:base_uri]
|
58
|
+
STDERR.puts "Error: You have to define base_uri"
|
59
|
+
exit 1
|
60
|
+
end
|
61
|
+
|
62
|
+
mech = MagentoMech.from_config options
|
63
|
+
if options[:debug] == true
|
64
|
+
mech.log_to! STDOUT
|
65
|
+
elsif options[:debug]
|
66
|
+
mech.log_to! options[:debug]
|
67
|
+
end
|
68
|
+
|
69
|
+
return_code = 0
|
70
|
+
|
71
|
+
options[:start_pid] ||= 0
|
72
|
+
|
73
|
+
matches = mech.scrape_products options[:start_pid].to_i, options[:limit].to_i
|
74
|
+
if matches.nil?
|
75
|
+
puts "Nothing found"
|
76
|
+
else
|
77
|
+
puts Terminal::Table.new :headings => ['Name', 'Product ID', 'In stock?'], :rows => matches
|
78
|
+
end
|
79
|
+
|
80
|
+
exit return_code
|
@@ -67,7 +67,7 @@ class MagentoMech
|
|
67
67
|
while qty.to_i > 0 && !add_to_cart(product_id, qty)
|
68
68
|
qty = qty.to_i - 1
|
69
69
|
end
|
70
|
-
qty
|
70
|
+
qty.to_i
|
71
71
|
end
|
72
72
|
|
73
73
|
# Get the current carts contents
|
@@ -121,6 +121,35 @@ class MagentoMech
|
|
121
121
|
return products
|
122
122
|
end
|
123
123
|
|
124
|
+
def find_product_id_from url
|
125
|
+
page = @mech.get url
|
126
|
+
r_pid = page.search(".//input[@name='product']")[0][:value]
|
127
|
+
r_name = page.search(".product-name .roundall")
|
128
|
+
[r_pid, r_name.text]
|
129
|
+
end
|
130
|
+
|
131
|
+
# Search/scrape products.
|
132
|
+
# Arguments
|
133
|
+
# limit: Maximum number of product_ids to check
|
134
|
+
# start_pid: With which product id to start scraping
|
135
|
+
# returns [[name1, product_id1, instock?1],[name2, p_id2...]...]
|
136
|
+
# or nil if not found.
|
137
|
+
def scrape_products start_pid, limit
|
138
|
+
products = []
|
139
|
+
limit.times do |idx|
|
140
|
+
url = relative_url("/catalog/product/view/id/#{start_pid + idx + 1}")
|
141
|
+
@mech.get url rescue next
|
142
|
+
#if @mech.response_code
|
143
|
+
product_name = @mech.page.search('.product-name .roundall')[0].text
|
144
|
+
wishlist_link = @mech.page.search(".link-wishlist")[0]
|
145
|
+
wishlist_link.attributes['href'].value[/product\/(\d+)/]
|
146
|
+
pid = $1
|
147
|
+
products << [product_name, pid]
|
148
|
+
end
|
149
|
+
|
150
|
+
return products
|
151
|
+
end
|
152
|
+
|
124
153
|
private
|
125
154
|
|
126
155
|
# Construct path relative to base uri.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magento_remote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Wolfsteller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mechanize
|
@@ -86,6 +86,7 @@ email:
|
|
86
86
|
executables:
|
87
87
|
- magento_add_to_cart
|
88
88
|
- magento_find_product
|
89
|
+
- magento_scrape
|
89
90
|
extensions: []
|
90
91
|
extra_rdoc_files: []
|
91
92
|
files:
|
@@ -99,6 +100,7 @@ files:
|
|
99
100
|
- Rakefile
|
100
101
|
- bin/magento_add_to_cart
|
101
102
|
- bin/magento_find_product
|
103
|
+
- bin/magento_scrape
|
102
104
|
- lib/magento_remote.rb
|
103
105
|
- lib/magento_remote/magento_mech.rb
|
104
106
|
- lib/magento_remote/version.rb
|