arty 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []