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.
- checksums.yaml +7 -0
- data/lib/arty.rb +92 -0
- 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: []
|