album_credits 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +1 -2
- data/album_credits.gemspec +1 -1
- data/bin/album_credits +1 -2
- data/engineering_data.rb +45 -49
- data/lib/album_credits/display.rb +21 -7
- data/lib/album_credits/finder.rb +23 -24
- data/lib/album_credits/version.rb +1 -1
- data/lib/album_credits.rb +1 -2
- metadata +46 -65
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 80bf27bd1fc0c831872bf6600a8ffefb0504bfaa
|
4
|
+
data.tar.gz: f26221d2909563f3f6905d129bfb48dec7021447
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 27db64ce9bd20302867b072ce1c44cdc4687bca63ff399c75386755d18b0657bd9fd35bae554604aee877a708ae3db52efcec798559d6b3915f4a012747696be
|
7
|
+
data.tar.gz: df08043ceb206cff4fcc896a6f1168b4460ebb16e9f3b0eaced5a4add22e9658344602c0f4251922b31fcda2cf68f0c07b1aaa718116eab476f9f338c37db424
|
data/Gemfile
CHANGED
data/album_credits.gemspec
CHANGED
data/bin/album_credits
CHANGED
@@ -6,11 +6,10 @@ require 'album_credits'
|
|
6
6
|
# TODO Shove this all in a CLI class or some such.
|
7
7
|
artist = ARGV[0]
|
8
8
|
album = ARGV[1]
|
9
|
-
year = ARGV[2]
|
10
9
|
ac = AlbumCredits::Finder.new
|
11
10
|
|
12
11
|
begin
|
13
|
-
releases = ac.find_releases(artist, album
|
12
|
+
releases = ac.find_releases(artist, album)
|
14
13
|
rescue Exception => e
|
15
14
|
puts e.message
|
16
15
|
exit
|
data/engineering_data.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'discogs'
|
3
|
-
require '
|
4
|
-
|
3
|
+
require 'awesome_print'
|
4
|
+
|
5
5
|
COLORS = {
|
6
6
|
:clear => "\e[0m",
|
7
7
|
:bold => "\e[1m",
|
@@ -18,40 +18,34 @@ def color_puts(text, color=:white, bold=false)
|
|
18
18
|
puts "#{embolden}#{COLORS[color]}#{text}#{COLORS[:clear]}"
|
19
19
|
end
|
20
20
|
|
21
|
-
def parse_discogs_id(search_result)
|
22
|
-
search_result.uri.split('/').last
|
23
|
-
end
|
24
|
-
|
25
21
|
def discogs
|
26
22
|
return @discogs if @discogs
|
27
|
-
@discogs = Discogs::Wrapper.new("
|
23
|
+
@discogs = Discogs::Wrapper.new("album_credits", user_token: "vTVvYBauSDUjTGNmVGdjqEavQHRWdkhtWerSqJul")
|
28
24
|
end
|
29
25
|
|
30
|
-
def find_releases(artist, album
|
26
|
+
def find_releases(artist, album)
|
31
27
|
releases = []
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
possibilities
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
release
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
28
|
+
possibilities = discogs.search(album, type: 'release', artist: artist)
|
29
|
+
if possibilities.pagination.items > 0
|
30
|
+
puts "Found #{possibilities.pagination.items} to look through"
|
31
|
+
possibilities.results.each do |found_album|
|
32
|
+
begin
|
33
|
+
release = discogs.get_release(found_album.id)
|
34
|
+
rescue Exception => e
|
35
|
+
puts "Failed to find release id #{found_album.id}: #{e}"
|
36
|
+
next
|
37
|
+
end
|
38
|
+
# Make sure the album is actually is in an Accepted state (as per Discogs).
|
39
|
+
if release.status == 'Accepted'
|
40
|
+
releases << release
|
41
|
+
else
|
42
|
+
puts "#{release.artists.first.name} - #{release.title} Status: #{release.status}"
|
45
43
|
end
|
46
|
-
else
|
47
|
-
# puts "no results for #{query}"
|
48
44
|
end
|
45
|
+
else
|
46
|
+
puts "no results for #{artist} #{album}"
|
49
47
|
end
|
50
48
|
|
51
|
-
# Could put this later but still trying to figure out if we want to narrow
|
52
|
-
# by year if it removes all potential results.
|
53
|
-
releases.reject!{ |r| r.released.to_s.split('-').first.to_s != year } if year
|
54
|
-
|
55
49
|
# Only return unique releases
|
56
50
|
seen = {}
|
57
51
|
uniq_releases = releases.inject([]) do |uniq, rel|
|
@@ -62,9 +56,7 @@ def find_releases(artist, album, year=nil)
|
|
62
56
|
uniq
|
63
57
|
end
|
64
58
|
|
65
|
-
|
66
|
-
pristine_releases = uniq_releases.reject{|release| release.released.nil?}
|
67
|
-
pristine_releases.size < uniq_releases.size ? pristine_releases : uniq_releases
|
59
|
+
uniq_releases
|
68
60
|
end
|
69
61
|
|
70
62
|
def engineers_for_release(release)
|
@@ -73,9 +65,12 @@ def engineers_for_release(release)
|
|
73
65
|
end
|
74
66
|
end
|
75
67
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
68
|
+
def get_artist_discog(artist)
|
69
|
+
begin
|
70
|
+
discogs.get_artists_releases(artist.id, per_page: 25, page: 1)
|
71
|
+
rescue Exception => e
|
72
|
+
puts e
|
73
|
+
end
|
79
74
|
end
|
80
75
|
|
81
76
|
def image_uri_for_release(release)
|
@@ -88,9 +83,10 @@ end
|
|
88
83
|
def display_release(release, engineers, options={})
|
89
84
|
color = options.delete(:color) || :white
|
90
85
|
show_discography = options[:show_discography] == true
|
91
|
-
|
86
|
+
label = release.labels.empty? ? "" : "[#{release.labels.first.name}]"
|
92
87
|
color_puts "="*40, color
|
93
|
-
color_puts "#{release.
|
88
|
+
color_puts "#{release.artists.first.name} - #{release.title} #{release.released} #{label}", color
|
89
|
+
color_puts release.uri, color
|
94
90
|
color_puts "#{release.tracklist.size} songs", color
|
95
91
|
color_puts image_uri_for_release(release), color
|
96
92
|
color_puts release.notes, color
|
@@ -98,11 +94,12 @@ def display_release(release, engineers, options={})
|
|
98
94
|
engineers.each do |engineer|
|
99
95
|
color_puts "#{engineer.role} #{engineer.name}", color, true
|
100
96
|
# Print the first 100 releases in the engineer's discography
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
97
|
+
releases = get_artist_discog(engineer)
|
98
|
+
if show_discography && !releases.nil?
|
99
|
+
sorted_releases = releases.releases.sort_by {|rel| rel.year.nil? ? 0 : rel.year }.reverse
|
100
|
+
color_puts "Recent releases in discography", color
|
101
|
+
sorted_releases.each do |disk|
|
102
|
+
color_puts "\t* #{disk.year} #{disk.artist} - #{disk.title} [#{disk.role}]", color
|
106
103
|
end
|
107
104
|
# IDEA: show a cross-section of their work.
|
108
105
|
# maybe start with around the year that current album was released if there are many.
|
@@ -117,8 +114,7 @@ end
|
|
117
114
|
|
118
115
|
artist = ARGV[0]
|
119
116
|
album = ARGV[1]
|
120
|
-
|
121
|
-
releases = find_releases(artist, album, year)
|
117
|
+
releases = find_releases(artist, album)
|
122
118
|
raise "No releases" if releases.empty?
|
123
119
|
puts "Found #{releases.size} releases"
|
124
120
|
|
@@ -129,13 +125,13 @@ sorted_releases = releases.inject([]) do |rel_array, release|
|
|
129
125
|
rel_array
|
130
126
|
end.sort_by{|arr| arr.last.size}.reverse
|
131
127
|
|
132
|
-
raise "No engineering data
|
128
|
+
raise "No engineering data :/" if sorted_releases.empty?
|
133
129
|
|
134
130
|
best_guess = sorted_releases.shift
|
135
|
-
display_release(best_guess.first, best_guess.last, :
|
136
|
-
|
137
|
-
sorted_releases.each do |release, engineers|
|
138
|
-
|
139
|
-
|
140
|
-
|
131
|
+
display_release(best_guess.first, best_guess.last, color: :green, show_discography: true)
|
132
|
+
#ap best_guess.first
|
133
|
+
#sorted_releases.each do |release, engineers|
|
134
|
+
# ap release
|
135
|
+
# display_release(release, engineers)
|
136
|
+
#end
|
141
137
|
|
@@ -39,7 +39,8 @@ module AlbumCredits
|
|
39
39
|
@default_color = opts.delete(:color) || :white
|
40
40
|
|
41
41
|
cp "="*40
|
42
|
-
cp "#{release.title} #{release.released}
|
42
|
+
cp "#{release.title} #{release.released}"
|
43
|
+
cp release.uri
|
43
44
|
cp "#{release.tracklist.size} songs"
|
44
45
|
cp image_uri_for_release(release)
|
45
46
|
cp release.notes
|
@@ -47,6 +48,14 @@ module AlbumCredits
|
|
47
48
|
display_engineer_data(engineers, opts)
|
48
49
|
end
|
49
50
|
|
51
|
+
def get_artist_discog(artist)
|
52
|
+
begin
|
53
|
+
discogs.get_artists_releases(artist.id, per_page: 25, page: 1)
|
54
|
+
rescue Exception => e
|
55
|
+
puts e
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
50
59
|
# TODO: Put logical engineer sorting
|
51
60
|
# IDEA: show a cross-section of their work.
|
52
61
|
# maybe start with around the year that current album was released if there are many.
|
@@ -62,16 +71,21 @@ module AlbumCredits
|
|
62
71
|
cp "#{engineer.role} #{engineer.name}", :bold => true, :color => :red
|
63
72
|
|
64
73
|
# Print the engineer's discography
|
65
|
-
|
66
|
-
|
67
|
-
|
74
|
+
engineer_discog = get_artist_discog(engineer)
|
75
|
+
engineer = discogs.get_artist(engineer.id)
|
76
|
+
if show_discography && !engineer_discog.nil?
|
77
|
+
aka = engineer.namevariations || []
|
78
|
+
aka << engineer.aliases.map(&:name) unless engineer.aliases.nil?
|
79
|
+
if !(aliases = aka.flatten.uniq.sort).empty?
|
80
|
+
cp "AKA: #{aliases.join(', ')}"
|
81
|
+
end
|
82
|
+
cp "#{engineer_discog.releases.size} releases in discography", :color => :yellow
|
68
83
|
|
69
|
-
cp
|
70
|
-
cp "#{artist.releases.size} releases in discography", :color => :yellow
|
84
|
+
cp engineer.uri
|
71
85
|
|
72
86
|
# Don't show discog for assistants
|
73
87
|
unless engineer.role =~ /assisted|assistant|additional/i
|
74
|
-
|
88
|
+
engineer_discog.releases.group_by{ |disk| disk.artist }.sort_by{ |artist, albums| artist }.each do |artist, albums|
|
75
89
|
cp artist.to_s + " (#{albums.size} total)", :bold => true, :color => :blue
|
76
90
|
# Print the oldest version of this album
|
77
91
|
albums.group_by{ |a| a.title }.each do |title, albums|
|
data/lib/album_credits/finder.rb
CHANGED
@@ -5,8 +5,8 @@ module AlbumCredits
|
|
5
5
|
|
6
6
|
attr_reader :discogs
|
7
7
|
|
8
|
-
def initialize(api_key="
|
9
|
-
@discogs = Discogs::Wrapper.new(api_key)
|
8
|
+
def initialize(api_key="vTVvYBauSDUjTGNmVGdjqEavQHRWdkhtWerSqJul")
|
9
|
+
@discogs = Discogs::Wrapper.new("album_credits", user_token: api_key)
|
10
10
|
end
|
11
11
|
|
12
12
|
def parse_discogs_id(search_result)
|
@@ -30,37 +30,36 @@ module AlbumCredits
|
|
30
30
|
begin
|
31
31
|
discogs.search(CGI.escape(search_string), :type => 'releases')
|
32
32
|
rescue Discogs::UnknownResource => e
|
33
|
-
debug "Nothing found for #{search_string}"
|
33
|
+
debug "Nothing found for #{search_string} #{e}"
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def find_releases(artist, album
|
37
|
+
def find_releases(artist, album)
|
38
38
|
|
39
39
|
releases = []
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
possibilities
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
release
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
40
|
+
possibilities = discogs.search(album, type: 'release', artist: artist, format: 'album')
|
41
|
+
|
42
|
+
if possibilities.pagination.items > 0
|
43
|
+
possibilities.results.each do |found_album|
|
44
|
+
begin
|
45
|
+
release = discogs.get_release(found_album.id)
|
46
|
+
rescue Exception => e
|
47
|
+
debug "Failed to find release id #{found_album.id}: #{e}"
|
48
|
+
next
|
49
|
+
end
|
50
|
+
# Make sure the album is actually in an Accepted state (as per Discogs).
|
51
|
+
if release.status == 'Accepted'
|
52
|
+
releases << release
|
53
|
+
else
|
54
|
+
debug "unacceptable: #{release.title} #{release.status}"
|
55
55
|
end
|
56
|
-
else
|
57
|
-
debug "no results for #{artist} #{album} #{year} #{format}"
|
58
56
|
end
|
59
|
-
|
60
|
-
|
61
|
-
raise AlbumCredits::NoReleasesFound.new(artist, album, year) if releases.empty?
|
57
|
+
else
|
58
|
+
debug "no results for #{artist} #{album} #{year} #{format}"
|
62
59
|
end
|
63
60
|
|
61
|
+
raise AlbumCredits::NoReleasesFound.new(artist, album, year) if releases.empty?
|
62
|
+
|
64
63
|
# Sometimes Discogs returns duplicate releases so
|
65
64
|
# filter out any duplicates based on id.
|
66
65
|
seen = {}
|
data/lib/album_credits.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require 'cgi'
|
3
2
|
require 'discogs'
|
4
3
|
require 'album_credits/exceptions'
|
5
4
|
require 'album_credits/core_ext'
|
6
5
|
require 'album_credits/display'
|
7
6
|
require 'album_credits/finder'
|
8
7
|
|
9
|
-
begin; require '
|
8
|
+
begin; require 'awesome_print'; rescue LoadError; end
|
metadata
CHANGED
@@ -1,61 +1,53 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: album_credits
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 4
|
10
|
-
version: 0.0.4
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- bassnode
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2016-07-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: discogs-wrapper
|
22
|
-
|
23
|
-
|
24
|
-
none: false
|
25
|
-
requirements:
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
26
17
|
- - ">="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
32
20
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: ruby-debug
|
36
21
|
prerelease: false
|
37
|
-
|
38
|
-
|
39
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: awesome_print
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
40
31
|
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
46
34
|
type: :development
|
47
|
-
|
48
|
-
|
49
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Searches databases for a given artist + album combination and returns
|
42
|
+
recording engineering information.
|
43
|
+
email:
|
50
44
|
- bassnode@gmail.com
|
51
|
-
executables:
|
45
|
+
executables:
|
52
46
|
- album_credits
|
53
47
|
extensions: []
|
54
|
-
|
55
48
|
extra_rdoc_files: []
|
56
|
-
|
57
|
-
|
58
|
-
- .gitignore
|
49
|
+
files:
|
50
|
+
- ".gitignore"
|
59
51
|
- Gemfile
|
60
52
|
- README.md
|
61
53
|
- Rakefile
|
@@ -70,37 +62,26 @@ files:
|
|
70
62
|
- lib/album_credits/version.rb
|
71
63
|
homepage: https://github.com/bassnode/album_credits
|
72
64
|
licenses: []
|
73
|
-
|
65
|
+
metadata: {}
|
74
66
|
post_install_message:
|
75
67
|
rdoc_options: []
|
76
|
-
|
77
|
-
require_paths:
|
68
|
+
require_paths:
|
78
69
|
- lib
|
79
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
-
|
81
|
-
requirements:
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
82
72
|
- - ">="
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
version: "0"
|
88
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
|
-
requirements:
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
91
77
|
- - ">="
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
|
94
|
-
segments:
|
95
|
-
- 0
|
96
|
-
version: "0"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
97
80
|
requirements: []
|
98
|
-
|
99
81
|
rubyforge_project: album_credits
|
100
|
-
rubygems_version:
|
82
|
+
rubygems_version: 2.4.6
|
101
83
|
signing_key:
|
102
|
-
specification_version:
|
84
|
+
specification_version: 4
|
103
85
|
summary: Provides album engineering credits
|
104
86
|
test_files: []
|
105
|
-
|
106
87
|
has_rdoc:
|