beeradvocate 0.0.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 +7 -0
- data/bin/beer +18 -0
- data/lib/beer_advocate/version.rb +5 -0
- data/lib/beer_advocate.rb +67 -0
- data/lib/beeradvocate.rb +2 -0
- metadata +110 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1f1c6d4b4772fb31c2f0de4c74a4401e08359ac4
|
4
|
+
data.tar.gz: b9d5050a81d57a678f82b22e29c6b3d383d11599
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7ab3ab5217a00220baf56c76bfd57386089fabd52c9cf285f9e19f97457f658548c3bd9818a7b1075ecc66637f47d6bb360671e5391be176d98dc22203139e9c
|
7
|
+
data.tar.gz: e960542038a1b7efeb1c1f3dfc1c90e33bec89ad8e2e915bed65356322a889748905ab1b5f1941076ff3acf5634c498f3d27023bd31876c3db2ca1579acf752c
|
data/bin/beer
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'beer_advocate'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
if ARGV.count == 0
|
6
|
+
STDERR.puts "Usage: #{$0} name of beer"
|
7
|
+
exit 1
|
8
|
+
end
|
9
|
+
|
10
|
+
beer_name = ARGV.join(' ')
|
11
|
+
|
12
|
+
url = BeerAdvocate.get_url(beer_name)
|
13
|
+
|
14
|
+
beer_details = BeerAdvocate.get_beer_details_from_url(url)
|
15
|
+
|
16
|
+
puts JSON.pretty_generate(beer_details)
|
17
|
+
|
18
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'mechanize'
|
3
|
+
require 'open-uri'
|
4
|
+
|
5
|
+
require 'beer_advocate/version'
|
6
|
+
|
7
|
+
## A handful of utilities for making beer signs based on Beer Advocate data.
|
8
|
+
module BeerAdvocate
|
9
|
+
class << self
|
10
|
+
## Given a beer name, return the URL for the top Google search result for
|
11
|
+
## `site:beeradvocate.com beer name`.
|
12
|
+
def get_url(beer_name)
|
13
|
+
agent = Mechanize.new
|
14
|
+
page = agent.get('http://www.google.com')
|
15
|
+
form = page.form('f')
|
16
|
+
form.q = "site:beeradvocate.com #{beer_name}"
|
17
|
+
|
18
|
+
results = agent.submit(form, form.buttons.first)
|
19
|
+
|
20
|
+
urls = []
|
21
|
+
results.links.each do |link|
|
22
|
+
if link.href.to_s =~/url.q/
|
23
|
+
str=link.href.to_s
|
24
|
+
strList=str.split(%r{=|&})
|
25
|
+
urls << strList[1]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
urls.select {|url| url.match(/beeradvocate.com/)}.first
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
## Given a URL for a Beer Advocate beer page, return a hash containing
|
33
|
+
## info about the beer, including `name`, `brewery`, `style`, `abv`,
|
34
|
+
## and `score`.
|
35
|
+
def get_beer_details_from_url(url)
|
36
|
+
page = Nokogiri::HTML(open(url))
|
37
|
+
|
38
|
+
table = page.css('#ba-content table')[1]
|
39
|
+
|
40
|
+
beer_name = table.css('img')[0].attributes['alt'].value
|
41
|
+
|
42
|
+
beer_score = table.css('.ba-score').text
|
43
|
+
|
44
|
+
beer_style = table.css('a').
|
45
|
+
select {|tag| tag.attributes['href'].value.match(%r{^/beer/style/\d+/?$}) }.
|
46
|
+
map {|tag| tag.text}.
|
47
|
+
first
|
48
|
+
|
49
|
+
beer_brewery = table.css('a').
|
50
|
+
select {|tag| tag.attributes['href'].value.match(%r{^/beer/profile/\d+/?$}) }.
|
51
|
+
map {|tag| tag.text}.
|
52
|
+
first
|
53
|
+
|
54
|
+
m = table.to_s.match(/ \| [^\d]{0,9} (\d+ \. \d+ \%) /x)
|
55
|
+
beer_abv = m[1]
|
56
|
+
|
57
|
+
{
|
58
|
+
name: beer_name,
|
59
|
+
score: beer_score,
|
60
|
+
style: beer_style,
|
61
|
+
abv: beer_abv,
|
62
|
+
brewery: beer_brewery
|
63
|
+
}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
data/lib/beeradvocate.rb
ADDED
metadata
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: beeradvocate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pete Gamache
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
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'
|
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'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.7'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.7'
|
69
|
+
description: |2
|
70
|
+
The BeerAdvocate gem contains several brittle, lightly-tested methods
|
71
|
+
for turning a beer name into its Beer Advocate URL (by scraping Google),
|
72
|
+
and turning a Beer Advocate beer page URL into a hash of attributes
|
73
|
+
about the beer (by scraping Beer Advocate). The gem also installs a
|
74
|
+
`beer` executable, which returns JSON-formatted beer information for
|
75
|
+
the beer named on the command line.
|
76
|
+
email: pete@gamache.org
|
77
|
+
executables:
|
78
|
+
- beer
|
79
|
+
extensions: []
|
80
|
+
extra_rdoc_files: []
|
81
|
+
files:
|
82
|
+
- bin/beer
|
83
|
+
- lib/beer_advocate.rb
|
84
|
+
- lib/beer_advocate/version.rb
|
85
|
+
- lib/beeradvocate.rb
|
86
|
+
homepage: https://github.com/gamache/beeradvocate
|
87
|
+
licenses:
|
88
|
+
- public domain
|
89
|
+
metadata: {}
|
90
|
+
post_install_message:
|
91
|
+
rdoc_options: []
|
92
|
+
require_paths:
|
93
|
+
- lib
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 1.8.7
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
requirements: []
|
105
|
+
rubyforge_project:
|
106
|
+
rubygems_version: 2.2.2
|
107
|
+
signing_key:
|
108
|
+
specification_version: 4
|
109
|
+
summary: Fragile, minimal utilities to scrape Beer Advocate
|
110
|
+
test_files: []
|