arty 0.0.1

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/arty.rb +92 -0
  3. metadata +86 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d65ee13a33e63d36a716052b329a8ac5ef7d68fcfba84f1ed1946622bb5e8a46
4
+ data.tar.gz: c815de68def659ce23a3f213dd1e8b7ccf6d940979ed79afe324255171e25885
5
+ SHA512:
6
+ metadata.gz: 9248beeb9a3426108156a81f796dbf35be93ad2f6e99804371a16e7d02d7a200ae07254e64dfaf31545049f0ed6c308fb94b77589347a24c67305ed2a86b4bf0
7
+ data.tar.gz: a36ed755a6fdd49a693ec1f6f16b525de6cac59356396cb6da99aa147420c2902067da0fc839e981e7e844093fa3cd7f6d4cbee04bc6d94bba0462eb28738d16
data/lib/arty.rb ADDED
@@ -0,0 +1,92 @@
1
+ require "HTTParty"
2
+ require 'digest'
3
+ require 'rmagick'
4
+ require 'jaro_winkler'
5
+
6
+ class Arty
7
+
8
+ # Provide the names of the artists to render upon initialisation
9
+ def initialize(names)
10
+ @artists = names
11
+ @artwork_urls = []
12
+ @artwork_images = []
13
+ end
14
+
15
+ # Use the iTunes API to fetch the artwork images
16
+ # for the @artists provided. If an artist could not be found
17
+ # It will simply omitted from the resulting @artwork_urls array
18
+ def find_artwork
19
+ for artist in @artists
20
+ response = HTTParty.get(URI.encode("https://itunes.apple.com/search?term=#{artist}"))
21
+ response_object = JSON.parse(response.body)
22
+ for object in response_object["results"]
23
+ if JaroWinkler.distance(object["artistName"], artist) > 0.95 && object["collectionArtistName"] == nil && object["primaryGenreName"] != "Soundtrack"
24
+ url = object["artworkUrl100"]
25
+ url = url.sub("100x100", "600x600")
26
+ @artwork_urls.push(url)
27
+ break
28
+ end
29
+ end
30
+ end
31
+
32
+ while @artwork_urls.count < 4
33
+
34
+ random_artist = @artists.sample
35
+ response = HTTParty.get(URI.encode("https://itunes.apple.com/search?term=#{random_artist}"))
36
+ response_object = JSON.parse(response.body)
37
+
38
+ for object in response_object["results"]
39
+ if JaroWinkler.distance(object["artistName"], random_artist) > 0.95 && object["collectionArtistName"] == nil && object["primaryGenreName"] != "Soundtrack"
40
+ url = object["artworkUrl100"]
41
+ url = url.sub("100x100", "600x600")
42
+
43
+ if @artwork_urls.include?(url) == false
44
+ @artwork_urls.push(url)
45
+ break
46
+ end
47
+ end
48
+ end
49
+
50
+ end
51
+ end
52
+
53
+ def fetch_images
54
+ for image_url in @artwork_urls
55
+ File.open("./tmp/#{Digest::MD5.hexdigest(image_url)}.png", "wb") do |f|
56
+ f.write HTTParty.get(image_url).body
57
+ end
58
+ end
59
+ end
60
+
61
+ def generate_montage
62
+ self.find_artwork()
63
+ self.fetch_images()
64
+
65
+ i = Magick::ImageList.new
66
+
67
+ for image_url in @artwork_urls
68
+ i.read("./tmp/#{Digest::MD5.hexdigest(image_url)}.png")
69
+ end
70
+
71
+ image = i.montage do |mont|
72
+ mont.geometry = "400x400"
73
+ end
74
+
75
+ width = image.columns
76
+
77
+ degrees = 7
78
+
79
+ image.rotate!(degrees)
80
+ radians = degrees * Math::PI / 180
81
+
82
+ trim = Math.sin(radians) * width
83
+
84
+ image.shave!(trim, trim)
85
+
86
+
87
+ image.write("./tmp/output.jpeg") {
88
+ self.quality = 100
89
+ self.format = 'JPEG'
90
+ }
91
+ end
92
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: arty
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kiran Panesar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.13.7
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.13.7
27
+ - !ruby/object:Gem::Dependency
28
+ name: rmagick
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.16'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.16'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jaro_winkler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.4'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.4'
55
+ description: A tool to generate montage images for album art
56
+ email: nick@current.us
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/arty.rb
62
+ homepage: http://rubygems.org/gems/arty
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 2.7.4
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: Arty
86
+ test_files: []