dada 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/README +7 -0
- data/lib/dada.rb +7 -0
- data/lib/dada/dada_result.rb +47 -0
- data/lib/dada/dada_results.rb +40 -0
- data/lib/dada/dada_searcher.rb +84 -0
- data/spec/dada_result_spec.rb +45 -0
- data/spec/dada_results_spec.rb +38 -0
- data/spec/dada_searcher_spec.rb +79 -0
- data/spec/spec_helper.rb +2 -0
- metadata +62 -0
data/CHANGELOG
ADDED
data/README
ADDED
data/lib/dada.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
module Dada
|
2
|
+
class DadaResult
|
3
|
+
def initialize(xml)
|
4
|
+
@xml = xml
|
5
|
+
@result = xml
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :xml
|
9
|
+
|
10
|
+
def content_id
|
11
|
+
@result.elements['contentId'].text
|
12
|
+
end
|
13
|
+
|
14
|
+
def title
|
15
|
+
@result.elements['title'].text
|
16
|
+
end
|
17
|
+
|
18
|
+
def artist_id
|
19
|
+
@result.elements['artistId'].text
|
20
|
+
end
|
21
|
+
|
22
|
+
def artist
|
23
|
+
@result.elements['artist'].text
|
24
|
+
end
|
25
|
+
|
26
|
+
def artist_url
|
27
|
+
@result.elements['artisturl'].text
|
28
|
+
end
|
29
|
+
|
30
|
+
def landing_page_artist_url
|
31
|
+
@result.elements['landingpageartisturl'].text
|
32
|
+
end
|
33
|
+
|
34
|
+
def landing_page_content_url
|
35
|
+
@result.elements['landingpagecontenturl'].text
|
36
|
+
end
|
37
|
+
|
38
|
+
def preview_url
|
39
|
+
@result.elements['previewURL'].text
|
40
|
+
end
|
41
|
+
|
42
|
+
def image_medium_url
|
43
|
+
@result.elements['imageMediumURL'].text
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Dada
|
2
|
+
class DadaResults < Array
|
3
|
+
# Returns a ruby representation of dada search results.
|
4
|
+
def initialize(xml)
|
5
|
+
@xml = xml
|
6
|
+
doc = REXML::Document.new(xml)
|
7
|
+
@response = doc.root
|
8
|
+
@results = []
|
9
|
+
@response.elements.each('results/result') do |result|
|
10
|
+
self << DadaResult.new(result)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader :xml
|
15
|
+
|
16
|
+
def artist
|
17
|
+
@response.elements['searchRequest/artist'].text
|
18
|
+
end
|
19
|
+
|
20
|
+
def query_duration
|
21
|
+
@response.elements['searchRequest/queryDuration'].text.to_f
|
22
|
+
end
|
23
|
+
|
24
|
+
def url_path
|
25
|
+
@response.elements['searchRequest/urlPath'].text
|
26
|
+
end
|
27
|
+
|
28
|
+
def content_types
|
29
|
+
@response.elements['searchRequest/contentTypes'].text.split('|')
|
30
|
+
end
|
31
|
+
|
32
|
+
def total_result_count
|
33
|
+
@response.elements['searchRequest/totalResultCount'].text.to_i
|
34
|
+
end
|
35
|
+
|
36
|
+
def status
|
37
|
+
@response.elements['status'].text
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module Dada
|
2
|
+
class DadaSearcher
|
3
|
+
# Returns a new DadaSearcher object, with the specified api key, and optional partner key
|
4
|
+
def initialize(api_key, partner_key = nil)
|
5
|
+
@api_key = api_key
|
6
|
+
@partner_key = partner_key
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_accessor :partner_key, :api_key
|
10
|
+
|
11
|
+
# Builds the url needed to make the api request.
|
12
|
+
def build_url(opts)
|
13
|
+
opts = setup_opts(opts)
|
14
|
+
url = URI.parse('http://api.dada-ent.com/')
|
15
|
+
url +=
|
16
|
+
if opts[:artist] and opts[:title]
|
17
|
+
"/search/artist/#{opts[:artist]}/title/#{opts[:title]}/"
|
18
|
+
elsif opts[:artist]
|
19
|
+
"/search/artist/#{opts[:artist]}/"
|
20
|
+
elsif opts[:title]
|
21
|
+
"/search/title/#{opts[:title]}/"
|
22
|
+
elsif opts[:keywords]
|
23
|
+
"/keywords/#{opts[:keywords].join('+')}/"
|
24
|
+
elsif opts[:category]
|
25
|
+
"/chart/category/#{opts[:category]}/"
|
26
|
+
end
|
27
|
+
url += "contenttypes/#{opts[:content_types].join('%7C')}/" if opts[:content_types]
|
28
|
+
url += "numresults/#{opts[:num_results]}/" if opts[:num_results]
|
29
|
+
url += "start/#{opts[:start]}/" if opts[:start]
|
30
|
+
url += "partner/#{opts[:partner_key]}/" if opts[:partner_key]
|
31
|
+
|
32
|
+
url
|
33
|
+
end
|
34
|
+
|
35
|
+
# Searches the Dada network for ringtones.
|
36
|
+
#
|
37
|
+
# Options are:
|
38
|
+
# * :artist - a musical artist
|
39
|
+
# * :title - title of a song
|
40
|
+
# * :keywords - an array of keywords to use
|
41
|
+
# * :category - the musical category the ringtone would be under
|
42
|
+
# * :content_types - an array of content types to search for (mp3, real, etc)
|
43
|
+
# * :num_results - the number of results you would like to receive
|
44
|
+
# * :start - the start index of the results
|
45
|
+
# * :partner_key - your partner key
|
46
|
+
#
|
47
|
+
# Examples:
|
48
|
+
# searcher = DadaSearcher.new('my-api-key')
|
49
|
+
#
|
50
|
+
# # find all ringtones with justin timberlake songs
|
51
|
+
# searcher.search(:artist => 'justin timberlake')
|
52
|
+
#
|
53
|
+
# # find the ringtone for justin timberlake's song "rock your body"
|
54
|
+
# searcher.search(:artist => 'justin timberlake', :title => 'Rock Your Body')
|
55
|
+
#
|
56
|
+
# # find the ringtones for the top rock songs on the chart
|
57
|
+
# searcher.search(:category => 'rock')
|
58
|
+
#
|
59
|
+
# # find all real and mp3 ringtones by justin timberlake
|
60
|
+
# searcher.search(:artist => 'justin timberlake', :content_types => ['real', 'mp3'])
|
61
|
+
def search(opts)
|
62
|
+
url = build_url(opts)
|
63
|
+
response = Net::HTTP.start(url.host) do |http|
|
64
|
+
http.get(url.path, 'API-Key' => @api_key)
|
65
|
+
end
|
66
|
+
|
67
|
+
DadaResults.new(response.body)
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
# Sets up the options for use by the url builder
|
73
|
+
def setup_opts(opts)
|
74
|
+
opts[:partner_key] ||= @partner_key if @partner_key
|
75
|
+
opts.each do |key, value|
|
76
|
+
if key == :keywords or key == :content_types
|
77
|
+
opts[key] = value.map { |x| CGI::escape(x) }
|
78
|
+
else
|
79
|
+
opts[key] = CGI::escape(value)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
include Dada
|
3
|
+
|
4
|
+
describe DadaResult do
|
5
|
+
setup do
|
6
|
+
xml = File.read("spec/chris_brown.xml")
|
7
|
+
@result = DadaResults.new(xml).first
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should have the correct content id" do
|
11
|
+
@result.content_id.should == '90563'
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should have the correct artist id" do
|
15
|
+
@result.artist_id.should == '430'
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should have the correct title" do
|
19
|
+
@result.title.should == 'Take You Down'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should have the correct artist" do
|
23
|
+
@result.artist.should == 'Chris Brown'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should have the correct artist url" do
|
27
|
+
@result.artist_url.should == 'http://us.dada.net/music/chrisbrown/'
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should have the correct landing page artist url" do
|
31
|
+
@result.landing_page_artist_url.should == 'http://us.sso.dada.net/landing.php?artist=Chris+Brown&partner=XXX&artisturl=http://us.dada.net/music/chrisbrown/'
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should have the correct landing page content url" do
|
35
|
+
@result.landing_page_content_url.should == 'http://us.sso.dada.net/landing.php?artist=Chris+Brown&partner=XXX&contentID=90563&artisturl=http://us.dada.net/music/chrisbrown/'
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should have the correct image (medium) url" do
|
39
|
+
@result.image_medium_url.should == 'http://preview.dada.net/mobi/9/0/5/90563/90563_m.gif'
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should have the correct mp3 preview url" do
|
43
|
+
@result.preview_url.should == 'http://preview.dada.net/mobi/9/0/5/90563/90563_20.mp3'
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
include Dada
|
3
|
+
|
4
|
+
describe DadaResults do
|
5
|
+
setup do
|
6
|
+
xml = File.read("spec/chris_brown.xml")
|
7
|
+
@results = DadaResults.new(xml)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should have the correct artist" do
|
11
|
+
@results.artist.should == 'chris brown'
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should have the correct status" do
|
15
|
+
@results.status.should == 'success'
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should have the correct query duration" do
|
19
|
+
@results.query_duration.should == 0.0037
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should have the correct url path" do
|
23
|
+
@results.url_path.should == '/search/artist/chris brown/contenttypes/mp3|real/'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should have the correct content types" do
|
27
|
+
@results.content_types.should == ['mp3', 'real']
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should have the correct total result count" do
|
31
|
+
@results.total_result_count.should == 10
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should have the same number of results as specified" do
|
35
|
+
@results.total_result_count.should == @results.size
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
include Dada
|
3
|
+
|
4
|
+
describe DadaSearcher do
|
5
|
+
setup do
|
6
|
+
@dada = DadaSearcher.new('')
|
7
|
+
end
|
8
|
+
describe "building urls" do
|
9
|
+
it "should work with an artist" do
|
10
|
+
@dada.build_url(:artist => 'justin timberlake').to_s.should ==
|
11
|
+
'http://api.dada-ent.com/search/artist/justin+timberlake/'
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should work with an artist and title" do
|
15
|
+
@dada.build_url(:artist => 'justin timberlake', :title => 'cry me a river').to_s.should ==
|
16
|
+
'http://api.dada-ent.com/search/artist/justin+timberlake/title/cry+me+a+river/'
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should work with a title" do
|
20
|
+
@dada.build_url(:title => 'cry me a river').to_s.should ==
|
21
|
+
'http://api.dada-ent.com/search/title/cry+me+a+river/'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should work with a single keyword" do
|
25
|
+
@dada.build_url(:keywords => ['justin']).to_s.should ==
|
26
|
+
'http://api.dada-ent.com/keywords/justin/'
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should work with multiple keywords" do
|
30
|
+
@dada.build_url(:keywords => %w{justin timberlake}).to_s.should ==
|
31
|
+
'http://api.dada-ent.com/keywords/justin+timberlake/'
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should work with categories" do
|
35
|
+
@dada.build_url(:category => 'rock').to_s.should ==
|
36
|
+
'http://api.dada-ent.com/chart/category/rock/'
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should work with a single content type" do
|
40
|
+
@dada.build_url(:artist => 'justin timberlake', :content_types => ['mp3']).to_s.should ==
|
41
|
+
'http://api.dada-ent.com/search/artist/justin+timberlake/contenttypes/mp3/'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should work with multiple content types" do
|
45
|
+
@dada.build_url(:artist => 'justin timberlake', :content_types => ['mp3', 'real']).to_s.should ==
|
46
|
+
'http://api.dada-ent.com/search/artist/justin+timberlake/contenttypes/mp3%7Creal/'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should work with a start index" do
|
50
|
+
@dada.build_url(:artist => 'justin timberlake', :start => '5').to_s.should ==
|
51
|
+
'http://api.dada-ent.com/search/artist/justin+timberlake/start/5/'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should work with a specified number of results" do
|
55
|
+
@dada.build_url(:artist => 'justin timberlake', :num_results => '5').to_s.should ==
|
56
|
+
'http://api.dada-ent.com/search/artist/justin+timberlake/numresults/5/'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should work with a specified number of results and a start index" do
|
60
|
+
|
61
|
+
@dada.build_url(:artist => 'justin timberlake', :num_results => '5', :start => '10').to_s.should ==
|
62
|
+
'http://api.dada-ent.com/search/artist/justin+timberlake/numresults/5/start/10/'
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should work with a specified partner id" do
|
66
|
+
@dada.build_url(:artist => 'justin timberlake', :partner_key => '12345').to_s.should ==
|
67
|
+
'http://api.dada-ent.com/search/artist/justin+timberlake/partner/12345/'
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should override the partner key if specified" do
|
71
|
+
@dada.partner_key = '54321'
|
72
|
+
@dada.build_url(:artist => 'justin timberlake').to_s.should ==
|
73
|
+
'http://api.dada-ent.com/search/artist/justin+timberlake/partner/54321/'
|
74
|
+
@dada.build_url(:artist => 'justin timberlake', :partner_key => '12345').to_s.should ==
|
75
|
+
'http://api.dada-ent.com/search/artist/justin+timberlake/partner/12345/'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dada
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Edward Waller
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-05-24 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email:
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- lib/dada/dada_result.rb
|
26
|
+
- lib/dada/dada_results.rb
|
27
|
+
- lib/dada/dada_searcher.rb
|
28
|
+
- lib/dada.rb
|
29
|
+
- spec/dada_result_spec.rb
|
30
|
+
- spec/dada_results_spec.rb
|
31
|
+
- spec/dada_searcher_spec.rb
|
32
|
+
- spec/spec_helper.rb
|
33
|
+
- README
|
34
|
+
- CHANGELOG
|
35
|
+
has_rdoc: true
|
36
|
+
homepage: http://wallerdev.com/
|
37
|
+
post_install_message:
|
38
|
+
rdoc_options: []
|
39
|
+
|
40
|
+
require_paths:
|
41
|
+
- lib
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
version:
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: "0"
|
53
|
+
version:
|
54
|
+
requirements: []
|
55
|
+
|
56
|
+
rubyforge_project: dada
|
57
|
+
rubygems_version: 1.0.1
|
58
|
+
signing_key:
|
59
|
+
specification_version: 2
|
60
|
+
summary: A library for interfacing with the Dada Entertainment API.
|
61
|
+
test_files: []
|
62
|
+
|