amazon_deets 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/amazon_deets.rb +70 -0
  3. metadata +72 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a09566ad7e9f11f86913df9c35d39b8a7c3a850c
4
+ data.tar.gz: deb6d84d15b153b877928c92fa550c14d343edad
5
+ SHA512:
6
+ metadata.gz: fc66cb01e752e789e47771ae5206f1396e03f82539e3a6c3a7808df2ab939adb6b06cbb3935ae54d55d36706d7c051e7f81c02e943b697d788e960fdb3aebd93
7
+ data.tar.gz: 55b66b2c7c8bd34c3041b487ff317fc04f61909e0b49a25750b5ec29752162148bfee3236355af5c44401bed6768a3c85197125e56d32a810ed6ff0f6509fbb6
@@ -0,0 +1,70 @@
1
+ require 'logbert'
2
+ require 'mechanize'
3
+
4
+ module AmazonDeets
5
+
6
+ class Grabber
7
+ LOG = Logbert[self]
8
+
9
+ RatingRegex = /(.+)\s+out\sof/
10
+ ReviewsRegex = /(\d+)/
11
+
12
+ attr_accessor :agent
13
+
14
+ def initialize(agent: Mechanize.new)
15
+ @agent = agent
16
+ end
17
+
18
+ def title
19
+ agent.page.search("//span[@id='btAsinTitle']").text
20
+ end
21
+
22
+
23
+ def list_price
24
+ nodes = agent.page.search("//span[@id='listPriceValue']")
25
+ if nodes.any?
26
+ return nodes.text
27
+ else
28
+ LOG.debug "List price was not found. Returning current price instead."
29
+ return current_price
30
+ end
31
+ end
32
+
33
+ def current_price
34
+ agent.page.search("//span[@id='actualPriceValue']").text
35
+ end
36
+
37
+
38
+ def rating
39
+ text = agent.page.search("//div[@id='acr']//span[@title]").text
40
+ m = RatingRegex.match(text)
41
+ m[1].to_f
42
+ end
43
+
44
+ def reviews
45
+ text = agent.page.search("//div[@id='acr']//div[contains(@class, 'acrCount')]").text
46
+ m = ReviewsRegex.match(text)
47
+ m[1].to_i
48
+ end
49
+
50
+
51
+ def details_hash
52
+ return {
53
+ title: title,
54
+ list_price: list_price,
55
+ current_price: current_price,
56
+ rating: rating,
57
+ reviews: reviews
58
+ }
59
+ end
60
+
61
+
62
+ def grab(url)
63
+ agent.get(url)
64
+ details_hash
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: amazon_deets
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Brian Lauber
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: logbert
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.6.14
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.6.14
27
+ - !ruby/object:Gem::Dependency
28
+ name: mechanize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 2.7.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 2.7.0
41
+ description: Scrapes product details from an Amazon product page
42
+ email: constructible.truth@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/amazon_deets.rb
48
+ homepage:
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.0.3
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Scrapes product details from an Amazon product page
72
+ test_files: []