kanye 0.1.1 → 0.1.2
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/Gemfile +1 -0
- data/History +3 -0
- data/README.rdoc +7 -1
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/bin/kanye +23 -3
- data/kanye.gemspec +15 -3
- data/lib/kanye.rb +11 -55
- data/lib/kanye/history.rb +13 -11
- data/lib/kanye/itunes.rb +28 -0
- data/lib/kanye/page.rb +57 -0
- data/lib/kanye/track.rb +41 -37
- data/spec/data/sample.html +36 -36
- data/spec/data/super.mp3 +0 -0
- data/spec/kanye/itunes_spec.rb +46 -0
- data/spec/kanye/track_spec.rb +5 -5
- data/spec/kanye_spec.rb +3 -3
- metadata +57 -19
data/Gemfile
CHANGED
data/History
ADDED
data/README.rdoc
CHANGED
@@ -13,6 +13,12 @@ The first time you run +kanye+, it will ask you for your user name.
|
|
13
13
|
It appears Kanye hasn't been configured yet.
|
14
14
|
What is your hype user name?
|
15
15
|
|
16
|
-
This will output to
|
16
|
+
This will output options to <tt>~/.kanye_rc</tt>. Your downloads will now begin.
|
17
17
|
|
18
18
|
Now that you've configured it, just run +kanye+ any time to go over your latest favorites.
|
19
|
+
|
20
|
+
== iTunes integration
|
21
|
+
|
22
|
+
By adding the following to your <tt>~/.kanye_rc</tt> file, Kanye will add tracks to your iTunes library and add them to a playlist named for the current month and year (ie."June 2011")
|
23
|
+
|
24
|
+
playlist: true
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ Jeweler::Tasks.new do |gem|
|
|
15
15
|
gem.name = "kanye"
|
16
16
|
gem.homepage = "http://github.com/samvincent/kanye"
|
17
17
|
gem.license = "MIT"
|
18
|
-
gem.summary = %Q{Ruby
|
18
|
+
gem.summary = %Q{Ruby H-Y-P-E utility}
|
19
19
|
gem.description = %Q{Lyrical genius, voice of a generation.}
|
20
20
|
gem.email = "sam.vincent@mac.com"
|
21
21
|
gem.authors = ["Sam Vincent"]
|
@@ -25,6 +25,7 @@ Jeweler::Tasks.new do |gem|
|
|
25
25
|
gem.add_runtime_dependency 'sqlite3'
|
26
26
|
gem.add_runtime_dependency 'nokogiri', '> 1.4.0'
|
27
27
|
gem.add_runtime_dependency 'ruby-mp3info', '0.6.14'
|
28
|
+
gem.add_runtime_dependency 'rb-appscript', '0.6.1'
|
28
29
|
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
29
30
|
end
|
30
31
|
Jeweler::RubygemsDotOrgTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/bin/kanye
CHANGED
@@ -4,6 +4,9 @@ $:.unshift(File.join(File.dirname(__FILE__), "/../lib"))
|
|
4
4
|
require 'rubygems'
|
5
5
|
require 'kanye'
|
6
6
|
|
7
|
+
require 'shellwords'
|
8
|
+
include Shellwords
|
9
|
+
|
7
10
|
KANYE_GLASSES = <<-GLASSES
|
8
11
|
|
9
12
|
..:ccCCO888@@@@@@@@@@@@@@@@@@@@@@88Coc:
|
@@ -56,13 +59,14 @@ if File.exist?(Kanye::DEFAULT_CONFIGURATION_PATH)
|
|
56
59
|
config = load_configuration(Kanye::DEFAULT_CONFIGURATION_PATH)
|
57
60
|
else
|
58
61
|
puts "It appears Kanye doesn't know who you are yet."
|
59
|
-
print "What is your
|
62
|
+
print "What is your h-y-p-e name?"
|
60
63
|
name = gets.chomp
|
61
64
|
File.open(Kanye::DEFAULT_CONFIGURATION_PATH, "w") do |f|
|
62
65
|
f.write "username: #{name}\n"
|
63
66
|
f.write "pages: 5\n"
|
64
67
|
f.write "path: #{Kanye::DEFAULT_DOWNLOAD_PATH}\n"
|
65
68
|
f.write "db: #{Kanye::DEFAULT_DB_PATH}\n"
|
69
|
+
f.write "playlist: false\n"
|
66
70
|
end
|
67
71
|
config = load_configuration(Kanye::DEFAULT_CONFIGURATION_PATH)
|
68
72
|
end
|
@@ -81,8 +85,24 @@ unless File.exists? config["db"]
|
|
81
85
|
end
|
82
86
|
|
83
87
|
# Grab as many pages as configured
|
88
|
+
pages = []
|
84
89
|
(1..(config["pages"])).each do |page|
|
85
90
|
user = config["username"]
|
86
|
-
|
87
|
-
|
91
|
+
page = Kanye::Page.new(user, page)
|
92
|
+
pages << page
|
93
|
+
|
94
|
+
page.download_all!
|
95
|
+
end
|
96
|
+
|
97
|
+
if config["playlist"].to_s == "true"
|
98
|
+
itunes = Kanye::ITunes.new
|
99
|
+
pages.reverse.each do |page|
|
100
|
+
page.tracks.reverse.each do |track|
|
101
|
+
begin
|
102
|
+
itunes.add_to_playlist track.filename, Time.now.strftime("%B %Y")
|
103
|
+
`mv #{shellescape track.filename} ~/.Trash`
|
104
|
+
rescue MacTypes::FileNotFoundError
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
88
108
|
end
|
data/kanye.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{kanye}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Sam Vincent"]
|
12
|
-
s.date = %q{2011-06-
|
12
|
+
s.date = %q{2011-06-30}
|
13
13
|
s.default_executable = %q{kanye}
|
14
14
|
s.description = %q{Lyrical genius, voice of a generation.}
|
15
15
|
s.email = %q{sam.vincent@mac.com}
|
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.files = [
|
22
22
|
".document",
|
23
23
|
"Gemfile",
|
24
|
+
"History",
|
24
25
|
"LICENSE.txt",
|
25
26
|
"README.rdoc",
|
26
27
|
"Rakefile",
|
@@ -29,8 +30,12 @@ Gem::Specification.new do |s|
|
|
29
30
|
"kanye.gemspec",
|
30
31
|
"lib/kanye.rb",
|
31
32
|
"lib/kanye/history.rb",
|
33
|
+
"lib/kanye/itunes.rb",
|
34
|
+
"lib/kanye/page.rb",
|
32
35
|
"lib/kanye/track.rb",
|
33
36
|
"spec/data/sample.html",
|
37
|
+
"spec/data/super.mp3",
|
38
|
+
"spec/kanye/itunes_spec.rb",
|
34
39
|
"spec/kanye/track_spec.rb",
|
35
40
|
"spec/kanye_spec.rb",
|
36
41
|
"spec/spec_helper.rb"
|
@@ -39,8 +44,9 @@ Gem::Specification.new do |s|
|
|
39
44
|
s.licenses = ["MIT"]
|
40
45
|
s.require_paths = ["lib"]
|
41
46
|
s.rubygems_version = %q{1.6.2}
|
42
|
-
s.summary = %q{Ruby
|
47
|
+
s.summary = %q{Ruby H-Y-P-E utility}
|
43
48
|
s.test_files = [
|
49
|
+
"spec/kanye/itunes_spec.rb",
|
44
50
|
"spec/kanye/track_spec.rb",
|
45
51
|
"spec/kanye_spec.rb",
|
46
52
|
"spec/spec_helper.rb"
|
@@ -54,6 +60,7 @@ Gem::Specification.new do |s|
|
|
54
60
|
s.add_runtime_dependency(%q<sqlite3>, [">= 0"])
|
55
61
|
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
56
62
|
s.add_runtime_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
|
63
|
+
s.add_runtime_dependency(%q<rb-appscript>, ["= 0.6.1"])
|
57
64
|
s.add_development_dependency(%q<rspec>, [">= 2"])
|
58
65
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
59
66
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
@@ -61,11 +68,13 @@ Gem::Specification.new do |s|
|
|
61
68
|
s.add_runtime_dependency(%q<sqlite3>, [">= 0"])
|
62
69
|
s.add_runtime_dependency(%q<nokogiri>, ["> 1.4.0"])
|
63
70
|
s.add_runtime_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
|
71
|
+
s.add_runtime_dependency(%q<rb-appscript>, ["= 0.6.1"])
|
64
72
|
else
|
65
73
|
s.add_dependency(%q<httparty>, [">= 0.7.4"])
|
66
74
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
67
75
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
68
76
|
s.add_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
|
77
|
+
s.add_dependency(%q<rb-appscript>, ["= 0.6.1"])
|
69
78
|
s.add_dependency(%q<rspec>, [">= 2"])
|
70
79
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
71
80
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
@@ -73,12 +82,14 @@ Gem::Specification.new do |s|
|
|
73
82
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
74
83
|
s.add_dependency(%q<nokogiri>, ["> 1.4.0"])
|
75
84
|
s.add_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
|
85
|
+
s.add_dependency(%q<rb-appscript>, ["= 0.6.1"])
|
76
86
|
end
|
77
87
|
else
|
78
88
|
s.add_dependency(%q<httparty>, [">= 0.7.4"])
|
79
89
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
80
90
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
81
91
|
s.add_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
|
92
|
+
s.add_dependency(%q<rb-appscript>, ["= 0.6.1"])
|
82
93
|
s.add_dependency(%q<rspec>, [">= 2"])
|
83
94
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
84
95
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
@@ -86,6 +97,7 @@ Gem::Specification.new do |s|
|
|
86
97
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
87
98
|
s.add_dependency(%q<nokogiri>, ["> 1.4.0"])
|
88
99
|
s.add_dependency(%q<ruby-mp3info>, ["= 0.6.14"])
|
100
|
+
s.add_dependency(%q<rb-appscript>, ["= 0.6.1"])
|
89
101
|
end
|
90
102
|
end
|
91
103
|
|
data/lib/kanye.rb
CHANGED
@@ -3,68 +3,24 @@ require 'nokogiri'
|
|
3
3
|
require 'mp3info'
|
4
4
|
require 'sqlite3'
|
5
5
|
|
6
|
+
require 'kanye/page'
|
6
7
|
require 'kanye/track'
|
7
8
|
require 'kanye/history'
|
9
|
+
require 'kanye/itunes'
|
8
10
|
|
9
|
-
|
10
|
-
attr_reader :html, :response, :tracks
|
11
|
-
|
11
|
+
module Kanye
|
12
12
|
DEFAULT_CONFIGURATION_PATH = File.expand_path("~/.kanye_rc")
|
13
13
|
DEFAULT_DOWNLOAD_PATH = File.expand_path("~/Music/Kanye/")
|
14
14
|
DEFAULT_DB_PATH = File.expand_path("~/Music/Kanye/.history.db")
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
@html = @response.parsed_response
|
21
|
-
parse_response
|
22
|
-
end
|
23
|
-
|
24
|
-
def download_all!
|
25
|
-
while tracks.size > 0
|
26
|
-
current_track = tracks.pop
|
27
|
-
history = History.new(DEFAULT_DB_PATH)
|
28
|
-
unless history.exists?(current_track)
|
29
|
-
current_track.download!
|
30
|
-
history.insert(current_track)
|
31
|
-
puts "\tInserted song into db"
|
32
|
-
end
|
15
|
+
BASE_URL = 'h' + 'y' + 'p' + 'e' + 'm' + '.com'
|
16
|
+
|
17
|
+
class << self
|
18
|
+
def download_path
|
19
|
+
@@download_path ||= DEFAULT_DOWNLOAD_PATH
|
33
20
|
end
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
"http://hypem.com/"+path+"/"+page.to_s+"?ax=1&ts="+timestamp
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.download_path
|
41
|
-
@@download_path ||= DEFAULT_DOWNLOAD_PATH
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.db_path
|
45
|
-
@@db_path ||= DEFAULT_DB_PATH
|
46
|
-
end
|
47
|
-
|
48
|
-
protected
|
49
|
-
|
50
|
-
def parse_response
|
51
|
-
html_doc = Nokogiri::HTML(@html)
|
52
|
-
ids = @html.scan /\tid:\'(\w*)\'/
|
53
|
-
keys = @html.scan /\tkey:\s+?\'([\d\w]*)\'/
|
54
|
-
artists = html_doc.css('.track_name .artist').map { |node| node.content.strip }
|
55
|
-
titles = html_doc.css('.track_name .artist + a').map { |node| node.content.strip }
|
56
|
-
[ids, keys, titles, artists].each(&:flatten!)
|
57
|
-
|
58
|
-
ids.each_with_index do |id, i|
|
59
|
-
@tracks << Track.new(:id => ids[i],
|
60
|
-
:key => keys[i],
|
61
|
-
:title => titles[i],
|
62
|
-
:artist => artists[i],
|
63
|
-
:cookie => @cookie)
|
21
|
+
|
22
|
+
def db_path
|
23
|
+
@@db_path ||= DEFAULT_DB_PATH
|
64
24
|
end
|
65
25
|
end
|
66
|
-
|
67
|
-
def timestamp
|
68
|
-
("%10.10f" % Time.now.utc.to_f).gsub('.','')
|
69
|
-
end
|
70
26
|
end
|
data/lib/kanye/history.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Kanye
|
2
|
+
class History
|
3
|
+
attr_reader :db
|
4
|
+
def initialize(db_file)
|
5
|
+
@db = SQLite3::Database.new(db_file)
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
def insert(track)
|
9
|
+
db.execute("insert into tracks values (?, ?)", [nil, track.id])
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
def exists?(track)
|
13
|
+
db.execute("select * from tracks where key=?", track.id).any?
|
14
|
+
end
|
13
15
|
end
|
14
|
-
end
|
16
|
+
end
|
data/lib/kanye/itunes.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'appscript'
|
2
|
+
|
3
|
+
module Kanye
|
4
|
+
class ITunes
|
5
|
+
include Appscript
|
6
|
+
|
7
|
+
def add_to_playlist(file, playlist_name)
|
8
|
+
list = playlist(playlist_name) || create_playlist(playlist_name)
|
9
|
+
raise "Playlist could not be found or created" unless list
|
10
|
+
track = itunes.add MacTypes::Alias.path(file)
|
11
|
+
track.duplicate(:to => list)
|
12
|
+
end
|
13
|
+
|
14
|
+
def playlist(name)
|
15
|
+
itunes.user_playlists[its.name.eq(name)].get.first
|
16
|
+
end
|
17
|
+
|
18
|
+
def create_playlist(name)
|
19
|
+
itunes.make(:new => :user_playlist, :with_properties => {:name => name})
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def itunes
|
25
|
+
app('iTunes')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/kanye/page.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
module Kanye
|
2
|
+
class Page
|
3
|
+
attr_reader :html, :response, :tracks
|
4
|
+
|
5
|
+
|
6
|
+
def initialize(path, page=1)
|
7
|
+
@response = HTTParty.get url(path, page)
|
8
|
+
@tracks = []
|
9
|
+
@cookie = @response.headers['set-cookie']
|
10
|
+
@html = @response.parsed_response
|
11
|
+
parse_response
|
12
|
+
end
|
13
|
+
|
14
|
+
def download_all!
|
15
|
+
tracks.each do |current_track|
|
16
|
+
history = History.new(DEFAULT_DB_PATH)
|
17
|
+
unless history.exists?(current_track)
|
18
|
+
begin
|
19
|
+
current_track.download!
|
20
|
+
rescue Mp3InfoError => e
|
21
|
+
print e.message
|
22
|
+
end
|
23
|
+
|
24
|
+
history.insert(current_track)
|
25
|
+
puts "\tInserted song into db"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def url(path, page=1)
|
31
|
+
"http://#{BASE_URL}/"+path+"/"+page.to_s+"?ax=1&ts="+timestamp
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
|
36
|
+
def parse_response
|
37
|
+
html_doc = Nokogiri::HTML(@html)
|
38
|
+
ids = @html.scan /\tid:\'(\w*)\'/
|
39
|
+
keys = @html.scan /\tkey:\s+?\'([\d\w]*)\'/
|
40
|
+
artists = html_doc.css('.track_name .artist').map { |node| node.content.strip }
|
41
|
+
titles = html_doc.css('.track_name .artist + a').map { |node| node.content.strip }
|
42
|
+
[ids, keys, titles, artists].each { |a| a.flatten!; a.reverse! }
|
43
|
+
|
44
|
+
ids.each_with_index do |id, i|
|
45
|
+
@tracks << Track.new(:id => ids[i],
|
46
|
+
:key => keys[i],
|
47
|
+
:title => titles[i],
|
48
|
+
:artist => artists[i],
|
49
|
+
:cookie => @cookie)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def timestamp
|
54
|
+
("%10.10f" % Time.now.utc.to_f).gsub('.','')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/kanye/track.rb
CHANGED
@@ -1,53 +1,57 @@
|
|
1
|
-
|
1
|
+
module Kanye
|
2
|
+
class NoKeyError < StandardError; end
|
2
3
|
|
3
|
-
class Track
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
class Track
|
5
|
+
def initialize(params={})
|
6
|
+
@id = params[:id]
|
7
|
+
@key = params[:key]
|
8
|
+
@title = params[:title]
|
9
|
+
@artist = params[:artist]
|
10
|
+
@cookie = params[:cookie]
|
11
|
+
end
|
11
12
|
|
12
|
-
|
13
|
+
attr_reader :id, :key, :title, :artist, :cookie
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
def url
|
16
|
+
"http://#{BASE_URL}/serve/source/" + id + '/' + key
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
response = HTTParty.get(url, :headers => {'cookie' => cookie})
|
19
|
+
def download!
|
20
|
+
raise(NoKeyError, "Couldn't find :key for '#{self}'") if key.blank?
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
response = HTTParty.get(url, :headers => {'cookie' => cookie})
|
23
|
+
raise "Response Code '#{response.code}' - Something has changed." unless response.code == 200
|
24
24
|
|
25
|
-
File.open(filename, "wb") do |f|
|
26
|
-
f.write(response.parsed_response)
|
27
|
-
end
|
28
25
|
|
29
|
-
|
30
|
-
|
26
|
+
print "Attempting to download ", self
|
27
|
+
puts "\n\tDownloading song..."
|
31
28
|
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
mp3_url = response.parsed_response["url"]
|
30
|
+
mp3_response = HTTParty.get(mp3_url)
|
31
|
+
|
32
|
+
File.open(filename, "wb") do |f|
|
33
|
+
f.write(mp3_response.parsed_response)
|
34
|
+
end
|
35
|
+
|
36
|
+
set_id3_tags!
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_s
|
40
|
+
"(" + [key, title, artist].join(", ") + ")"
|
41
|
+
end
|
35
42
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
43
|
+
def filename
|
44
|
+
name = [artist,title].join('-').gsub(/[ \/]/, "-").downcase
|
45
|
+
File.join(Kanye.download_path, name + ".mp3")
|
46
|
+
end
|
40
47
|
|
41
|
-
|
48
|
+
private
|
42
49
|
|
43
|
-
|
44
|
-
|
45
|
-
Mp3Info.open(filename, :encoding => 'utf-8') do |mp3|
|
50
|
+
def set_id3_tags!
|
51
|
+
Mp3Info.open(filename) do |mp3|
|
46
52
|
mp3.tag.artist = artist
|
47
53
|
mp3.tag.title = title
|
48
54
|
end
|
49
|
-
rescue Mp3InfoError => e
|
50
|
-
print e.message
|
51
55
|
end
|
52
56
|
end
|
53
|
-
end
|
57
|
+
end
|
data/spec/data/sample.html
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
<div class="message-push" id="flash-warning" style="display: none">
|
13
13
|
<div id="message-intro">
|
14
|
-
<p>You seem to be missing <a href="http://www.adobe.com/support/flashplayer/downloads.html">Adobe's Flash Player</a>, please install it before attempting to listen to music on the
|
14
|
+
<p>You seem to be missing <a href="http://www.adobe.com/support/flashplayer/downloads.html">Adobe's Flash Player</a>, please install it before attempting to listen to music on the .</p>
|
15
15
|
</div>
|
16
16
|
</div>
|
17
17
|
|
@@ -69,7 +69,7 @@
|
|
69
69
|
|
70
70
|
|
71
71
|
<h3 class="track_name">
|
72
|
-
<a class="artist" title="Rusko - search
|
72
|
+
<a class="artist" title="Rusko - search for this artist" href="/artist/Rusko">
|
73
73
|
Rusko</a>
|
74
74
|
-
|
75
75
|
|
@@ -170,7 +170,7 @@
|
|
170
170
|
href="http://www.melophobe.com/concert-reviews/rusko-doorly-sir-kutz-roseland-theater-portland-or1/"
|
171
171
|
title="Read this post: Rusko + Doorly + Sir Kutz – Ros…">
|
172
172
|
Posted 4 days ago »<span style="background:url(
|
173
|
-
http://static-ak.
|
173
|
+
http://static-ak.m.net/images/albumart2.gif
|
174
174
|
);"></span></a>
|
175
175
|
|
176
176
|
</p>
|
@@ -198,7 +198,7 @@
|
|
198
198
|
|
199
199
|
|
200
200
|
<h3 class="track_name">
|
201
|
-
<a class="artist" title="Rusko - search
|
201
|
+
<a class="artist" title="Rusko - search for this artist" href="/artist/Rusko">
|
202
202
|
Rusko</a>
|
203
203
|
-
|
204
204
|
|
@@ -299,7 +299,7 @@
|
|
299
299
|
href="http://www.earmilk.com/2011/04/18/rusko-everyday-the-remixes/"
|
300
300
|
title="Read this post: Rusko – Everyday [The Remixes]">
|
301
301
|
Posted 3 days ago »<span style="background:url(
|
302
|
-
http://static-ak.
|
302
|
+
http://static-ak.m.net/thumbs/3/1459123.png
|
303
303
|
);"></span></a>
|
304
304
|
|
305
305
|
</p>
|
@@ -327,7 +327,7 @@
|
|
327
327
|
|
328
328
|
|
329
329
|
<h3 class="track_name">
|
330
|
-
<a class="artist" title="Washed Out feat. Caroline Polachek - search
|
330
|
+
<a class="artist" title="Washed Out feat. Caroline Polachek - search for this artist" href="/artist/Washed Out feat. Caroline Polachek">
|
331
331
|
Washed Out feat. Caroline Polachek</a>
|
332
332
|
-
|
333
333
|
|
@@ -428,7 +428,7 @@
|
|
428
428
|
href="http://www.tiltmag.com/2011/04/washed-out-signs-to-sub-pop.html"
|
429
429
|
title="Read this post: Washed Out Signs to Sub Pop">
|
430
430
|
Posted 14 hrs ago »<span style="background:url(
|
431
|
-
http://static-ak.
|
431
|
+
http://static-ak.m.net/thumbs/6/1461916.png
|
432
432
|
);"></span></a>
|
433
433
|
|
434
434
|
</p>
|
@@ -456,7 +456,7 @@
|
|
456
456
|
|
457
457
|
|
458
458
|
<h3 class="track_name">
|
459
|
-
<a class="artist" title="Le Castle Vania - search
|
459
|
+
<a class="artist" title="Le Castle Vania - search for this artist" href="/artist/Le Castle Vania">
|
460
460
|
Le Castle Vania</a>
|
461
461
|
-
|
462
462
|
|
@@ -557,7 +557,7 @@
|
|
557
557
|
href="http://www.themusicninja.com/electro-dj-falcon-thomas-bangalter-together-le-castle-vania-computer-clubs-summer-bootleg-mix/"
|
558
558
|
title="Read this post: [Electro] DJ Falcon + Thomas Bang…">
|
559
559
|
Posted 9 hrs ago »<span style="background:url(
|
560
|
-
http://static-ak.
|
560
|
+
http://static-ak.m.net/thumbs/7/1462247.png
|
561
561
|
);"></span></a>
|
562
562
|
|
563
563
|
</p>
|
@@ -585,7 +585,7 @@
|
|
585
585
|
|
586
586
|
|
587
587
|
<h3 class="track_name">
|
588
|
-
<a class="artist" title="Earl Da Grey - search
|
588
|
+
<a class="artist" title="Earl Da Grey - search for this artist" href="/artist/Earl Da Grey">
|
589
589
|
Earl Da Grey</a>
|
590
590
|
-
|
591
591
|
|
@@ -682,7 +682,7 @@
|
|
682
682
|
href="http://www.ilictronix.com/2011/04/not-my-cup-of-tea.html"
|
683
683
|
title="Read this post: Not My Cup of Tea">
|
684
684
|
Posted 5 days ago »<span style="background:url(
|
685
|
-
http://static-ak.
|
685
|
+
http://static-ak.m.net/thumbs/3/1457903.png
|
686
686
|
);"></span></a>
|
687
687
|
|
688
688
|
</p>
|
@@ -710,7 +710,7 @@
|
|
710
710
|
|
711
711
|
<div class="same-post section-track" >
|
712
712
|
<h3 class="track_name">
|
713
|
-
<a class="artist" title="Earl Da Grey - search
|
713
|
+
<a class="artist" title="Earl Da Grey - search for this artist" href="/artist/Earl Da Grey">
|
714
714
|
Earl Da Grey </a> -
|
715
715
|
<a title="Heavenly Motion - go to page for this track" href="/item/1ar7k/Earl+Da+Grey+-+Heavenly+Motion">
|
716
716
|
Heavenly Motion </a>
|
@@ -789,7 +789,7 @@
|
|
789
789
|
|
790
790
|
<div class="same-post section-track" >
|
791
791
|
<h3 class="track_name">
|
792
|
-
<a class="artist" title="Earl Da Grey - search
|
792
|
+
<a class="artist" title="Earl Da Grey - search for this artist" href="/artist/Earl Da Grey">
|
793
793
|
Earl Da Grey </a> -
|
794
794
|
<a title="Millionaire Radio - go to page for this track" href="/item/1ar7g/Earl+Da+Grey+-+Millionaire+Radio">
|
795
795
|
Millionaire Radio </a>
|
@@ -868,7 +868,7 @@
|
|
868
868
|
|
869
869
|
<div class="same-post section-track" >
|
870
870
|
<h3 class="track_name">
|
871
|
-
<a class="artist" title="Earl Da Grey - search
|
871
|
+
<a class="artist" title="Earl Da Grey - search for this artist" href="/artist/Earl Da Grey">
|
872
872
|
Earl Da Grey </a> -
|
873
873
|
<a title="Taboo - go to page for this track" href="/item/1ar7h/Earl+Da+Grey+-+Taboo">
|
874
874
|
Taboo </a>
|
@@ -941,14 +941,14 @@
|
|
941
941
|
</div><!-- same-post -->
|
942
942
|
|
943
943
|
</div><!-- section-player -->
|
944
|
-
</div><a class="notice" onclick="if(! document.getElementById('box') ) { Lightbox.init(); } Lightbox.showBoxByAJAX('/inc/lb_signup.php', 330, 510);return false;" href=""><span>Customize the
|
944
|
+
</div><a class="notice" onclick="if(! document.getElementById('box') ) { Lightbox.init(); } Lightbox.showBoxByAJAX('/inc/lb_signup.php', 330, 510);return false;" href=""><span>Customize the with the music YOU <em>Love</em> • <strong>Sign Up Now »</strong></span></a>
|
945
945
|
<div class="section section-track section-odd">
|
946
946
|
<div class="section-player" >
|
947
947
|
|
948
948
|
|
949
949
|
|
950
950
|
<h3 class="track_name">
|
951
|
-
<a class="artist" title="James Varnish - search
|
951
|
+
<a class="artist" title="James Varnish - search for this artist" href="/artist/James Varnish">
|
952
952
|
James Varnish</a>
|
953
953
|
-
|
954
954
|
|
@@ -1045,7 +1045,7 @@
|
|
1045
1045
|
href="http://www.vacayvitamins.com/electro/together-boston-2011-music-arts-technology/"
|
1046
1046
|
title="Read this post: Together Boston 2011 (Music, Arts…">
|
1047
1047
|
Posted 4 days ago »<span style="background:url(
|
1048
|
-
http://static-ak.
|
1048
|
+
http://static-ak.m.net/thumbs/5/1458305.png
|
1049
1049
|
);"></span></a>
|
1050
1050
|
|
1051
1051
|
</p>
|
@@ -1073,7 +1073,7 @@
|
|
1073
1073
|
|
1074
1074
|
|
1075
1075
|
<h3 class="track_name">
|
1076
|
-
<a class="artist" title="Jamaica - search
|
1076
|
+
<a class="artist" title="Jamaica - search for this artist" href="/artist/Jamaica">
|
1077
1077
|
Jamaica</a>
|
1078
1078
|
-
|
1079
1079
|
|
@@ -1174,7 +1174,7 @@
|
|
1174
1174
|
href="http://allthingsgomusic.com/interview-jamaica"
|
1175
1175
|
title="Read this post: Interview: Jamaica">
|
1176
1176
|
Posted 4 days ago »<span style="background:url(
|
1177
|
-
http://static-ak.
|
1177
|
+
http://static-ak.m.net/thumbs/6/1458346.png
|
1178
1178
|
);"></span></a>
|
1179
1179
|
|
1180
1180
|
</p>
|
@@ -1202,7 +1202,7 @@
|
|
1202
1202
|
|
1203
1203
|
|
1204
1204
|
<h3 class="track_name">
|
1205
|
-
<a class="artist" title="Radiohead - search
|
1205
|
+
<a class="artist" title="Radiohead - search for this artist" href="/artist/Radiohead">
|
1206
1206
|
Radiohead</a>
|
1207
1207
|
-
|
1208
1208
|
|
@@ -1303,7 +1303,7 @@
|
|
1303
1303
|
href="http://tympanogram.com/music/stream-radiohead-supercollider/"
|
1304
1304
|
title="Read this post: [stream] Radiohead // Supercollid…">
|
1305
1305
|
Posted 14 hrs ago »<span style="background:url(
|
1306
|
-
http://static-ak.
|
1306
|
+
http://static-ak.m.net/thumbs/0/1461900.png
|
1307
1307
|
);"></span></a>
|
1308
1308
|
|
1309
1309
|
</p>
|
@@ -1331,7 +1331,7 @@
|
|
1331
1331
|
|
1332
1332
|
|
1333
1333
|
<h3 class="track_name">
|
1334
|
-
<a class="artist" title="Dillon Francis - search
|
1334
|
+
<a class="artist" title="Dillon Francis - search for this artist" href="/artist/Dillon Francis">
|
1335
1335
|
Dillon Francis</a>
|
1336
1336
|
-
|
1337
1337
|
|
@@ -1432,7 +1432,7 @@
|
|
1432
1432
|
href="http://www.tiltmag.com/2011/04/la-dubstep-takeover-ooah-love-i-need.html"
|
1433
1433
|
title="Read this post: L.A. DUBSTEP TAKEOVER! OOAH - The…">
|
1434
1434
|
Posted yesterday »<span style="background:url(
|
1435
|
-
http://static-ak.
|
1435
|
+
http://static-ak.m.net/thumbs/1/1461131.png
|
1436
1436
|
);"></span></a>
|
1437
1437
|
|
1438
1438
|
</p>
|
@@ -1460,7 +1460,7 @@
|
|
1460
1460
|
|
1461
1461
|
|
1462
1462
|
<h3 class="track_name">
|
1463
|
-
<a class="artist" title="The Human League - search
|
1463
|
+
<a class="artist" title="The Human League - search for this artist" href="/artist/The Human League">
|
1464
1464
|
The Human League</a>
|
1465
1465
|
-
|
1466
1466
|
|
@@ -1561,7 +1561,7 @@
|
|
1561
1561
|
href="http://www.vacayvitamins.com/electro/mix-monday-alex-metric-bbc-radio-1-essential-mix/"
|
1562
1562
|
title="Read this post: Mix Monday – Alex Metric BBC Ra…">
|
1563
1563
|
Posted 3 days ago »<span style="background:url(
|
1564
|
-
http://static-ak.
|
1564
|
+
http://static-ak.m.net/thumbs/0/1458840.png
|
1565
1565
|
);"></span></a>
|
1566
1566
|
|
1567
1567
|
</p>
|
@@ -1589,7 +1589,7 @@
|
|
1589
1589
|
|
1590
1590
|
<div class="same-post section-track" >
|
1591
1591
|
<h3 class="track_name">
|
1592
|
-
<a class="artist" title="His Majesty Andre - search
|
1592
|
+
<a class="artist" title="His Majesty Andre - search for this artist" href="/artist/His Majesty Andre">
|
1593
1593
|
His Majesty Andre </a> -
|
1594
1594
|
<a title="Clubs - go to page for this track" href="/item/1as5w/His+Majesty+Andre+-+Clubs">
|
1595
1595
|
Clubs </a>
|
@@ -1668,7 +1668,7 @@
|
|
1668
1668
|
|
1669
1669
|
<div class="same-post section-track" >
|
1670
1670
|
<h3 class="track_name">
|
1671
|
-
<a class="artist" title="Cassian - search
|
1671
|
+
<a class="artist" title="Cassian - search for this artist" href="/artist/Cassian">
|
1672
1672
|
Cassian </a> -
|
1673
1673
|
<a title="Getting High (Original Mix) - go to page for this track" href="/item/1as5v/Cassian+-+Getting+High+Original+Mix+">
|
1674
1674
|
Getting High (Original Mix) </a>
|
@@ -1747,7 +1747,7 @@
|
|
1747
1747
|
|
1748
1748
|
<div class="same-post section-track" >
|
1749
1749
|
<h3 class="track_name">
|
1750
|
-
<a class="artist" title="Les Rythmes Digitales - search
|
1750
|
+
<a class="artist" title="Les Rythmes Digitales - search for this artist" href="/artist/Les Rythmes Digitales">
|
1751
1751
|
Les Rythmes Digitales </a> -
|
1752
1752
|
<a title="About Funk - go to page for this track" href="/item/1as5z/Les+Rythmes+Digitales+-+About+Funk">
|
1753
1753
|
About Funk </a>
|
@@ -1826,7 +1826,7 @@
|
|
1826
1826
|
|
1827
1827
|
<div class="same-post section-track" >
|
1828
1828
|
<h3 class="track_name">
|
1829
|
-
<a class="artist" title="BeatauCue - search
|
1829
|
+
<a class="artist" title="BeatauCue - search for this artist" href="/artist/BeatauCue">
|
1830
1830
|
BeatauCue </a> -
|
1831
1831
|
<a title="Behold - go to page for this track" href="/item/1873c/BeatauCue+-+Behold">
|
1832
1832
|
Behold </a>
|
@@ -1906,14 +1906,14 @@
|
|
1906
1906
|
</div><!-- same-post -->
|
1907
1907
|
|
1908
1908
|
</div><!-- section-player -->
|
1909
|
-
</div><a class="notice" onclick="if(! document.getElementById('box') ) { Lightbox.init(); } Lightbox.showBoxByAJAX('/inc/lb_signup.php', 330, 510);return false;" href=""><span>Customize the
|
1909
|
+
</div><a class="notice" onclick="if(! document.getElementById('box') ) { Lightbox.init(); } Lightbox.showBoxByAJAX('/inc/lb_signup.php', 330, 510);return false;" href=""><span>Customize the with the music YOU <em>Love</em> • <strong>Sign Up Now »</strong></span></a>
|
1910
1910
|
<div class="section section-track section-even">
|
1911
1911
|
<div class="section-player" >
|
1912
1912
|
|
1913
1913
|
|
1914
1914
|
|
1915
1915
|
<h3 class="track_name">
|
1916
|
-
<a class="artist" title="Toddla T - search
|
1916
|
+
<a class="artist" title="Toddla T - search for this artist" href="/artist/Toddla T">
|
1917
1917
|
Toddla T</a>
|
1918
1918
|
-
|
1919
1919
|
|
@@ -2014,7 +2014,7 @@
|
|
2014
2014
|
href="http://schitzpopinov.com/blog/words-with-doorly"
|
2015
2015
|
title="Read this post: Words with Doorly">
|
2016
2016
|
Posted yesterday »<span style="background:url(
|
2017
|
-
http://static-ak.
|
2017
|
+
http://static-ak.m.net/thumbs/4/1461244.png
|
2018
2018
|
);"></span></a>
|
2019
2019
|
|
2020
2020
|
</p>
|
@@ -2042,7 +2042,7 @@
|
|
2042
2042
|
|
2043
2043
|
|
2044
2044
|
<h3 class="track_name">
|
2045
|
-
<a class="artist" title="Danger Granger - search
|
2045
|
+
<a class="artist" title="Danger Granger - search for this artist" href="/artist/Danger Granger">
|
2046
2046
|
Danger Granger</a>
|
2047
2047
|
-
|
2048
2048
|
|
@@ -2131,7 +2131,7 @@
|
|
2131
2131
|
title="See other tracks posted by this blog"
|
2132
2132
|
href="/blog/earmilk/11067">
|
2133
2133
|
earmilk</a>
|
2134
|
-
“Mashup Monday
|
2134
|
+
“Mashup Monday going to melt you faces off with enough mashed up music to make you wanna slap…”
|
2135
2135
|
<a
|
2136
2136
|
class="readpost"
|
2137
2137
|
target="_blank"
|
@@ -2139,7 +2139,7 @@
|
|
2139
2139
|
href="http://www.earmilk.com/2011/04/18/mashup-monday-week-20/"
|
2140
2140
|
title="Read this post: Mashup Monday – Week 20">
|
2141
2141
|
Posted 3 days ago »<span style="background:url(
|
2142
|
-
http://static-ak.
|
2142
|
+
http://static-ak.m.net/thumbs/9/1459019.png
|
2143
2143
|
);"></span></a>
|
2144
2144
|
|
2145
2145
|
</p>
|
@@ -2167,7 +2167,7 @@
|
|
2167
2167
|
|
2168
2168
|
<div class="same-post section-track" >
|
2169
2169
|
<h3 class="track_name">
|
2170
|
-
<a class="artist" title="DEFEP - search
|
2170
|
+
<a class="artist" title="DEFEP - search for this artist" href="/artist/DEFEP">
|
2171
2171
|
DEFEP </a> -
|
2172
2172
|
<a title="Rolling it Right (Afrojack vs Adele) - go to page for this track" href="/item/1asae/DEFEP+-+Rolling+it+Right+Afrojack+vs+Adele+">
|
2173
2173
|
Rolling it Right (Afrojack vs Adele) </a>
|
data/spec/data/super.mp3
ADDED
Binary file
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'appscript'
|
3
|
+
|
4
|
+
describe Kanye::ITunes do
|
5
|
+
include Appscript
|
6
|
+
KANYE_TEST = 'KANYE_TEST'
|
7
|
+
|
8
|
+
describe :add_to_playlist do
|
9
|
+
let(:list) { Kanye::ITunes.new.playlist(KANYE_TEST) }
|
10
|
+
after { begin app('iTunes').delete(list); rescue; end }
|
11
|
+
|
12
|
+
context "when file found" do
|
13
|
+
context "and playlist is June" do
|
14
|
+
let(:file) { File.expand_path('spec/data/super.mp3') }
|
15
|
+
|
16
|
+
before do
|
17
|
+
Kanye::ITunes.new.add_to_playlist(file, KANYE_TEST)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should add song to playlist" do
|
21
|
+
tracks = app('iTunes').user_playlists[its.name.eq(KANYE_TEST)].first.tracks.name.get
|
22
|
+
tracks.should include('super')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe :playlist do
|
29
|
+
let(:list) { Kanye::ITunes.new.create_playlist(KANYE_TEST) }
|
30
|
+
before { list }
|
31
|
+
after { begin app('iTunes').delete(list); rescue; end }
|
32
|
+
|
33
|
+
context "playlist is found" do
|
34
|
+
it "should return appscript reference" do
|
35
|
+
Kanye::ITunes.new.playlist(KANYE_TEST).class.should == Appscript::Reference
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "playlist can not be found" do
|
40
|
+
before { app('iTunes').delete list }
|
41
|
+
it "should return nil" do
|
42
|
+
Kanye::ITunes.new.playlist(KANYE_TEST).should be_nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/spec/kanye/track_spec.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Track do
|
3
|
+
describe Kanye::Track do
|
4
4
|
before do
|
5
|
-
@track = Track.new(:id => 'id', :key => 'key', :artist => 'Alan Braxe', :title => 'Rubicon', :cookie => 'cookie')
|
5
|
+
@track = Kanye::Track.new(:id => 'id', :key => 'key', :artist => 'Alan Braxe', :title => 'Rubicon', :cookie => 'cookie')
|
6
6
|
end
|
7
7
|
|
8
8
|
describe "url" do
|
9
9
|
it "should contain contain :id and :key" do
|
10
|
-
@track.url.should == "http
|
10
|
+
@track.url.should == "http://#{Kanye::BASE_URL}/serve/source/id/key"
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -19,12 +19,12 @@ describe Track do
|
|
19
19
|
|
20
20
|
describe "download!" do
|
21
21
|
before do
|
22
|
-
HTTParty.stub!(:get)
|
22
|
+
HTTParty.stub!(:get) { mock(:response, :parsed_response => {}, :code => 200) }
|
23
23
|
File.stub!(:open)
|
24
24
|
Mp3Info.stub!(:open)
|
25
25
|
end
|
26
26
|
|
27
|
-
it "should request mp3
|
27
|
+
it "should request mp3 with cookie" do
|
28
28
|
HTTParty.should_receive(:get).with(@track.url, {:headers => {"cookie" => @track.cookie}})
|
29
29
|
@track.download!
|
30
30
|
end
|
data/spec/kanye_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Kanye do
|
3
|
+
describe Kanye::Page do
|
4
4
|
describe '#parse_response' do
|
5
5
|
let(:html) { File.open('spec/data/sample.html', 'r').read }
|
6
6
|
|
@@ -12,7 +12,7 @@ describe Kanye do
|
|
12
12
|
HTTParty.stub!(:get).and_return(resp)
|
13
13
|
end
|
14
14
|
|
15
|
-
let(:kanye) { Kanye.new('test') }
|
15
|
+
let(:kanye) { Kanye::Page.new('test') }
|
16
16
|
|
17
17
|
describe 'format strings' do
|
18
18
|
results = [
|
@@ -37,7 +37,7 @@ describe Kanye do
|
|
37
37
|
["Danger Granger","Daniel is a Wild Cat (Porter Robinson vs Bat For Lashes)","1asad","65257400b1a1266adb3173f029bbb1a8","yesplease"],
|
38
38
|
["DEFEP","Rolling it Right (Afrojack vs Adele)","1asae","63cbcb3a740e1ad0cb7163b23e33a9d6","yesplease"]
|
39
39
|
]
|
40
|
-
results.each_with_index do |track, index|
|
40
|
+
results.reverse!.each_with_index do |track, index|
|
41
41
|
describe "track No. #{index+1}" do
|
42
42
|
subject { kanye.tracks[index] }
|
43
43
|
its(:artist) { should == results[index][0] }
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kanye
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sam Vincent
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-06-
|
18
|
+
date: 2011-06-30 00:00:00 -07:00
|
19
19
|
default_executable: kanye
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -79,9 +79,25 @@ dependencies:
|
|
79
79
|
type: :runtime
|
80
80
|
version_requirements: *id004
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
|
-
name:
|
82
|
+
name: rb-appscript
|
83
83
|
prerelease: false
|
84
84
|
requirement: &id005 !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - "="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
hash: 5
|
90
|
+
segments:
|
91
|
+
- 0
|
92
|
+
- 6
|
93
|
+
- 1
|
94
|
+
version: 0.6.1
|
95
|
+
type: :runtime
|
96
|
+
version_requirements: *id005
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
prerelease: false
|
100
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
85
101
|
none: false
|
86
102
|
requirements:
|
87
103
|
- - ">="
|
@@ -91,11 +107,11 @@ dependencies:
|
|
91
107
|
- 2
|
92
108
|
version: "2"
|
93
109
|
type: :development
|
94
|
-
version_requirements: *
|
110
|
+
version_requirements: *id006
|
95
111
|
- !ruby/object:Gem::Dependency
|
96
112
|
name: bundler
|
97
113
|
prerelease: false
|
98
|
-
requirement: &
|
114
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
99
115
|
none: false
|
100
116
|
requirements:
|
101
117
|
- - ~>
|
@@ -107,11 +123,11 @@ dependencies:
|
|
107
123
|
- 0
|
108
124
|
version: 1.0.0
|
109
125
|
type: :development
|
110
|
-
version_requirements: *
|
126
|
+
version_requirements: *id007
|
111
127
|
- !ruby/object:Gem::Dependency
|
112
128
|
name: jeweler
|
113
129
|
prerelease: false
|
114
|
-
requirement: &
|
130
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
115
131
|
none: false
|
116
132
|
requirements:
|
117
133
|
- - ~>
|
@@ -123,11 +139,11 @@ dependencies:
|
|
123
139
|
- 2
|
124
140
|
version: 1.5.2
|
125
141
|
type: :development
|
126
|
-
version_requirements: *
|
142
|
+
version_requirements: *id008
|
127
143
|
- !ruby/object:Gem::Dependency
|
128
144
|
name: httparty
|
129
145
|
prerelease: false
|
130
|
-
requirement: &
|
146
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
131
147
|
none: false
|
132
148
|
requirements:
|
133
149
|
- - ">="
|
@@ -139,11 +155,11 @@ dependencies:
|
|
139
155
|
- 4
|
140
156
|
version: 0.7.4
|
141
157
|
type: :runtime
|
142
|
-
version_requirements: *
|
158
|
+
version_requirements: *id009
|
143
159
|
- !ruby/object:Gem::Dependency
|
144
160
|
name: sqlite3
|
145
161
|
prerelease: false
|
146
|
-
requirement: &
|
162
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
147
163
|
none: false
|
148
164
|
requirements:
|
149
165
|
- - ">="
|
@@ -153,11 +169,11 @@ dependencies:
|
|
153
169
|
- 0
|
154
170
|
version: "0"
|
155
171
|
type: :runtime
|
156
|
-
version_requirements: *
|
172
|
+
version_requirements: *id010
|
157
173
|
- !ruby/object:Gem::Dependency
|
158
174
|
name: nokogiri
|
159
175
|
prerelease: false
|
160
|
-
requirement: &
|
176
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
161
177
|
none: false
|
162
178
|
requirements:
|
163
179
|
- - ">"
|
@@ -169,11 +185,11 @@ dependencies:
|
|
169
185
|
- 0
|
170
186
|
version: 1.4.0
|
171
187
|
type: :runtime
|
172
|
-
version_requirements: *
|
188
|
+
version_requirements: *id011
|
173
189
|
- !ruby/object:Gem::Dependency
|
174
190
|
name: ruby-mp3info
|
175
191
|
prerelease: false
|
176
|
-
requirement: &
|
192
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
177
193
|
none: false
|
178
194
|
requirements:
|
179
195
|
- - "="
|
@@ -185,7 +201,23 @@ dependencies:
|
|
185
201
|
- 14
|
186
202
|
version: 0.6.14
|
187
203
|
type: :runtime
|
188
|
-
version_requirements: *
|
204
|
+
version_requirements: *id012
|
205
|
+
- !ruby/object:Gem::Dependency
|
206
|
+
name: rb-appscript
|
207
|
+
prerelease: false
|
208
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
210
|
+
requirements:
|
211
|
+
- - "="
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
hash: 5
|
214
|
+
segments:
|
215
|
+
- 0
|
216
|
+
- 6
|
217
|
+
- 1
|
218
|
+
version: 0.6.1
|
219
|
+
type: :runtime
|
220
|
+
version_requirements: *id013
|
189
221
|
description: Lyrical genius, voice of a generation.
|
190
222
|
email: sam.vincent@mac.com
|
191
223
|
executables:
|
@@ -198,6 +230,7 @@ extra_rdoc_files:
|
|
198
230
|
files:
|
199
231
|
- .document
|
200
232
|
- Gemfile
|
233
|
+
- History
|
201
234
|
- LICENSE.txt
|
202
235
|
- README.rdoc
|
203
236
|
- Rakefile
|
@@ -206,8 +239,12 @@ files:
|
|
206
239
|
- kanye.gemspec
|
207
240
|
- lib/kanye.rb
|
208
241
|
- lib/kanye/history.rb
|
242
|
+
- lib/kanye/itunes.rb
|
243
|
+
- lib/kanye/page.rb
|
209
244
|
- lib/kanye/track.rb
|
210
245
|
- spec/data/sample.html
|
246
|
+
- spec/data/super.mp3
|
247
|
+
- spec/kanye/itunes_spec.rb
|
211
248
|
- spec/kanye/track_spec.rb
|
212
249
|
- spec/kanye_spec.rb
|
213
250
|
- spec/spec_helper.rb
|
@@ -244,8 +281,9 @@ rubyforge_project:
|
|
244
281
|
rubygems_version: 1.6.2
|
245
282
|
signing_key:
|
246
283
|
specification_version: 3
|
247
|
-
summary: Ruby
|
284
|
+
summary: Ruby H-Y-P-E utility
|
248
285
|
test_files:
|
286
|
+
- spec/kanye/itunes_spec.rb
|
249
287
|
- spec/kanye/track_spec.rb
|
250
288
|
- spec/kanye_spec.rb
|
251
289
|
- spec/spec_helper.rb
|