yelp 0.2.1 → 1.0.0
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.
- data/{History.txt → CHANGELOG.rdoc} +20 -0
- data/Manifest.txt +2 -2
- data/{README.txt → README.rdoc} +40 -30
- data/Rakefile +19 -10
- data/lib/yelp/client.rb +3 -1
- data/lib/yelp/review/request/base.rb +2 -1
- data/lib/yelp.rb +1 -1
- data/test/test_neighborhood_search.rb +10 -5
- data/test/test_phone_search.rb +1 -4
- data/test/test_review_search.rb +46 -5
- data/test/yelp_helper.rb +11 -1
- metadata +22 -13
@@ -1,3 +1,23 @@
|
|
1
|
+
== YELP_20091019_1_0_0
|
2
|
+
|
3
|
+
* [shaper] allow specifying multiple categories for review search by
|
4
|
+
passing an array of the category names in the request.
|
5
|
+
|
6
|
+
* [shaper] fix tests to gracefully alert user if YWSID is not set in
|
7
|
+
their environment.
|
8
|
+
|
9
|
+
* [shaper] updated README to reflect the latest reality.
|
10
|
+
|
11
|
+
* [shaper] updated Rakefile to reflect latest hoe usage.
|
12
|
+
|
13
|
+
* [shaper] fixed test neighborhood search to reflect add'l info passed
|
14
|
+
along in yelp response.
|
15
|
+
|
16
|
+
* [shaper] fixed test json validation to reflect new version of 1.1.1.
|
17
|
+
|
18
|
+
* [shaper] fixed neighborhood test to suit new www.yelp.com return
|
19
|
+
url.
|
20
|
+
|
1
21
|
== 0.2.1 / 2007-11-24
|
2
22
|
|
3
23
|
* [shaper] fixed extra dependencies specified in Rakefile to allow for proper
|
data/Manifest.txt
CHANGED
data/{README.txt → README.rdoc}
RENAMED
@@ -12,6 +12,8 @@ More detailed information on the underlying Yelp API, error response codes, and
|
|
12
12
|
|
13
13
|
The RubyForge project is hosted at http://rubyforge.org/projects/yelp. This documentation is available at http://yelp.rubyforge.org.
|
14
14
|
|
15
|
+
The latest source code is at http://github.com/shaper/yelp.
|
16
|
+
|
15
17
|
== About
|
16
18
|
|
17
19
|
Everybody loves Yelp! For those seeking burritos in the Mission District of
|
@@ -38,15 +40,15 @@ retrieved via their API, documented at http://www.yelp.com/developers/getting_st
|
|
38
40
|
For tests to execute successfully you must have the YWSID set in your
|
39
41
|
environment via (shell-dependent, bash example provided):
|
40
42
|
|
41
|
-
|
43
|
+
% export YWSID='YOUR_ID_HERE'
|
42
44
|
|
43
45
|
== Installing
|
44
46
|
|
45
|
-
|
47
|
+
Install +rubygems+ if you don't already have it. See http://rubyforge.org/projects/rubygems/.
|
46
48
|
|
47
|
-
|
49
|
+
Then install the +yelp+ gem by executing:
|
48
50
|
|
49
|
-
% gem install
|
51
|
+
% gem install yelp
|
50
52
|
|
51
53
|
== Usage
|
52
54
|
|
@@ -70,31 +72,39 @@ types.
|
|
70
72
|
|
71
73
|
A few examples:
|
72
74
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
75
|
+
# construct a client instance
|
76
|
+
client = Yelp::Client.new
|
77
|
+
|
78
|
+
# perform an address/location-based search for cream puffs nearby
|
79
|
+
request = Yelp::Review::Request::Location.new(
|
80
|
+
:address => '650 Mission St',
|
81
|
+
:city => 'San Francisco',
|
82
|
+
:state => 'CA',
|
83
|
+
:radius => 2,
|
84
|
+
:term => 'cream puffs',
|
85
|
+
:yws_id => 'YOUR_YWSID_HERE')
|
86
|
+
response = client.search(request)
|
87
|
+
|
88
|
+
# perform a location-based category search for either ice cream or donut shops in SF
|
89
|
+
request = Yelp::Review::Request::Location.new(
|
90
|
+
:city => 'San Francisco',
|
91
|
+
:state => 'CA',
|
92
|
+
:category => [ 'donuts', 'icecream' ],
|
93
|
+
:yws_id => 'YOUR_YWSID_HERE')
|
94
|
+
response = client.search(request)
|
95
|
+
|
96
|
+
# perform a neighborhood name lookup for a specific geo-location point
|
97
|
+
request = Yelp::Neighborhood::Request::GeoPoint.new(
|
98
|
+
:latitude => 37.782093,
|
99
|
+
:longitude => -122.483230,
|
100
|
+
:yws_id => 'YOUR_YWSID_HERE')
|
101
|
+
response = client.search(request)
|
102
|
+
|
103
|
+
# perform a business review search based on a business phone number
|
104
|
+
request = Yelp::Phone::Request::Number.new(
|
105
|
+
:phone_number => '4155551212',
|
106
|
+
:yws_id => 'YOUR_YWSID_HERE')
|
107
|
+
response = client.search(request)
|
98
108
|
|
99
109
|
If you want to convert some addresses to latitude/longitude, or vice
|
100
110
|
versa, for testing or what have you -- try http://stevemorse.org/jcal/latlon.php.
|
@@ -105,4 +115,4 @@ This library is provided via the GNU LGPL license at http://www.gnu.org/licenses
|
|
105
115
|
|
106
116
|
== Authors
|
107
117
|
|
108
|
-
Copyright 2007, Walter Korman <shaper@
|
118
|
+
Copyright 2007 - 2009, Walter Korman <shaper@fatgoose.com>, http://lemurware.blogspot.com
|
data/Rakefile
CHANGED
@@ -3,14 +3,23 @@ require 'hoe'
|
|
3
3
|
$:.unshift(File.dirname(__FILE__) + "/lib")
|
4
4
|
require 'yelp'
|
5
5
|
|
6
|
-
Hoe.
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
6
|
+
Hoe.spec('yelp') do |p|
|
7
|
+
self.version = Yelp::VERSION
|
8
|
+
self.rubyforge_name = 'yelp'
|
9
|
+
self.author = 'Walter Korman'
|
10
|
+
self.email = 'shaper@fatgoose.com'
|
11
|
+
self.extra_deps << [ 'json', '>= 1.1.1' ]
|
12
|
+
self.summary = 'An object-oriented interface to the Yelp Developer API.'
|
13
|
+
self.description = <<EDOC
|
14
|
+
The yelp rubygem provides a Ruby object-oriented interface to the Yelp
|
15
|
+
REST API described in detail at:
|
16
|
+
|
17
|
+
http://www.yelp.com/developers/getting_started
|
18
|
+
EDOC
|
19
|
+
self.url = 'http://rubyforge.org/projects/yelp'
|
20
|
+
self.changes = p.paragraphs_of('CHANGELOG.rdoc', 0..1).join("\n\n")
|
21
|
+
self.remote_rdoc_dir = '' # Release to root
|
22
|
+
self.readme_file = 'README.rdoc'
|
23
|
+
self.history_file = 'CHANGELOG.rdoc'
|
24
|
+
self.extra_rdoc_files = [ 'CHANGELOG.rdoc', 'README.rdoc' ]
|
16
25
|
end
|
data/lib/yelp/client.rb
CHANGED
@@ -94,7 +94,9 @@ class Yelp
|
|
94
94
|
params.each do |key, value|
|
95
95
|
next if value.nil?
|
96
96
|
url << '&' if (param_count > 0)
|
97
|
-
|
97
|
+
key_str = (params[key].kind_of?(Array)) ?
|
98
|
+
params[key].map { |k| CGI.escape(k.to_s) }.join("+") : CGI.escape(params[key].to_s)
|
99
|
+
url << "#{CGI.escape(key.to_s)}=#{key_str}"
|
98
100
|
param_count += 1
|
99
101
|
end
|
100
102
|
url
|
@@ -12,7 +12,8 @@ class Yelp
|
|
12
12
|
# requested.
|
13
13
|
attr_reader :term
|
14
14
|
|
15
|
-
# optionally narrow the results by
|
15
|
+
# optionally narrow the results by one or more categories.
|
16
|
+
# may be a single string value, or an Array of multiple values.
|
16
17
|
attr_reader :category
|
17
18
|
|
18
19
|
def base_url
|
data/lib/yelp.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'pp'
|
2
1
|
require 'rubygems'
|
3
2
|
require 'test/unit'
|
4
3
|
require 'yelp'
|
@@ -8,14 +7,20 @@ class TestNeighborhoodSearch < Test::Unit::TestCase
|
|
8
7
|
include YelpHelper
|
9
8
|
|
10
9
|
def setup
|
11
|
-
|
12
|
-
@yws_id = ENV['YWSID']
|
13
|
-
# @client.debug = true
|
10
|
+
create_client
|
14
11
|
end
|
15
12
|
|
16
13
|
GORDO_LAT = 37.782093
|
17
14
|
GORDO_LON = -122.483230
|
18
|
-
GORDO_NEIGHBORHOOD = {
|
15
|
+
GORDO_NEIGHBORHOOD = {
|
16
|
+
"city" => "San Francisco",
|
17
|
+
"name" => "Outer Richmond",
|
18
|
+
"country_code" => "US",
|
19
|
+
"country" => "USA",
|
20
|
+
"borough" => "",
|
21
|
+
"url" => "http://www.yelp.com/search?find_loc=Outer+Richmond%2C+San+Francisco%2C+CA%2C+USA",
|
22
|
+
"state" => "CA",
|
23
|
+
"state_code" => "CA" }
|
19
24
|
|
20
25
|
def test_geo_point_search
|
21
26
|
request = Yelp::Neighborhood::Request::GeoPoint.new(:latitude => GORDO_LAT,
|
data/test/test_phone_search.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'pp'
|
2
1
|
require 'rubygems'
|
3
2
|
require 'test/unit'
|
4
3
|
require 'yelp'
|
@@ -8,9 +7,7 @@ class TestPhoneSearch < Test::Unit::TestCase
|
|
8
7
|
include YelpHelper
|
9
8
|
|
10
9
|
def setup
|
11
|
-
|
12
|
-
@yws_id = ENV['YWSID']
|
13
|
-
# @client.debug = true
|
10
|
+
create_client
|
14
11
|
end
|
15
12
|
|
16
13
|
GORDO_PHONE_NUMBER = '4155666011'
|
data/test/test_review_search.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'pp'
|
2
1
|
require 'rubygems'
|
3
2
|
require 'test/unit'
|
4
3
|
require 'yelp'
|
@@ -8,9 +7,7 @@ class TestReviewSearch < Test::Unit::TestCase
|
|
8
7
|
include YelpHelper
|
9
8
|
|
10
9
|
def setup
|
11
|
-
|
12
|
-
@yws_id = ENV['YWSID']
|
13
|
-
# @client.debug = true
|
10
|
+
create_client
|
14
11
|
end
|
15
12
|
|
16
13
|
def test_bounding_box
|
@@ -71,7 +68,6 @@ class TestReviewSearch < Test::Unit::TestCase
|
|
71
68
|
:category => 'playgrounds',
|
72
69
|
:yws_id => @yws_id)
|
73
70
|
narrowed_response = @client.search(narrowed_request)
|
74
|
-
pp narrowed_response
|
75
71
|
|
76
72
|
# make sure we got less for the second
|
77
73
|
assert(response['businesses'].length > narrowed_response['businesses'].length)
|
@@ -113,6 +109,51 @@ class TestReviewSearch < Test::Unit::TestCase
|
|
113
109
|
validate_json_to_ruby_response(response)
|
114
110
|
end
|
115
111
|
|
112
|
+
def test_multiple_categories
|
113
|
+
# fetch results for only one category
|
114
|
+
params = {
|
115
|
+
:city => 'San Francisco',
|
116
|
+
:state => 'CA',
|
117
|
+
:yws_id => @yws_id,
|
118
|
+
:category => 'donuts'
|
119
|
+
}
|
120
|
+
request = Yelp::Review::Request::Location.new(params)
|
121
|
+
response = @client.search(request)
|
122
|
+
|
123
|
+
# make sure the overall request looks kosher
|
124
|
+
validate_json_to_ruby_response(response)
|
125
|
+
|
126
|
+
# make sure all businesses returned have at least the specified category
|
127
|
+
response['businesses'].each do |b|
|
128
|
+
cat_exists = b['categories'].find { |c| c['category_filter'] == 'donuts' }
|
129
|
+
assert_not_nil(cat_exists)
|
130
|
+
end
|
131
|
+
|
132
|
+
# now fetch for businesses with two categories
|
133
|
+
params[:category] = [ 'donuts', 'icecream' ]
|
134
|
+
request = Yelp::Review::Request::Location.new(params)
|
135
|
+
response = @client.search(request)
|
136
|
+
|
137
|
+
# make sure the overall request looks kosher
|
138
|
+
validate_json_to_ruby_response(response)
|
139
|
+
|
140
|
+
# make sure we have at least one of each specified category, and
|
141
|
+
# that each business has at least one
|
142
|
+
donut_count = 0
|
143
|
+
icecream_count = 0
|
144
|
+
response['businesses'].each do |b|
|
145
|
+
has_donut = b['categories'].find { |c| c['category_filter'] == 'donuts' }
|
146
|
+
has_icecream = b['categories'].find { |c| c['category_filter'] == 'icecream' }
|
147
|
+
|
148
|
+
donut_count += 1 if has_donut
|
149
|
+
icecream_count += 1 if has_icecream
|
150
|
+
|
151
|
+
assert(has_donut || has_icecream)
|
152
|
+
end
|
153
|
+
|
154
|
+
assert((donut_count > 0) && (icecream_count > 0))
|
155
|
+
end
|
156
|
+
|
116
157
|
protected
|
117
158
|
|
118
159
|
def basic_request (params = nil)
|
data/test/yelp_helper.rb
CHANGED
@@ -1,8 +1,18 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
1
3
|
module YelpHelper
|
4
|
+
def create_client
|
5
|
+
@client = Yelp::Client.new
|
6
|
+
assert_not_nil(ENV['YWSID'], "Missing YWSID. Obtain from http://www.yelp.com/developer and " +
|
7
|
+
"set in your shell environment under 'YWSID'.")
|
8
|
+
@yws_id = ENV['YWSID']
|
9
|
+
# @client.debug = true
|
10
|
+
end
|
11
|
+
|
2
12
|
def validate_json_response (response)
|
3
13
|
assert_not_nil response
|
4
14
|
assert_instance_of String, response
|
5
|
-
assert_match(/^\{"message": \{"text": "OK", "code": 0, "version": 1\.1\}, "(businesses|neighborhoods)": .*?\}$/, response)
|
15
|
+
assert_match(/^\{"message": \{"text": "OK", "code": 0, "version": "1\.1\.1"\}, "(businesses|neighborhoods)": .*?\}$/, response)
|
6
16
|
end
|
7
17
|
|
8
18
|
def validate_json_to_ruby_response (response)
|
metadata
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yelp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
platform:
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Walter Korman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-10-19 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
@@ -23,30 +24,36 @@ dependencies:
|
|
23
24
|
version:
|
24
25
|
- !ruby/object:Gem::Dependency
|
25
26
|
name: hoe
|
27
|
+
type: :development
|
26
28
|
version_requirement:
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|
29
31
|
- - ">="
|
30
32
|
- !ruby/object:Gem::Version
|
31
|
-
version:
|
33
|
+
version: 2.3.3
|
32
34
|
version:
|
33
|
-
description:
|
34
|
-
|
35
|
+
description: |
|
36
|
+
The yelp rubygem provides a Ruby object-oriented interface to the Yelp
|
37
|
+
REST API described in detail at:
|
38
|
+
|
39
|
+
http://www.yelp.com/developers/getting_started
|
40
|
+
|
41
|
+
email: shaper@fatgoose.com
|
35
42
|
executables: []
|
36
43
|
|
37
44
|
extensions: []
|
38
45
|
|
39
46
|
extra_rdoc_files:
|
40
|
-
- History.txt
|
41
47
|
- LICENSE.txt
|
42
48
|
- Manifest.txt
|
43
|
-
- README.txt
|
44
49
|
- TODO.txt
|
50
|
+
- CHANGELOG.rdoc
|
51
|
+
- README.rdoc
|
45
52
|
files:
|
46
|
-
-
|
53
|
+
- CHANGELOG.rdoc
|
47
54
|
- LICENSE.txt
|
48
55
|
- Manifest.txt
|
49
|
-
- README.
|
56
|
+
- README.rdoc
|
50
57
|
- Rakefile
|
51
58
|
- TODO.txt
|
52
59
|
- lib/yelp.rb
|
@@ -69,10 +76,12 @@ files:
|
|
69
76
|
- test/yelp_helper.rb
|
70
77
|
has_rdoc: true
|
71
78
|
homepage: http://rubyforge.org/projects/yelp
|
79
|
+
licenses: []
|
80
|
+
|
72
81
|
post_install_message:
|
73
82
|
rdoc_options:
|
74
83
|
- --main
|
75
|
-
- README.
|
84
|
+
- README.rdoc
|
76
85
|
require_paths:
|
77
86
|
- lib
|
78
87
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -90,9 +99,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
99
|
requirements: []
|
91
100
|
|
92
101
|
rubyforge_project: yelp
|
93
|
-
rubygems_version:
|
102
|
+
rubygems_version: 1.3.5
|
94
103
|
signing_key:
|
95
|
-
specification_version:
|
104
|
+
specification_version: 3
|
96
105
|
summary: An object-oriented interface to the Yelp Developer API.
|
97
106
|
test_files:
|
98
107
|
- test/test_client.rb
|