songkickr 0.1.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/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +41 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/lib/songkickr.rb +35 -0
- data/lib/songkickr/artist.rb +10 -0
- data/lib/songkickr/concert_setlist_result.rb +32 -0
- data/lib/songkickr/event.rb +35 -0
- data/lib/songkickr/event_result.rb +29 -0
- data/lib/songkickr/location.rb +11 -0
- data/lib/songkickr/performance.rb +11 -0
- data/lib/songkickr/remote.rb +64 -0
- data/lib/songkickr/setlist.rb +27 -0
- data/lib/songkickr/setlist_item.rb +10 -0
- data/lib/songkickr/venue.rb +12 -0
- data/songkickr.gemspec +70 -0
- data/test/fixtures/events.json +1 -0
- data/test/fixtures/no_events.json +1 -0
- data/test/helper.rb +42 -0
- data/test/songkickr/test_artist.rb +21 -0
- data/test/songkickr/test_remote.rb +30 -0
- data/test/test_songkickr.rb +10 -0
- metadata +100 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Jared Mehle
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
= songkickr
|
2
|
+
|
3
|
+
A Ruby wrapper around the Songkick API. Visit www.songkick.com/developer for documentation on the Songkick API.
|
4
|
+
|
5
|
+
= Install Instructions
|
6
|
+
|
7
|
+
gem install songkickr
|
8
|
+
|
9
|
+
or if your environment requires
|
10
|
+
|
11
|
+
sudo gem install songkickr
|
12
|
+
|
13
|
+
= Usage Instructions
|
14
|
+
|
15
|
+
require 'songkickr'
|
16
|
+
remote = Songkickr::Remote.new API_KEY
|
17
|
+
|
18
|
+
Then call events, users_events(username), or concert_setlists(event_id)
|
19
|
+
|
20
|
+
results = remote.events(:artist_name => 'Iron Maiden')
|
21
|
+
results = remote.events(:artist_name => 'As I Lay Dying')
|
22
|
+
|
23
|
+
results = remote.users_events('jrmehle')
|
24
|
+
|
25
|
+
results = remote.concert_setlists(2680726)
|
26
|
+
results = remote.concert_setlists(2894471)
|
27
|
+
|
28
|
+
|
29
|
+
== Note on Patches/Pull Requests
|
30
|
+
|
31
|
+
* Fork the project.
|
32
|
+
* Make your feature addition or bug fix.
|
33
|
+
* Add tests for it. This is important so I don't break it in a
|
34
|
+
future version unintentionally.
|
35
|
+
* Commit, do not mess with rakefile, version, or history.
|
36
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
37
|
+
* Send me a pull request. Bonus points for topic branches.
|
38
|
+
|
39
|
+
== Copyright
|
40
|
+
|
41
|
+
Copyright (c) 2010 Jared Mehle. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "songkickr"
|
8
|
+
gem.summary = %Q{A Ruby wrapper around the Songkick API.}
|
9
|
+
gem.description = %Q{A Ruby wrapper around the Songkick API. Visit www.songkick.com/developer for documentation on the Songkick API. }
|
10
|
+
gem.email = "jrmehle@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/jrmehle/songkickr"
|
12
|
+
gem.authors = ["Jared Mehle"]
|
13
|
+
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
|
+
end
|
16
|
+
Jeweler::GemcutterTasks.new
|
17
|
+
rescue LoadError
|
18
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'rake/testtask'
|
22
|
+
Rake::TestTask.new(:test) do |test|
|
23
|
+
test.libs << 'lib' << 'test'
|
24
|
+
test.pattern = 'test/**/test_*.rb'
|
25
|
+
test.verbose = true
|
26
|
+
end
|
27
|
+
|
28
|
+
begin
|
29
|
+
require 'rcov/rcovtask'
|
30
|
+
Rcov::RcovTask.new do |test|
|
31
|
+
test.libs << 'test'
|
32
|
+
test.pattern = 'test/**/test_*.rb'
|
33
|
+
test.verbose = true
|
34
|
+
end
|
35
|
+
rescue LoadError
|
36
|
+
task :rcov do
|
37
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
task :test => :check_dependencies
|
42
|
+
|
43
|
+
task :default => :test
|
44
|
+
|
45
|
+
require 'rake/rdoctask'
|
46
|
+
Rake::RDocTask.new do |rdoc|
|
47
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
|
+
|
49
|
+
rdoc.rdoc_dir = 'rdoc'
|
50
|
+
rdoc.title = "songkickr #{version}"
|
51
|
+
rdoc.rdoc_files.include('README*')
|
52
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/lib/songkickr.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'httparty'
|
3
|
+
require 'httparty'
|
4
|
+
|
5
|
+
dir = File.dirname(__FILE__)
|
6
|
+
require dir + '/songkickr/performance'
|
7
|
+
require dir + '/songkickr/artist'
|
8
|
+
require dir + '/songkickr/location'
|
9
|
+
require dir + '/songkickr/venue'
|
10
|
+
require dir + '/songkickr/event'
|
11
|
+
require dir + '/songkickr/setlist_item'
|
12
|
+
require dir + '/songkickr/setlist'
|
13
|
+
require dir + '/songkickr/event_result'
|
14
|
+
require dir + '/songkickr/concert_setlist_result'
|
15
|
+
require dir + '/songkickr/remote'
|
16
|
+
|
17
|
+
class APIKeyNotSet < StandardError;
|
18
|
+
def to_s
|
19
|
+
'API key not set!'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Songkickr
|
24
|
+
|
25
|
+
# Get your API key from http://developer.songkick.com/
|
26
|
+
def self.api_key
|
27
|
+
raise APIKeyNotSet if @api_key.nil?
|
28
|
+
|
29
|
+
@api_key
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.api_key=(api_key)
|
33
|
+
@api_key = api_key
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Songkickr
|
2
|
+
class ConcertSetlistResult
|
3
|
+
attr_accessor :results
|
4
|
+
|
5
|
+
def initialize(result_hash = {})
|
6
|
+
|
7
|
+
if result_hash["resultsPage"]
|
8
|
+
results_page = result_hash["resultsPage"]
|
9
|
+
|
10
|
+
if results_page
|
11
|
+
@results = parse_results results_page["results"]
|
12
|
+
end
|
13
|
+
else
|
14
|
+
result_hash
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def parse_results(results = {})
|
22
|
+
setlists = []
|
23
|
+
if results.include?("setlist")
|
24
|
+
results["setlist"].each do |setlist|
|
25
|
+
setlists << Songkickr::Setlist.new(setlist)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
setlists
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Songkickr
|
2
|
+
class Event
|
3
|
+
attr_accessor :type, :display_name, :location, :start, :uri, :id, :lat, :lng, :performance, :status, :venue, :tickets_uri
|
4
|
+
|
5
|
+
def initialize(event_hash)
|
6
|
+
@type = event_hash["type"]
|
7
|
+
@location = Songkickr::Location.new event_hash["location"]
|
8
|
+
@status = event_hash["status"]
|
9
|
+
@display_name = event_hash["displayName"]
|
10
|
+
@venue = Songkickr::Venue.new event_hash["venue"]
|
11
|
+
@start = start_hash_to_datetime event_hash["start"]
|
12
|
+
@uri = event_hash["uri"]
|
13
|
+
@performance = parse_performance event_hash["performance"]
|
14
|
+
@id = event_hash["id"]
|
15
|
+
@tickets_uri = event_hash["ticketsUri"]
|
16
|
+
end
|
17
|
+
|
18
|
+
protected
|
19
|
+
|
20
|
+
def start_hash_to_datetime(start_hash)
|
21
|
+
datetime = DateTime.parse("#{start_hash["date"]} #{start_hash["time"]}")
|
22
|
+
end
|
23
|
+
|
24
|
+
def parse_performance(performance_array = nil)
|
25
|
+
performances = []
|
26
|
+
if performance_array
|
27
|
+
performance_array.each do |performance|
|
28
|
+
performances << Songkickr::Performance.new(performance)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
performances
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Songkickr
|
2
|
+
class EventResult
|
3
|
+
attr_accessor :page, :total_entries, :results
|
4
|
+
|
5
|
+
def initialize(result_hash = {})
|
6
|
+
results_page = result_hash["resultsPage"]
|
7
|
+
|
8
|
+
if results_page
|
9
|
+
@page = results_page["page"]
|
10
|
+
@total_entries = results_page["totalEntries"]
|
11
|
+
@results = parse_results results_page["results"]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def parse_results(results = {})
|
19
|
+
events = []
|
20
|
+
if results.include?("event")
|
21
|
+
results["event"].each do |event|
|
22
|
+
events << Songkickr::Event.new(event)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
events
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Songkickr
|
2
|
+
class Performance
|
3
|
+
attr_accessor :artist, :display_name, :id
|
4
|
+
|
5
|
+
def initialize(performance_hash)
|
6
|
+
@artist = Songkickr::Artist.new performance_hash["artist"]
|
7
|
+
@display_name = performance_hash["displayName"]
|
8
|
+
@id = performance_hash["id"]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Songkickr
|
2
|
+
class Remote
|
3
|
+
include HTTParty
|
4
|
+
base_uri 'api.songkick.com/api/3.0'
|
5
|
+
format :json
|
6
|
+
|
7
|
+
attr_reader :api_key
|
8
|
+
|
9
|
+
# Get your api_key found here http://developer.songkick.com
|
10
|
+
def initialize(api_key = nil)
|
11
|
+
@api_key = api_key
|
12
|
+
@api_key ||= Songkickr.api_key
|
13
|
+
|
14
|
+
self.class.default_params :apikey => @api_key
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
# Parameters - http://www.songkick.com/developer/event-search
|
19
|
+
#
|
20
|
+
# type (concert or festival)
|
21
|
+
# artists (events by any of the artists, comma-separated)
|
22
|
+
# artist_name
|
23
|
+
# artist_id
|
24
|
+
# venue_id
|
25
|
+
# setlist_item_name (name of a song which was played at the event – use with artist_id or artist_name)
|
26
|
+
# min_date
|
27
|
+
# max_date
|
28
|
+
# location - see the Songkick website for instructions on how to use the location parameter
|
29
|
+
|
30
|
+
def events(query = {})
|
31
|
+
result = self.class.get('/events.json', :query => query)
|
32
|
+
Songkickr::EventResult.new result
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
# Parameters - http://www.songkick.com/developer/events-for-user
|
37
|
+
#
|
38
|
+
# attendance (all, im_going, i_might_go) - defaults to im_going
|
39
|
+
# type (concert or festival)
|
40
|
+
# artists (events by any of the artists, comma-separated)
|
41
|
+
# artist_name
|
42
|
+
# artist_id
|
43
|
+
# venue_id
|
44
|
+
# setlist_item_name (name of a song which was played at the event – use with artist_id or artist_name)
|
45
|
+
# min_date
|
46
|
+
# max_date
|
47
|
+
# location - see the Songkick website for instructions on how to use the location parameter
|
48
|
+
|
49
|
+
def users_events(username, query = {})
|
50
|
+
result = self.class.get("/users/#{username}/events.json", :query => query)
|
51
|
+
Songkickr::EventResult.new result
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
# Parameters - http://www.songkick.com/developer/setlists
|
56
|
+
#
|
57
|
+
# event_id
|
58
|
+
|
59
|
+
def concert_setlists(event_id)
|
60
|
+
result = self.class.get("/events/#{event_id}/setlists.json")
|
61
|
+
Songkickr::ConcertSetlistResult.new result
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Songkickr
|
2
|
+
class Setlist
|
3
|
+
attr_accessor :event, :setlist_items, :artist, :playlist_uri, :display_name, :id
|
4
|
+
|
5
|
+
def initialize(setlist_hash)
|
6
|
+
@event = Songkickr::Event.new setlist_hash["event"]
|
7
|
+
@setlist_items = parse_setlist_items setlist_hash["setlistItem"]
|
8
|
+
@artist = Songkickr::Artist.new setlist_hash["artist"]
|
9
|
+
@playlist_uri = setlist_hash["playlistUri"]
|
10
|
+
@display_name = setlist_hash["displayName"]
|
11
|
+
@id = setlist_hash["id"]
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def parse_setlist_items(setlist_item_array = nil)
|
17
|
+
setlist_items = []
|
18
|
+
if setlist_item_array
|
19
|
+
setlist_item_array.each do |item|
|
20
|
+
setlist_items << Songkickr::SetlistItem.new(item)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
setlist_items
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/songkickr.gemspec
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{songkickr}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Jared Mehle"]
|
12
|
+
s.date = %q{2010-05-03}
|
13
|
+
s.description = %q{A Ruby wrapper around the Songkick API. Visit www.songkick.com/developer for documentation on the Songkick API. }
|
14
|
+
s.email = %q{jrmehle@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/songkickr.rb",
|
27
|
+
"lib/songkickr/artist.rb",
|
28
|
+
"lib/songkickr/concert_setlist_result.rb",
|
29
|
+
"lib/songkickr/event.rb",
|
30
|
+
"lib/songkickr/event_result.rb",
|
31
|
+
"lib/songkickr/location.rb",
|
32
|
+
"lib/songkickr/performance.rb",
|
33
|
+
"lib/songkickr/remote.rb",
|
34
|
+
"lib/songkickr/setlist.rb",
|
35
|
+
"lib/songkickr/setlist_item.rb",
|
36
|
+
"lib/songkickr/venue.rb",
|
37
|
+
"songkickr.gemspec",
|
38
|
+
"test/fixtures/events.json",
|
39
|
+
"test/fixtures/no_events.json",
|
40
|
+
"test/helper.rb",
|
41
|
+
"test/songkickr/test_artist.rb",
|
42
|
+
"test/songkickr/test_remote.rb",
|
43
|
+
"test/test_songkickr.rb"
|
44
|
+
]
|
45
|
+
s.homepage = %q{http://github.com/jrmehle/songkickr}
|
46
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
47
|
+
s.require_paths = ["lib"]
|
48
|
+
s.rubygems_version = %q{1.3.6}
|
49
|
+
s.summary = %q{A Ruby wrapper around the Songkick API.}
|
50
|
+
s.test_files = [
|
51
|
+
"test/helper.rb",
|
52
|
+
"test/songkickr/test_artist.rb",
|
53
|
+
"test/songkickr/test_remote.rb",
|
54
|
+
"test/test_songkickr.rb"
|
55
|
+
]
|
56
|
+
|
57
|
+
if s.respond_to? :specification_version then
|
58
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
59
|
+
s.specification_version = 3
|
60
|
+
|
61
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
62
|
+
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
63
|
+
else
|
64
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
65
|
+
end
|
66
|
+
else
|
67
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
{ "resultsPage": { "totalEntries": 20, "page": 1, "results": {"event": [{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760721\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-04-29"},"uri":"http:\/\/www.songkick.com\/concerts\/2760721?utm_source=791&utm_medium=partner","performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"displayName":"Taylor Swift","id":4881406},{"artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"displayName":"Kellie Pickler","id":4881411},{"artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"displayName":"Gloriana","id":4881416}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at Rupp Arena (April 29, 2010)","location":{"city":"Lexington, KY, US","lat":38.0408354,"lng":-84.4916265},"id":2760721,"venue":{"displayName":"Rupp Arena","lat":38.0408354,"id":974,"lng":-84.4916265}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760726\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-04-30"},"uri":"http:\/\/www.songkick.com\/concerts\/2760726?utm_source=791&utm_medium=partner","displayName":"Taylor Swift and Kellie Pickler with Gloriana at Colonial Life Arena (April 30, 2010)","performance":[{"displayName":"Taylor Swift","artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"id":4881421},{"displayName":"Kellie Pickler","artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"id":4881431},{"displayName":"Gloriana","artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"id":4881436}],"location":{"city":"Columbia, SC, US","lat":34.0171,"lng":-81.0108},"id":2760726,"venue":{"displayName":"Colonial Life Arena","lat":34.0171,"id":36928,"lng":-81.0108}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760741\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-05-01"},"uri":"http:\/\/www.songkick.com\/concerts\/2760741?utm_source=791&utm_medium=partner","performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"displayName":"Taylor Swift","id":4881456},{"artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"displayName":"Kellie Pickler","id":4881461},{"artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"displayName":"Gloriana","id":4881466}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at RBC Center (May 1, 2010)","location":{"city":"Raleigh, NC, US","lat":35.8188018798828,"lng":-78.6445999145508},"id":2760741,"venue":{"displayName":"RBC Center","lat":35.8188018798828,"id":4721,"lng":-78.6445999145508}},{"type":"Concert","location":{"lat":28.549316,"lng":-81.386592,"city":"Orlando, FL, US"},"ticketsUri":"http:\/\/www.songkick.com\/concerts\/4204676\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"date":"2010-05-05","time":"19:00:00"},"performance":[{"artist":{"displayName":"Kellie Pickler","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json","mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81"}]},"displayName":"Kellie Pickler","id":7555176},{"artist":{"displayName":"Taylor Swift","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json","mbid":"20244d07-534f-4eff-b4d4-930878889970"}]},"displayName":"Taylor Swift","id":7555546}],"displayName":"Kellie Pickler with Taylor Swift at Amway Arena (May 5, 2010)","uri":"http:\/\/www.songkick.com\/concerts\/4204676?utm_source=791&utm_medium=partner","id":4204676,"venue":{"lat":28.549316,"lng":-81.386592,"displayName":"Amway Arena","id":654}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760756\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-05-06"},"uri":"http:\/\/www.songkick.com\/concerts\/2760756?utm_source=791&utm_medium=partner","performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"displayName":"Taylor Swift","id":4881481},{"artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"displayName":"Kellie Pickler","id":4881491},{"artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"displayName":"Gloriana","id":4881496}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at Wells Fargo Arena (Iowa Events Center) (May 6, 2010)","location":{"city":"Des Moines, IA, US","lat":41.591056,"lng":-93.621474},"id":2760756,"venue":{"displayName":"Wells Fargo Arena (Iowa Events Center)","lat":41.591056,"id":5149,"lng":-93.621474}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760761\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-05-07"},"uri":"http:\/\/www.songkick.com\/concerts\/2760761?utm_source=791&utm_medium=partner","performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"displayName":"Taylor Swift","id":4881511},{"artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"displayName":"Kellie Pickler","id":4881516},{"artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"displayName":"Gloriana","id":4881521}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at Xcel Energy Center (May 7, 2010)","location":{"city":"St. Paul, MN, US","lat":44.9434054,"lng":-93.0971615},"id":2760761,"venue":{"displayName":"Xcel Energy Center","lat":44.9434054,"id":624,"lng":-93.0971615}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760776\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-05-08"},"uri":"http:\/\/www.songkick.com\/concerts\/2760776?utm_source=791&utm_medium=partner","displayName":"Taylor Swift and Kellie Pickler with Gloriana at i Wireless Center (May 8, 2010)","performance":[{"displayName":"Taylor Swift","artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"id":4881531},{"displayName":"Kellie Pickler","artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"id":4881536},{"displayName":"Gloriana","artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"id":4881541}],"location":{"city":"Moline, IL, US","lat":41.506808,"lng":-90.521539},"id":2760776,"venue":{"displayName":"i Wireless Center","lat":41.506808,"id":1549,"lng":-90.521539}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760786\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-05-12"},"uri":"http:\/\/www.songkick.com\/concerts\/2760786?utm_source=791&utm_medium=partner","displayName":"Taylor Swift and Kellie Pickler with Gloriana and Prudential Center Your Entertainment Subsciption at Prudential Center (May 12, 2010)","performance":[{"displayName":"Taylor Swift","artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"id":4881556},{"displayName":"Kellie Pickler","artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"id":4881561},{"displayName":"Gloriana","artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"id":4881566},{"displayName":"Prudential Center Your Entertainment Subsciption","artist":{"displayName":"Prudential Center Your Entertainment Subsciption","identifier":[]},"id":9440681}],"location":{"city":"Newark, NJ, US","lat":40.7352,"lng":-74.1849},"id":2760786,"venue":{"displayName":"Prudential Center","lat":40.7352,"id":706,"lng":-74.1849}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760796\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-05-13"},"uri":"http:\/\/www.songkick.com\/concerts\/2760796?utm_source=791&utm_medium=partner","performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"displayName":"Taylor Swift","id":4881571},{"artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"displayName":"Kellie Pickler","id":4881581},{"artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"displayName":"Gloriana","id":4881586}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at Prudential Center (May 13, 2010)","location":{"city":"Newark, NJ, US","lat":40.7352,"lng":-74.1849},"id":2760796,"venue":{"displayName":"Prudential Center","lat":40.7352,"id":706,"lng":-74.1849}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760811\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-05-14"},"uri":"http:\/\/www.songkick.com\/concerts\/2760811?utm_source=791&utm_medium=partner","performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"displayName":"Taylor Swift","id":4881596},{"artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"displayName":"Kellie Pickler","id":4881601},{"artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"displayName":"Gloriana","id":4881606}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at Nassau Veterans Memorial Coliseum (May 14, 2010)","location":{"city":"Long Island, NY, US","lat":40.634469,"lng":-73.7267135},"id":2760811,"venue":{"displayName":"Nassau Veterans Memorial Coliseum","lat":40.634469,"id":29217,"lng":-73.7267135}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760821\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-05-15"},"uri":"http:\/\/www.songkick.com\/concerts\/2760821?utm_source=791&utm_medium=partner","displayName":"Taylor Swift and Kellie Pickler with Gloriana at Nassau Veterans Memorial Coliseum (May 15, 2010)","performance":[{"displayName":"Taylor Swift","artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"id":4881616},{"displayName":"Kellie Pickler","artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"id":4881621},{"displayName":"Gloriana","artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"id":4881626}],"location":{"city":"Long Island, NY, US","lat":40.634469,"lng":-73.7267135},"id":2760821,"venue":{"displayName":"Nassau Veterans Memorial Coliseum","lat":40.634469,"id":29217,"lng":-73.7267135}},{"type":"Concert","location":{"lat":45.2959891,"lng":-75.9259642,"city":"Ottawa, ON, Canada"},"ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760836\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"date":"2010-05-20","time":"19:00:00"},"performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json","mbid":"20244d07-534f-4eff-b4d4-930878889970"}]},"displayName":"Taylor Swift","id":4881651},{"artist":{"displayName":"Kellie Pickler","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json","mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81"}]},"displayName":"Kellie Pickler","id":4881656},{"artist":{"displayName":"Gloriana","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json","mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14"},{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json","mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d"}]},"displayName":"Gloriana","id":4881661}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at ScotiaBank Place (May 20, 2010)","uri":"http:\/\/www.songkick.com\/concerts\/2760836?utm_source=791&utm_medium=partner","id":2760836,"venue":{"lat":45.2959891,"lng":-75.9259642,"displayName":"ScotiaBank Place ","id":30665}},{"type":"Concert","location":{"lat":43.6442321,"lng":-79.3783824,"city":"Toronto, ON, Canada"},"ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760846\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"date":"2010-05-21","time":"19:00:00"},"performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json","mbid":"20244d07-534f-4eff-b4d4-930878889970"}]},"displayName":"Taylor Swift","id":4881676},{"artist":{"displayName":"Kellie Pickler","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json","mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81"}]},"displayName":"Kellie Pickler","id":4881681},{"artist":{"displayName":"Gloriana","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json","mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14"},{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json","mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d"}]},"displayName":"Gloriana","id":4881686}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at Air Canada Centre (May 21, 2010)","uri":"http:\/\/www.songkick.com\/concerts\/2760846?utm_source=791&utm_medium=partner","id":2760846,"venue":{"lat":43.6442321,"lng":-79.3783824,"displayName":"Air Canada Centre","id":489}},{"type":"Concert","location":{"lat":43.6442321,"lng":-79.3783824,"city":"Toronto, ON, Canada"},"ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760856\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"date":"2010-05-22","time":"19:00:00"},"performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json","mbid":"20244d07-534f-4eff-b4d4-930878889970"}]},"displayName":"Taylor Swift","id":4881696},{"artist":{"displayName":"Kellie Pickler","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json","mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81"}]},"displayName":"Kellie Pickler","id":4881701},{"artist":{"displayName":"Gloriana","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json","mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14"},{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json","mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d"}]},"displayName":"Gloriana","id":4881706}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at Air Canada Centre (May 22, 2010)","uri":"http:\/\/www.songkick.com\/concerts\/2760856?utm_source=791&utm_medium=partner","id":2760856,"venue":{"lat":43.6442321,"lng":-79.3783824,"displayName":"Air Canada Centre","id":489}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760866\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-05-25"},"uri":"http:\/\/www.songkick.com\/concerts\/2760866?utm_source=791&utm_medium=partner","performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"displayName":"Taylor Swift","id":4881721},{"artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"displayName":"Kellie Pickler","id":4881726},{"artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"displayName":"Gloriana","id":4881731}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at Toyota Center - Tx (May 25, 2010)","location":{"city":"Houston, TX, US","lat":29.7629,"lng":-95.3832},"id":2760866,"venue":{"displayName":"Toyota Center - Tx","lat":29.7629,"id":752951,"lng":-95.3832}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760876\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-05-26"},"uri":"http:\/\/www.songkick.com\/concerts\/2760876?utm_source=791&utm_medium=partner","displayName":"Taylor Swift and Kellie Pickler with Gloriana at Toyota Center - Tx (May 26, 2010)","performance":[{"displayName":"Taylor Swift","artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"id":4881746},{"displayName":"Kellie Pickler","artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"id":4881751},{"displayName":"Gloriana","artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"id":4881756}],"location":{"city":"Houston, TX, US","lat":29.7629,"lng":-95.3832},"id":2760876,"venue":{"displayName":"Toyota Center - Tx","lat":29.7629,"id":752951,"lng":-95.3832}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760886\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"23:59:20","date":"2010-05-29"},"uri":"http:\/\/www.songkick.com\/concerts\/2760886?utm_source=791&utm_medium=partner","performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"displayName":"Taylor Swift","id":4881771},{"artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"displayName":"Kellie Pickler","id":4881776},{"artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"displayName":"Gloriana","id":4881781},{"artist":{"displayName":"Bayou Country Superfest 2","identifier":[]},"displayName":"Bayou Country Superfest 2","id":5139781},{"artist":{"displayName":"Day Package","identifier":[]},"displayName":"Day Package","id":5139786},{"artist":{"displayName":"Kenny Chesney","identifier":[{"mbid":"5dca4d22-d6c8-4e70-8ca1-4543e43353c7","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:5dca4d22-d6c8-4e70-8ca1-4543e43353c7.json"}]},"displayName":"Kenny Chesney","id":5229086},{"artist":{"displayName":"Bayou Country Superfest","identifier":[]},"displayName":"Bayou Country Superfest","id":5246736},{"artist":{"displayName":"Keith Urban","identifier":[{"mbid":"f45da029-7b00-4bf3-962c-0eeb20309cc4","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:f45da029-7b00-4bf3-962c-0eeb20309cc4.json"}]},"displayName":"Keith Urban","id":7554866},{"artist":{"displayName":"David Nail","identifier":[{"mbid":"a73662ac-647d-4ca4-b26d-162a0d5c5a8e","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:a73662ac-647d-4ca4-b26d-162a0d5c5a8e.json"}]},"displayName":"David Nail","id":8243511}],"displayName":"Bayou Country Superfest, Taylor Swift, Kellie Pickler, and Kenny Chesney at LSU Tiger Stadium (May 29, 2010)","location":{"city":"Baton Rouge, LA, US","lat":30.449311,"lng":-91.18823},"id":2760886,"venue":{"displayName":"LSU Tiger Stadium","lat":30.449311,"id":16008,"lng":-91.18823}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760896\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-06-02"},"uri":"http:\/\/www.songkick.com\/concerts\/2760896?utm_source=791&utm_medium=partner","performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"displayName":"Taylor Swift","id":4881801},{"artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"displayName":"Kellie Pickler","id":4881806},{"artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"displayName":"Gloriana","id":4881816}],"displayName":"Taylor Swift and Kellie Pickler with Gloriana at Verizon Center (June 2, 2010)","location":{"city":"Washington, DC, US","lat":38.897412,"lng":-77.020029},"id":2760896,"venue":{"displayName":"Verizon Center","lat":38.897412,"id":465,"lng":-77.020029}},{"type":"Concert","location":{"lat":42.0583,"lng":-71.25,"city":"Foxboro, MA, US"},"ticketsUri":null,"status":"ok","start":{"date":"2010-06-05","time":null},"performance":[{"artist":{"displayName":"Taylor Swift","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json","mbid":"20244d07-534f-4eff-b4d4-930878889970"}]},"displayName":"Taylor Swift","id":7853916},{"artist":{"displayName":"Kellie Pickler","identifier":[{"href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json","mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81"}]},"displayName":"Kellie Pickler","id":9289986}],"displayName":"Taylor Swift and Kellie Pickler at Gillette Stadium (June 5, 2010)","uri":"http:\/\/www.songkick.com\/concerts\/4371121?utm_source=791&utm_medium=partner","id":4371121,"venue":{"lat":42.0583,"lng":-71.25,"displayName":"Gillette Stadium","id":851486}},{"type":"Concert","ticketsUri":"http:\/\/www.songkick.com\/concerts\/2760906\/tickets?utm_source=791&utm_medium=partner","status":"ok","start":{"time":"19:00:00","date":"2010-06-05"},"uri":"http:\/\/www.songkick.com\/concerts\/2760906?utm_source=791&utm_medium=partner","displayName":"Taylor Swift with Kellie Pickler and Gloriana at Gillette Stadium (June 5, 2010)","performance":[{"displayName":"Taylor Swift","artist":{"displayName":"Taylor Swift","identifier":[{"mbid":"20244d07-534f-4eff-b4d4-930878889970","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:20244d07-534f-4eff-b4d4-930878889970.json"}]},"id":4881826},{"displayName":"Kellie Pickler","artist":{"displayName":"Kellie Pickler","identifier":[{"mbid":"4c567ed6-8bc9-447a-bbd5-1dce18e4ee81","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:4c567ed6-8bc9-447a-bbd5-1dce18e4ee81.json"}]},"id":4881831},{"displayName":"Gloriana","artist":{"displayName":"Gloriana","identifier":[{"mbid":"0f721370-ce34-456d-8c2a-a74f3f93fb14","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:0f721370-ce34-456d-8c2a-a74f3f93fb14.json"},{"mbid":"45ee3bf0-7ef7-4a87-81e3-a5867473b93d","href":"http:\/\/api.songkick.com\/api\/3.0\/artists\/mbid:45ee3bf0-7ef7-4a87-81e3-a5867473b93d.json"}]},"id":4881836}],"location":{"city":"Foxborough, MA, US","lat":42.09085,"lng":-71.264319},"id":2760906,"venue":{"displayName":"Gillette Stadium","lat":42.09085,"id":464,"lng":-71.264319}}]}, "perPage": 50}}
|
@@ -0,0 +1 @@
|
|
1
|
+
{ "resultsPage": { "totalEntries": 0, "page": 1, "results": {}, "perPage": 50}}
|
data/test/helper.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
require 'fakeweb'
|
5
|
+
|
6
|
+
FakeWeb.allow_net_connect = false
|
7
|
+
|
8
|
+
|
9
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
10
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
11
|
+
require 'songkickr'
|
12
|
+
|
13
|
+
class Test::Unit::TestCase
|
14
|
+
end
|
15
|
+
|
16
|
+
def songkick_url(url)
|
17
|
+
url =~ /^http/ ? url : "http://api.songkick.com/api/3.0#{url}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def fixture_file(filename)
|
21
|
+
return "" if filename == ""
|
22
|
+
file_path = File.expand_path(File.dirname(__FILE__) + "/fixtures/" + filename)
|
23
|
+
File.read(file_path)
|
24
|
+
end
|
25
|
+
|
26
|
+
def stub_get(url, filename, status = nil)
|
27
|
+
options = {:body => fixture_file(filename)}
|
28
|
+
options.merge!({:status => status}) unless status.nil?
|
29
|
+
FakeWeb.register_uri(:get, songkick_url(url), options)
|
30
|
+
end
|
31
|
+
|
32
|
+
def stub_post(url, filename)
|
33
|
+
FakeWeb.register_uri(:post, songkick_url(url), :body => fixture_file(filename))
|
34
|
+
end
|
35
|
+
|
36
|
+
def stub_put(url, filename)
|
37
|
+
FakeWeb.register_uri(:put, songkick_url(url), :body => fixture_file(filename))
|
38
|
+
end
|
39
|
+
|
40
|
+
def stub_delete(url, filename)
|
41
|
+
FakeWeb.register_uri(:delete, songkick_url(url), :body => fixture_file(filename))
|
42
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestArtist < Test::Unit::TestCase
|
4
|
+
context "Given a new Artist" do
|
5
|
+
setup do
|
6
|
+
@href = 'http://jrmehle.com/'
|
7
|
+
@display_name = 'Artist Name'
|
8
|
+
@artist = Songkickr::Artist.new({'href' => @href, 'displayName' => @display_name})
|
9
|
+
end
|
10
|
+
|
11
|
+
should "init href" do
|
12
|
+
assert_not_nil @artist
|
13
|
+
assert_equal @href, @artist.href
|
14
|
+
end
|
15
|
+
|
16
|
+
should "init display_name" do
|
17
|
+
assert_not_nil @artist
|
18
|
+
assert_equal @display_name, @artist.display_name
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestRemote < Test::Unit::TestCase
|
4
|
+
context "Given a remote with no api key" do
|
5
|
+
should "raise an APIKeyNotSet exception when created with no key" do
|
6
|
+
assert_raise APIKeyNotSet do
|
7
|
+
@remote = Songkickr::Remote.new
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# TODO: Fix this later
|
13
|
+
# context "Given a remote with an invalid api key" do
|
14
|
+
# setup do
|
15
|
+
# stub_get('http://api.songkick.com/api/3.0/events.json', 'events.json')
|
16
|
+
# @remote = Songkickr::Remote.new 'omgwtfbbq_fake_key'
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# should "generate a remote" do
|
20
|
+
# assert_not_nil @remote
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# should "generate nil results" do
|
24
|
+
# [nil, ':artist_name => ""', ':artist_name => "Madonna"'].each do |remote_params|
|
25
|
+
# assert_nil @remote.send(:events, remote_params).results
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
# end
|
29
|
+
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: songkickr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Jared Mehle
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-03 00:00:00 -05:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: thoughtbot-shoulda
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :development
|
31
|
+
version_requirements: *id001
|
32
|
+
description: "A Ruby wrapper around the Songkick API. Visit www.songkick.com/developer for documentation on the Songkick API. "
|
33
|
+
email: jrmehle@gmail.com
|
34
|
+
executables: []
|
35
|
+
|
36
|
+
extensions: []
|
37
|
+
|
38
|
+
extra_rdoc_files:
|
39
|
+
- LICENSE
|
40
|
+
- README.rdoc
|
41
|
+
files:
|
42
|
+
- .document
|
43
|
+
- .gitignore
|
44
|
+
- LICENSE
|
45
|
+
- README.rdoc
|
46
|
+
- Rakefile
|
47
|
+
- VERSION
|
48
|
+
- lib/songkickr.rb
|
49
|
+
- lib/songkickr/artist.rb
|
50
|
+
- lib/songkickr/concert_setlist_result.rb
|
51
|
+
- lib/songkickr/event.rb
|
52
|
+
- lib/songkickr/event_result.rb
|
53
|
+
- lib/songkickr/location.rb
|
54
|
+
- lib/songkickr/performance.rb
|
55
|
+
- lib/songkickr/remote.rb
|
56
|
+
- lib/songkickr/setlist.rb
|
57
|
+
- lib/songkickr/setlist_item.rb
|
58
|
+
- lib/songkickr/venue.rb
|
59
|
+
- songkickr.gemspec
|
60
|
+
- test/fixtures/events.json
|
61
|
+
- test/fixtures/no_events.json
|
62
|
+
- test/helper.rb
|
63
|
+
- test/songkickr/test_artist.rb
|
64
|
+
- test/songkickr/test_remote.rb
|
65
|
+
- test/test_songkickr.rb
|
66
|
+
has_rdoc: true
|
67
|
+
homepage: http://github.com/jrmehle/songkickr
|
68
|
+
licenses: []
|
69
|
+
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options:
|
72
|
+
- --charset=UTF-8
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
version: "0"
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
requirements: []
|
90
|
+
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 1.3.6
|
93
|
+
signing_key:
|
94
|
+
specification_version: 3
|
95
|
+
summary: A Ruby wrapper around the Songkick API.
|
96
|
+
test_files:
|
97
|
+
- test/helper.rb
|
98
|
+
- test/songkickr/test_artist.rb
|
99
|
+
- test/songkickr/test_remote.rb
|
100
|
+
- test/test_songkickr.rb
|