bandsintown 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +8 -0
- data/Manifest.txt +1 -0
- data/README.rdoc +42 -0
- data/Rakefile +2 -1
- data/lib/bandsintown.rb +3 -3
- data/lib/bandsintown/artist.rb +9 -9
- data/lib/bandsintown/base.rb +18 -4
- data/lib/bandsintown/connection.rb +14 -7
- data/lib/bandsintown/event.rb +136 -15
- data/lib/bandsintown/venue.rb +66 -11
- data/spec/bandsintown/artist_spec.rb +2 -2
- data/spec/bandsintown/base_spec.rb +46 -19
- data/spec/bandsintown/connection_spec.rb +78 -55
- data/spec/bandsintown/event/creation_helpers_spec.rb +102 -0
- data/spec/bandsintown/event_spec.rb +93 -16
- data/spec/bandsintown/venue_spec.rb +119 -2
- data/website/index.html +43 -1
- data/website/index.txt +50 -0
- metadata +23 -8
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 0.2.0 2010-06-03
|
2
|
+
* Added Events - Create API method (Bandsintown::Event.create)
|
3
|
+
|
4
|
+
== 0.1.5 2010-04-06
|
5
|
+
* Added Venues - Events API method (Bandsintown::Venue#events)
|
6
|
+
* Added Venues - Search API method (Bandsintown::Venues.search)
|
7
|
+
* Refactored Bandsintown::Venue initialization
|
8
|
+
|
1
9
|
== 0.1.4 2010-03-02
|
2
10
|
* Added Events - On Sale Soon API method (Bandsintown::Event.on_sale_soon)
|
3
11
|
* Corrected some typos in Bandsintown::Event spec
|
data/Manifest.txt
CHANGED
@@ -15,6 +15,7 @@ script/txt2html
|
|
15
15
|
spec/bandsintown/artist_spec.rb
|
16
16
|
spec/bandsintown/base_spec.rb
|
17
17
|
spec/bandsintown/connection_spec.rb
|
18
|
+
spec/bandsintown/event/creation_helpers_spec.rb
|
18
19
|
spec/bandsintown/event_spec.rb
|
19
20
|
spec/bandsintown/venue_spec.rb
|
20
21
|
spec/bandsintown_spec.rb
|
data/README.rdoc
CHANGED
@@ -107,6 +107,48 @@ For more information visit http://www.bandsintown.com/api/requests.
|
|
107
107
|
:radius => 10
|
108
108
|
})
|
109
109
|
|
110
|
+
=== Find venues with name beginning with "House of Blues" near San Diego, CA
|
111
|
+
|
112
|
+
venues = Bandsintown::Venue.search({
|
113
|
+
:query => "House of Blues",
|
114
|
+
:location => "San Diego, CA"
|
115
|
+
})
|
116
|
+
|
117
|
+
=== Find all upcoming events for a given venue
|
118
|
+
|
119
|
+
# 1700 => Bandsintown venue ID for Paradise Rock Club in Boston, MA
|
120
|
+
venue = Bandsintown::Venue.new(1700)
|
121
|
+
events = venue.events
|
122
|
+
|
123
|
+
=== Create an event on bandsintown.com using Bandsintown::Artist and Bandsintown::Venue objects
|
124
|
+
|
125
|
+
# 1700 => Bandsintown venue ID for Paradise Rock Club in Boston, MA
|
126
|
+
Bandsintown::Event.create({
|
127
|
+
:artists => [Bandsintown::Artist.new(:name => "The Roots")],
|
128
|
+
:datetime => Time.parse("2010-06-01 20:00"),
|
129
|
+
:venue => Bandsintown::Venue.new(1700),
|
130
|
+
:ticket_url => "http://www.example.com/tickets/123",
|
131
|
+
:ticket_price => 19.5,
|
132
|
+
:on_sale_datetime => Time.parse("2010-05-01 12:00")
|
133
|
+
})
|
134
|
+
|
135
|
+
=== Create an event on bandsintown.com using artist names and venue location hash
|
136
|
+
|
137
|
+
# 1700 => Bandsintown venue ID for Paradise Rock Club in Boston, MA
|
138
|
+
Bandsintown::Event.create({
|
139
|
+
:artists => ["Evidence", "Alchemist"],
|
140
|
+
:datetime => "2010-06-01T19:30:00",
|
141
|
+
:venue => {
|
142
|
+
:name => "Paradise Rock Club",
|
143
|
+
:city => "Boston",
|
144
|
+
:region => "MA",
|
145
|
+
:country => "United States"
|
146
|
+
},
|
147
|
+
:ticket_url => "http://www.example.com/tickets/123",
|
148
|
+
:ticket_price => 15,
|
149
|
+
:on_sale_datetime => "2010-05-01T19:30:00"
|
150
|
+
})
|
151
|
+
|
110
152
|
== Links
|
111
153
|
|
112
154
|
* RDoc[http://bandsintown.rubyforge.org/rdoc]
|
data/Rakefile
CHANGED
@@ -9,7 +9,8 @@ $hoe = Hoe.new('bandsintown', Bandsintown::VERSION) do |p|
|
|
9
9
|
p.rubyforge_name = p.name # TODO this is default value
|
10
10
|
p.extra_deps = [
|
11
11
|
['activesupport','>= 2.0.2'],
|
12
|
-
['json', '>= 1.1.3']
|
12
|
+
['json', '>= 1.1.3'],
|
13
|
+
['rest-client', '>= 1.5.0']
|
13
14
|
]
|
14
15
|
p.extra_dev_deps = [
|
15
16
|
['newgem', ">= #{::Newgem::VERSION}"]
|
data/lib/bandsintown.rb
CHANGED
@@ -2,10 +2,10 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
|
-
require 'open-uri'
|
6
5
|
require 'cgi'
|
7
|
-
require '
|
6
|
+
require 'active_support'
|
8
7
|
require 'json'
|
8
|
+
require 'rest_client'
|
9
9
|
|
10
10
|
require 'bandsintown/base'
|
11
11
|
require 'bandsintown/connection'
|
@@ -14,7 +14,7 @@ require 'bandsintown/event'
|
|
14
14
|
require 'bandsintown/venue'
|
15
15
|
|
16
16
|
module Bandsintown
|
17
|
-
VERSION = '0.
|
17
|
+
VERSION = '0.2.0'
|
18
18
|
class APIError < StandardError; end
|
19
19
|
class << self
|
20
20
|
# All Bandsintown API requests require an app_id parameter for identification.
|
data/lib/bandsintown/artist.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Bandsintown
|
2
2
|
class Artist < Base
|
3
3
|
|
4
|
-
attr_accessor :name, :
|
4
|
+
attr_accessor :name, :mbid, :events, :upcoming_events_count
|
5
5
|
|
6
6
|
def initialize(options = {})
|
7
7
|
@name = options[:name]
|
@@ -23,7 +23,7 @@ module Bandsintown
|
|
23
23
|
#
|
24
24
|
def events
|
25
25
|
return @events unless @events.blank?
|
26
|
-
@events = self.class.request_and_parse("#{api_name}/events").map { |event| Bandsintown::Event.build_from_json(event) }
|
26
|
+
@events = self.class.request_and_parse(:get, "#{api_name}/events").map { |event| Bandsintown::Event.build_from_json(event) }
|
27
27
|
end
|
28
28
|
|
29
29
|
# Used in api requests as the RESTful resource id for artists (http://api.bandsintown.com/artists/id/method).
|
@@ -70,16 +70,16 @@ module Bandsintown
|
|
70
70
|
#
|
71
71
|
def self.get(options = {})
|
72
72
|
request_url = Bandsintown::Artist.new(options).api_name
|
73
|
-
build_from_json(request_and_parse(request_url))
|
73
|
+
build_from_json(request_and_parse(:get, request_url))
|
74
74
|
end
|
75
75
|
|
76
76
|
def self.build_from_json(json_hash)
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
77
|
+
returning Bandsintown::Artist.new({}) do |artist|
|
78
|
+
artist.name = json_hash['name']
|
79
|
+
artist.mbid = json_hash['mbid']
|
80
|
+
artist.bandsintown_url = json_hash['url']
|
81
|
+
artist.upcoming_events_count = json_hash['upcoming_events_count']
|
82
|
+
end
|
83
83
|
end
|
84
84
|
|
85
85
|
def self.resource_path
|
data/lib/bandsintown/base.rb
CHANGED
@@ -3,8 +3,12 @@ module Bandsintown
|
|
3
3
|
|
4
4
|
attr_accessor :bandsintown_url
|
5
5
|
|
6
|
-
def self.request(api_method, args={})
|
7
|
-
|
6
|
+
def self.request(http_method, api_method, args={})
|
7
|
+
case http_method
|
8
|
+
when :get then self.connection.get(self.resource_path, api_method, args)
|
9
|
+
when :post then self.connection.post(self.resource_path, api_method, args)
|
10
|
+
else raise ArgumentError, "only :get and :post requests are supported"
|
11
|
+
end
|
8
12
|
end
|
9
13
|
|
10
14
|
def self.connection
|
@@ -23,8 +27,18 @@ module Bandsintown
|
|
23
27
|
end
|
24
28
|
end
|
25
29
|
|
26
|
-
def self.request_and_parse(api_method, args={})
|
27
|
-
parse(request(api_method, args))
|
30
|
+
def self.request_and_parse(http_method, api_method, args={})
|
31
|
+
parse(request(http_method, api_method, args))
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_hash
|
35
|
+
hash = {}
|
36
|
+
self.instance_variables.each do |ivar|
|
37
|
+
value = self.instance_variable_get(ivar)
|
38
|
+
next if value.blank?
|
39
|
+
hash[:"#{ivar.gsub('@', '')}"] = value
|
40
|
+
end
|
41
|
+
hash
|
28
42
|
end
|
29
43
|
|
30
44
|
end
|
@@ -1,21 +1,28 @@
|
|
1
1
|
module Bandsintown
|
2
2
|
class Connection
|
3
|
-
attr_accessor :base_url
|
3
|
+
attr_accessor :base_url, :client
|
4
4
|
|
5
5
|
def initialize(base_url)
|
6
6
|
@base_url = base_url
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
request_url = "#{@base_url}/#{resource_path}/#{method_path}?#{encode(
|
9
|
+
def get(resource_path, method_path, params = {})
|
10
|
+
request_url = "#{@base_url}/#{resource_path}/#{method_path}?#{encode(params.symbolize_keys)}"
|
11
11
|
begin
|
12
|
-
|
13
|
-
rescue
|
14
|
-
error_response.
|
12
|
+
RestClient.get(request_url)
|
13
|
+
rescue RestClient::ResourceNotFound => error_response
|
14
|
+
error_response.response
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
def post(resource_path, method_path, body = {})
|
19
|
+
request_url = "#{@base_url}/#{resource_path}/#{method_path}?#{encode({})}"
|
20
|
+
begin
|
21
|
+
RestClient.post(request_url, body.to_json, :content_type => :json, :accept => :json)
|
22
|
+
rescue RestClient::ResourceNotFound => error_response
|
23
|
+
error_response.response
|
24
|
+
end
|
25
|
+
end
|
19
26
|
|
20
27
|
def encode(args = {})
|
21
28
|
start_date = args.delete(:start_date)
|
data/lib/bandsintown/event.rb
CHANGED
@@ -1,6 +1,62 @@
|
|
1
1
|
module Bandsintown
|
2
2
|
class Event < Base
|
3
3
|
|
4
|
+
# Module with helper methods for formatting Bandsintown::Event.create params
|
5
|
+
module CreationHelpers
|
6
|
+
ISO_8601_FORMAT = "%Y-%m-%dT%H:%M:%S"
|
7
|
+
|
8
|
+
def self.included(klass)
|
9
|
+
klass.extend(ClassMethods)
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
# Formats Time/DateTime/Date to ISO 8601 string, or return unmodified if passed as a String.
|
14
|
+
def parse_datetime(datetime)
|
15
|
+
case datetime
|
16
|
+
when Time, DateTime then datetime.strftime(ISO_8601_FORMAT)
|
17
|
+
when Date then (datetime + 19.hours).strftime(ISO_8601_FORMAT)
|
18
|
+
else datetime
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns a hash with venue attributes. If bandsintown_id is present this is preferred over location attributes.
|
23
|
+
# venue_data can be either a Bandsintown::Venue or a Hash.
|
24
|
+
def parse_venue(venue_data)
|
25
|
+
hash = venue_data.to_hash
|
26
|
+
bandsintown_id = hash[:id] || hash[:bandsintown_id]
|
27
|
+
venue = if bandsintown_id.blank?
|
28
|
+
{
|
29
|
+
:name => hash[:name],
|
30
|
+
:address => hash[:address],
|
31
|
+
:city => hash[:city],
|
32
|
+
:region => hash[:region],
|
33
|
+
:postalcode => hash[:postalcode],
|
34
|
+
:country => hash[:country],
|
35
|
+
:latitude => hash[:latitude],
|
36
|
+
:longitude => hash[:longitude]
|
37
|
+
}
|
38
|
+
else
|
39
|
+
{ :id => bandsintown_id }
|
40
|
+
end
|
41
|
+
venue.reject { |k,v| v.blank? }
|
42
|
+
end
|
43
|
+
|
44
|
+
# Returns an array of hashes formatted either { :name => name } or { :mbid => mbid } based on each object in artist_data (can be Bandsintown::Artists, Hashes, or Strings)
|
45
|
+
def parse_artists(artist_data)
|
46
|
+
artist_data.map do |artist|
|
47
|
+
if artist.is_a?(String)
|
48
|
+
{ :name => artist }
|
49
|
+
else
|
50
|
+
hash = artist.to_hash
|
51
|
+
hash[:mbid].blank? ? { :name => hash[:name] } : { :mbid => hash[:mbid] }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
include CreationHelpers
|
59
|
+
|
4
60
|
attr_accessor :bandsintown_id, :datetime, :ticket_url, :artists, :venue, :status, :ticket_status, :on_sale_datetime
|
5
61
|
|
6
62
|
def tickets_available?
|
@@ -44,7 +100,7 @@ module Bandsintown
|
|
44
100
|
#
|
45
101
|
def self.search(options = {})
|
46
102
|
events = []
|
47
|
-
self.request_and_parse("search", options).each { |event| events << Bandsintown::Event.build_from_json(event) }
|
103
|
+
self.request_and_parse(:get, "search", options).each { |event| events << Bandsintown::Event.build_from_json(event) }
|
48
104
|
events
|
49
105
|
end
|
50
106
|
|
@@ -53,7 +109,7 @@ module Bandsintown
|
|
53
109
|
#
|
54
110
|
def self.daily
|
55
111
|
events = []
|
56
|
-
self.request_and_parse("daily").each { |event| events << Bandsintown::Event.build_from_json(event) }
|
112
|
+
self.request_and_parse(:get, "daily").each { |event| events << Bandsintown::Event.build_from_json(event) }
|
57
113
|
events
|
58
114
|
end
|
59
115
|
|
@@ -75,7 +131,7 @@ module Bandsintown
|
|
75
131
|
#
|
76
132
|
def self.recommended(options = {})
|
77
133
|
events = []
|
78
|
-
self.request_and_parse("recommended", options).each { |event| events << Bandsintown::Event.build_from_json(event) }
|
134
|
+
self.request_and_parse(:get, "recommended", options).each { |event| events << Bandsintown::Event.build_from_json(event) }
|
79
135
|
events
|
80
136
|
end
|
81
137
|
|
@@ -96,27 +152,92 @@ module Bandsintown
|
|
96
152
|
#
|
97
153
|
def self.on_sale_soon(options = {})
|
98
154
|
events = []
|
99
|
-
self.request_and_parse("on_sale_soon", options).each { |event| events << Bandsintown::Event.build_from_json(event) }
|
155
|
+
self.request_and_parse(:get, "on_sale_soon", options).each { |event| events << Bandsintown::Event.build_from_json(event) }
|
100
156
|
events
|
101
157
|
end
|
102
158
|
|
159
|
+
#This is used to create an event on bandsintown.com.
|
160
|
+
#Unless you have a trusted app_id, events added through the API will need to be approved before they are seen live.
|
161
|
+
#Contact Bandsintown if you are often adding events and would like a trusted account.
|
162
|
+
#See http://www.bandsintown.com/api/requests#events-create for more information.
|
163
|
+
#===options:
|
164
|
+
# :artists - an Array of artist data with each element in one of the following formats:
|
165
|
+
# * artist name String
|
166
|
+
# * Hash of { :name => artist name } or { :mbid => music brainz id }
|
167
|
+
# * Bandsintown::Artist object with :mbid or :name
|
168
|
+
# :datetime - use one of the following formats:
|
169
|
+
# * String in ISO-8601 format: '2010-06-01T19:30:00'
|
170
|
+
# * Any object that responds to strftime (Date/Time/DateTime)
|
171
|
+
# :venue - use one of the following formats:
|
172
|
+
# * Hash of { :id => bandsintown id } or location data (:name, :address, :city, :region, :postalcode, :country, :latitude, :longitude)
|
173
|
+
# * :name, :city, :region, :country are required for venues in the United States
|
174
|
+
# * :name, :city, :country are required for venues outside the United States
|
175
|
+
# * :latitude, :longitude, :address, and :postalcode are optional
|
176
|
+
# * Bandsintown::Venue object
|
177
|
+
# :on_sale_datetime - use the same formats as :datetime
|
178
|
+
# :ticket_url - string with a link to where you can buy tickets to the event
|
179
|
+
# :ticket_price - a number or string with ticket price
|
180
|
+
#
|
181
|
+
#===notes:
|
182
|
+
# * :artists, :datetime, and :venue are required, all other options are optional.
|
183
|
+
# * If :mbid and :name are available in an artist Hash or Bandsintown::Artist, :mbid is used first.
|
184
|
+
# * If :bandsintown_id and location data are given in a venue Hash or Bandsintown::Venue, :bandsintown_id is used first.
|
185
|
+
# * If you have a trusted app_id, this method will return a populated Bandsintown::Event object.
|
186
|
+
#
|
187
|
+
#===examples:
|
188
|
+
#Create an event for Evidence and Alchemist at House of Blues - San Diego on June 1st, 2010 using Bandsintown::Artists and Bandsintown::Venue:
|
189
|
+
# evidence = Bandsintown::Artist.new(:name => "Evidence")
|
190
|
+
# alchemist = Bandsintown::Artist.new(:name => "Alchemist")
|
191
|
+
# venue = Bandsintown::Venue.new(727861) # id for House of Blues - San Diego
|
192
|
+
# Bandsintown::Event.create(:artists => [evidence, alchemist], :venue => venue, :datetime => "2010-06-01T19:30:00")
|
193
|
+
# => "Event submitted successfully (pending approval)"
|
194
|
+
#
|
195
|
+
#Create an event for The Roots at Paradise Rock Club in Boston on June 1st, 2010 using artist name, venue location data, including full ticketing and price data:
|
196
|
+
# paradise = { :name => "Paradise Rock Club", :address => "967 Commonwealth Ave", :city => "Boston", :region => "MA", :country => "United States" }
|
197
|
+
# Bandsintown::Event.create(:artists => ["The Roots"], :venue => paradise, :datetime => Time.parse("2010-06-01 20:00"), :on_sale_datetime => Time.parse("2010-05-01 12:00"), :ticket_url => "http://www.example.com/tickets/123", :ticket_price => 19.5)
|
198
|
+
# => "Event submitted successfully (pending approval)"
|
199
|
+
#
|
200
|
+
#Create an event with a trusted app_id
|
201
|
+
# Bandsintown::Event.create(:artists => ["The Roots"], :datetime => Date.today, :venue => { :id => 123 })
|
202
|
+
# => Bandsintown::Event with populated attributes
|
203
|
+
#
|
204
|
+
def self.create(options = {})
|
205
|
+
event_data = {
|
206
|
+
:artists => self.parse_artists(options[:artists]),
|
207
|
+
:venue => self.parse_venue(options[:venue]),
|
208
|
+
:datetime => self.parse_datetime(options[:datetime]),
|
209
|
+
:on_sale_datetime => self.parse_datetime(options[:on_sale_datetime]),
|
210
|
+
:ticket_url => options[:ticket_url],
|
211
|
+
:ticket_price => options[:ticket_price]
|
212
|
+
}.reject { |k,v| v.blank? }
|
213
|
+
|
214
|
+
response = self.request_and_parse(:post, "create", :event => event_data)
|
215
|
+
|
216
|
+
if response.key?("message")
|
217
|
+
response["message"]
|
218
|
+
else
|
219
|
+
Bandsintown::Event.build_from_json(response["event"])
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
103
223
|
def self.resource_path
|
104
224
|
"events"
|
105
225
|
end
|
106
226
|
|
107
227
|
def self.build_from_json(json_hash)
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
228
|
+
returning Bandsintown::Event.new do |event|
|
229
|
+
event.bandsintown_id = json_hash["id"]
|
230
|
+
event.bandsintown_url = json_hash["url"]
|
231
|
+
event.datetime = Time.parse(json_hash["datetime"])
|
232
|
+
event.ticket_url = json_hash["ticket_url"]
|
233
|
+
event.status = json_hash["status"]
|
234
|
+
event.ticket_status = json_hash["ticket_status"]
|
235
|
+
event.on_sale_datetime = Time.parse(json_hash["on_sale_datetime"]) rescue nil
|
236
|
+
event.venue = Bandsintown::Venue.build_from_json(json_hash["venue"])
|
237
|
+
event.artists = json_hash["artists"].map { |artist| Bandsintown::Artist.new(artist.symbolize_keys) }
|
238
|
+
end
|
119
239
|
end
|
240
|
+
|
120
241
|
|
121
242
|
end
|
122
243
|
end
|
data/lib/bandsintown/venue.rb
CHANGED
@@ -1,18 +1,73 @@
|
|
1
1
|
module Bandsintown
|
2
2
|
class Venue < Base
|
3
|
+
attr_accessor :name, :bandsintown_id, :city, :region, :country, :latitude, :longitude, :events
|
3
4
|
|
4
|
-
|
5
|
+
#Note - address and postalcode are not returned in API responses, but they are accepted when passing venue data to Bandsintown::Event.create.
|
6
|
+
attr_accessor :address, :postalcode
|
5
7
|
|
6
|
-
def initialize(
|
7
|
-
@
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
def initialize(bandsintown_id)
|
9
|
+
@bandsintown_id = bandsintown_id
|
10
|
+
end
|
11
|
+
|
12
|
+
#Returns an array of Bandsintown::Event objects for each of the venues's upcoming events available through bandsintown.com.
|
13
|
+
#See http://www.bandsintown.com/api/requests#venues-events for more information.
|
14
|
+
#
|
15
|
+
#====example:
|
16
|
+
#
|
17
|
+
# # using Paradise Rock Club in Boston, MA (bandsintown id 1700)
|
18
|
+
# venue = Bandsintown::Venue.new(1700)
|
19
|
+
# upcoming_paradise_events = venue.events
|
20
|
+
#
|
21
|
+
def events
|
22
|
+
@events ||= self.class.request_and_parse(:get, "#{@bandsintown_id}/events").map { |event_hash| Bandsintown::Event.build_from_json(event_hash) }
|
23
|
+
end
|
16
24
|
|
25
|
+
#Returns an array of Bandsintown::Venue objects matching the options passed.
|
26
|
+
#See http://www.bandsintown.com/api/requests#venues-search for more information.
|
27
|
+
#====options:
|
28
|
+
# :query - a string to match the beginning of venue names
|
29
|
+
# :location - a string with one of the following formats:
|
30
|
+
# * 'city, state' for United States and Canada
|
31
|
+
# * 'city, country' for other countries
|
32
|
+
# * 'latitude,longitude'
|
33
|
+
# * ip address - will use the location of the passed ip address
|
34
|
+
# * 'use_geoip' - will use the location of the ip address that made the request
|
35
|
+
# :radius - a number in miles. API default is 25, maximum is 150.
|
36
|
+
# :per_page - number of results per response. Default is 5, maximum is 100.
|
37
|
+
# :page - offset for paginated results. API default is 1.
|
38
|
+
#
|
39
|
+
#====notes:
|
40
|
+
#:query is required for this request, all other arguments are optional.
|
41
|
+
#
|
42
|
+
#====examples:
|
43
|
+
#All venues (first page w/ 5 results) with name beginning with 'House of Blues':
|
44
|
+
# Bandsintown::Venue.search(:query => 'House of Blues')
|
45
|
+
#
|
46
|
+
#All venues (first page w/ 5 results) with name beginning with 'House of' within 25 miles of San Diego, CA:
|
47
|
+
# Bandsintown::Venue.search(:query => "House of", :location => "San Diego, CA")
|
48
|
+
#
|
49
|
+
#Second page of all venues near the request's ip address with name beginning with "Club" and 100 results per page:
|
50
|
+
# Bandsintown::Venue.search(:query => "Club", :per_page => 100, :page => 2, :location => "use_geoip")
|
51
|
+
#
|
52
|
+
def self.search(options = {})
|
53
|
+
self.request_and_parse(:get, "search", options).map { |venue_hash| Bandsintown::Venue.build_from_json(venue_hash) }
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.resource_path
|
57
|
+
"venues"
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.build_from_json(args={})
|
61
|
+
returning Bandsintown::Venue.new(args['id']) do |v|
|
62
|
+
v.name = args["name"]
|
63
|
+
v.bandsintown_url = args["url"]
|
64
|
+
v.bandsintown_id = args["id"]
|
65
|
+
v.region = args["region"]
|
66
|
+
v.city = args["city"]
|
67
|
+
v.country = args["country"]
|
68
|
+
v.latitude = args["latitude"]
|
69
|
+
v.longitude = args["longitude"]
|
70
|
+
end
|
71
|
+
end
|
17
72
|
end
|
18
73
|
end
|