Skip to content

Commit 03f2a79

Browse files
committed
Initial Commit
0 parents  commit 03f2a79

30 files changed

Lines changed: 6734 additions & 0 deletions

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.ruby-version
2+
Gemfile.lock

Gemfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
source 'https://rubygems.org'
2+
3+
# Specify your gem's dependencies in benzinator.gemspec
4+
gemspec

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
Ruby SDK for the Ticketmaster Open Platform (http://developer.ticketmaster.com/).
2+
3+
Wraps the Ticketmaster API in easy to access functions.
4+
5+
#### WIP Currently Covers:
6+
1. **Discovery**
7+
1. Search Events
8+
2. Search Attractions
9+
3. Search Classifications
10+
4. Search Venues
11+
5. Get Events
12+
6. Get Event's Images
13+
7. Get Attractions
14+
8. Get Classification
15+
9. Get Venue
16+
17+
#### Example:
18+
```
19+
require 'ticketmaster'
20+
21+
client = Ticketmaster.client(apikey: 'YOUR API KEY')
22+
response = client.search_events
23+
event = response.results.first
24+
event.get_images
25+
```

lib/ticketmaster.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require_relative 'ticketmaster/client'
2+
require_relative 'ticketmaster/request'
3+
require_relative 'ticketmaster/result'
4+
require_relative 'ticketmaster/results/search'
5+
require_relative 'ticketmaster/results/event'
6+
require_relative 'ticketmaster/results/image'
7+
require_relative 'ticketmaster/results/venue'
8+
require_relative 'ticketmaster/results/classification'
9+
require_relative 'ticketmaster/results/attraction'
10+
11+
module Ticketmaster
12+
def self.client(options={})
13+
Ticketmaster::Client.new(options)
14+
end
15+
end

lib/ticketmaster/client.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module Ticketmaster
2+
class Client
3+
require_relative 'clients/discovery'
4+
include Ticketmaster::Client::Discovery
5+
6+
attr_accessor :apikey
7+
8+
def initialize(options={})
9+
self.apikey = options[:apikey]
10+
end
11+
end
12+
end
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
module Ticketmaster
2+
class Client
3+
module Discovery
4+
def search_events(options={})
5+
options[:version] ||= 'v2'
6+
options[:params] ||= {}
7+
8+
request = Request.new("discovery/#{options[:version]}/events", options[:params], self)
9+
response = request.get
10+
Result.search(response, request, 'events')
11+
end
12+
13+
def get_event(id, options={})
14+
options[:version] ||= 'v2'
15+
16+
request = Request.new("discovery/#{options[:version]}/events/#{id}", {}, self)
17+
response = request.get
18+
Result.create(response, request, 'Ticketmaster::Event')
19+
end
20+
21+
def get_event_images(id, options={})
22+
options[:version] ||= 'v2'
23+
24+
request = Request.new("discovery/#{options[:version]}/events/#{id}/images", {}, self)
25+
response = request.get
26+
Result.array(response['images'], request, 'Ticketmaster::Image')
27+
end
28+
29+
def search_attractions(options={})
30+
options[:version] ||= 'v2'
31+
options[:params] ||= {}
32+
33+
request = Request.new("discovery/#{options[:version]}/attractions", options[:params], self)
34+
response = request.get
35+
Result.search(response, request, 'attractions')
36+
end
37+
38+
def get_attraction(id, options={})
39+
options[:version] ||= 'v2'
40+
41+
request = Request.new("discovery/#{options[:version]}/attractions/#{id}", {}, self)
42+
response = request.get
43+
Result.create(response, request, 'Ticketmaster::Attraction')
44+
end
45+
46+
def search_classifications(options={})
47+
options[:version] ||= 'v2'
48+
options[:params] ||= {}
49+
50+
request = Request.new("discovery/#{options[:version]}/classifications", options[:params], self)
51+
response = request.get
52+
Result.search(response, request, 'classifications')
53+
end
54+
55+
def get_classification(id, options={})
56+
options[:version] ||= 'v2'
57+
58+
request = Request.new("discovery/#{options[:version]}/classifications/#{id}", {}, self)
59+
response = request.get
60+
Result.create(response, request, 'Ticketmaster::Classification')
61+
end
62+
63+
def search_venues(options={})
64+
options[:version] ||= 'v2'
65+
options[:params] ||= {}
66+
67+
request = Request.new("discovery/#{options[:version]}/venues", options[:params], self)
68+
response = request.get
69+
Result.search(response, request, 'venues')
70+
end
71+
72+
def get_venue(id, options={})
73+
options[:version] ||= 'v2'
74+
75+
request = Request.new("discovery/#{options[:version]}/venues/#{id}", {}, self)
76+
response = request.get
77+
Result.create(response, request, 'Ticketmaster::Venue')
78+
end
79+
end
80+
end
81+
end

lib/ticketmaster/configuration.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
module Ticketmaster
2+
module Configuration
3+
PERMITTED_PARAMS = [
4+
:keyword,
5+
:attractionId,
6+
:venueId,
7+
:promoterId,
8+
:postalCode,
9+
:latlong,
10+
:radius,
11+
:unit,
12+
:source,
13+
:locale,
14+
:marketId,
15+
:startDateTime,
16+
:endDateTime,
17+
:includeTBA,
18+
:includeTBD,
19+
:includeTest,
20+
:sort,
21+
:onsaleStartDateTime,
22+
:onsaleEndDateTime,
23+
:size,
24+
:page,
25+
:apikey
26+
]
27+
end
28+
end

lib/ticketmaster/request.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
require 'faraday'
2+
require 'json'
3+
require_relative 'configuration'
4+
5+
module Ticketmaster
6+
class Request
7+
include Configuration
8+
9+
attr_accessor :path, :params, :client, :method
10+
11+
def initialize(path, params, client)
12+
self.path = path
13+
self.params = params
14+
self.client = client
15+
end
16+
17+
def get
18+
conn = Faraday.new(:url => 'https://app.ticketmaster.com')
19+
response = conn.get path, formatted_params
20+
JSON.parse(response.body)
21+
end
22+
23+
private
24+
25+
def formatted_params
26+
params.delete_if {|key, value| !PERMITTED_PARAMS.include? key }
27+
params[:apikey] ||= client.apikey
28+
params[:format] = 'json'
29+
params
30+
end
31+
end
32+
end
33+

lib/ticketmaster/result.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
module Ticketmaster
2+
class Result
3+
attr_accessor :data, :request
4+
5+
def initialize(data, request)
6+
self.data = data
7+
self.request = request
8+
end
9+
10+
def self.create(data, request, type)
11+
Object.const_get(type).new(data, request)
12+
end
13+
14+
def self.search(data, request, type)
15+
result = Ticketmaster::Search.new(data, request)
16+
result.type = type
17+
result
18+
end
19+
20+
def self.array(data, request, type)
21+
return [] if data.nil? || data.empty?
22+
results = data.map do |item|
23+
Object.const_get(type).new(item, request)
24+
end
25+
end
26+
end
27+
end
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module Ticketmaster
2+
class Attraction < Result
3+
def id
4+
data['id']
5+
end
6+
7+
def name
8+
data['name']
9+
end
10+
11+
def type
12+
data['type']
13+
end
14+
15+
def url
16+
data['url']
17+
end
18+
19+
def locale
20+
data['locale']
21+
end
22+
23+
def images
24+
images = Result.array(data['images'], request, 'Ticketmaster::Image')
25+
end
26+
27+
def classifications
28+
Result.array(data['classifications'], request, 'Ticketmaster::Classification')
29+
end
30+
31+
def reload
32+
data = request.client.get_attraction(id).data
33+
self
34+
end
35+
end
36+
end

0 commit comments

Comments
 (0)