yelp 0.2.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|