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 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
@@ -1,3 +1,2 @@
1
- source :rubygems
2
-
1
+ source 'https://rubygems.org'
3
2
  gemspec
@@ -20,5 +20,5 @@ Gem::Specification.new do |s|
20
20
  s.require_paths = ["lib"]
21
21
 
22
22
  s.add_dependency "discogs-wrapper"
23
- s.add_development_dependency "ruby-debug"
23
+ s.add_development_dependency "awesome_print"
24
24
  end
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, year)
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 'cgi'
4
- require 'ruby-debug'
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("bff9085fc7")
23
+ @discogs = Discogs::Wrapper.new("album_credits", user_token: "vTVvYBauSDUjTGNmVGdjqEavQHRWdkhtWerSqJul")
28
24
  end
29
25
 
30
- def find_releases(artist, album, year=nil)
26
+ def find_releases(artist, album)
31
27
  releases = []
32
- [nil, 'CD', 'HDCD', 'vinyl'].each do |format|
33
- format = " AND format:#{format}" if format
34
- query = CGI.escape("#{album} AND artist:#{artist}#{format}")
35
- possibilities = discogs.search(query, 'releases')
36
- if possibilities.searchresults.size > 0
37
- possibilities.searchresults.each do |found_album|
38
- # puts "trying #{found_album.inspect}"
39
- release = discogs.get_release(parse_discogs_id(found_album))
40
- # Make sure the album is actually what we think it is and that it
41
- # is in an Accepted state (as per Discogs).
42
- if release.title =~ /#{album}/i && release.status == 'Accepted'
43
- releases << release
44
- end
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
- # Only return with nil release date filter unless it filters out everything.
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 discography_for_artist(artist)
77
- debugger
78
- discogs.get_artist(CGI.escape(artist)) rescue []
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.title} #{release.released} ID: #{release.id}", color
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
- if show_discography && !(artist = discogs.get_artist(CGI.escape(engineer.name))).nil?
102
- color_puts "#{artist.aliases} #{artist.aliases} #{artist.namevariations}", color
103
- color_puts "#{artist.releases.size} releases in discography", color
104
- artist.releases.slice(0,99).each do |disk|
105
- color_puts "\t* #{disk.year} #{disk.title} [#{disk.label}]", color
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
- year = ARGV[2]
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 though :/" if sorted_releases.empty?
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, :color => :green, :show_discography => true)
136
-
137
- sorted_releases.each do |release, engineers|
138
- display_release(release, engineers)
139
- end
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} ID: #{release.id}"
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
- if show_discography && !(artist = discogs.get_artist(CGI.escape(engineer.name))).nil?
66
- aka = artist.aliases || []
67
- aka << artist.namevariations || []
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 "AKA: #{aka.flatten.uniq.sort.join(', ')}"
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
- artist.releases.group_by{ |disk| disk.artist }.sort_by{ |artist, albums| artist }.each do |artist, albums|
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|
@@ -5,8 +5,8 @@ module AlbumCredits
5
5
 
6
6
  attr_reader :discogs
7
7
 
8
- def initialize(api_key="bff9085fc7")
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, year=nil)
37
+ def find_releases(artist, album)
38
38
 
39
39
  releases = []
40
-
41
- [nil, 'CD', 'HDCD', 'vinyl'].each do |format|
42
-
43
- possibilities = search(album, :artist => artist, :year => year, :format => format)
44
-
45
- if possibilities && possibilities.searchresults.size > 0
46
- possibilities.searchresults.each do |found_album|
47
- release = discogs.get_release(parse_discogs_id(found_album))
48
- # Make sure the album is actually what we think it is and that it
49
- # is in an Accepted state (as per Discogs).
50
- if release.title =~ /#{album}/i && release.status == 'Accepted'
51
- releases << release
52
- else
53
- debug "unacceptable: #{release.title} #{release.status}"
54
- end
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 = {}
@@ -1,3 +1,3 @@
1
1
  module AlbumCredits
2
- VERSION = "0.0.4"
2
+ VERSION = "0.1.0"
3
3
  end
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 'ruby-debug'; rescue LoadError; end
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
- hash: 23
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
- date: 2011-12-15 00:00:00 Z
19
- dependencies:
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
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
26
17
  - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
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
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
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
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
46
34
  type: :development
47
- version_requirements: *id002
48
- description: Searches databases for a given artist + album combination and returns recording engineering information.
49
- email:
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
- files:
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
- none: false
81
- requirements:
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
82
72
  - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
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
- hash: 3
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: 1.8.11
82
+ rubygems_version: 2.4.6
101
83
  signing_key:
102
- specification_version: 3
84
+ specification_version: 4
103
85
  summary: Provides album engineering credits
104
86
  test_files: []
105
-
106
87
  has_rdoc: