metallum-cli 0.0.5
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/.gitignore +12 -0
- data/Gemfile +4 -0
- data/README.md +37 -0
- data/Rakefile +1 -0
- data/bin/metallum-cli +8 -0
- data/lib/metallum-cli.rb +9 -0
- data/lib/metallum-cli/app.rb +128 -0
- data/lib/metallum-cli/configuration.rb +24 -0
- data/lib/metallum-cli/helpers/album.rb +63 -0
- data/lib/metallum-cli/helpers/artist.rb +54 -0
- data/lib/metallum-cli/helpers/band.rb +125 -0
- data/lib/metallum-cli/helpers/client.rb +62 -0
- data/lib/metallum-cli/helpers/url.rb +20 -0
- data/lib/metallum-cli/version.rb +3 -0
- data/metallum-cli.gemspec +38 -0
- metadata +131 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8584b27cfece9e7a35e1478575dbcf0039d00065
|
4
|
+
data.tar.gz: f2a39ec7d6bc1dd136c6e55eb8afcc3de84a2660
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a101a606d234f04f6fa0a4d3c1a1d6b1526826c8fa41dd2cf2da9afce8de638c2298291664c27e95217be7f0db52a9abaab328d6ec018a57fa4363d80ad11917
|
7
|
+
data.tar.gz: a8f1808ecec2fbdc0fb54c463672b9f19ba524ecd5d2d13fca6c2cd02eb18ce9a554e3f9bc1a01be8f59533679ac37005aed04e4697e672e2e95732dbabc401c
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Metallum-CLI
|
2
|
+
|
3
|
+
A simple gem to search for artists, albums and get more info about any content at [Metal Archives](http://www.metal-archives.com)
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
This script allows you to perform basic searches at metal-archives.
|
8
|
+
|
9
|
+
To show basic infor about a band:
|
10
|
+
|
11
|
+
```
|
12
|
+
metallum-cli BAND
|
13
|
+
```
|
14
|
+
|
15
|
+
To show its discography:
|
16
|
+
|
17
|
+
```
|
18
|
+
metallum-cli BAND --discography all|main|demos|lives|misc
|
19
|
+
```
|
20
|
+
|
21
|
+
For band mambers:
|
22
|
+
|
23
|
+
```
|
24
|
+
metallum-cli BAND --members
|
25
|
+
```
|
26
|
+
|
27
|
+
To show similar bands:
|
28
|
+
|
29
|
+
```
|
30
|
+
metallum-cli BAND --similar
|
31
|
+
```
|
32
|
+
|
33
|
+
To output band's related links: (passing w/o parameters show all links)
|
34
|
+
|
35
|
+
```
|
36
|
+
metallum-cli BAND --links official|merchandise|unofficial|labels|tablatures
|
37
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/metallum-cli
ADDED
data/lib/metallum-cli.rb
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'metallum-cli/helpers/album'
|
3
|
+
require 'metallum-cli/helpers/artist'
|
4
|
+
require 'metallum-cli/helpers/band'
|
5
|
+
require 'metallum-cli/helpers/client'
|
6
|
+
require 'metallum-cli/helpers/url'
|
7
|
+
require 'nokogiri'
|
8
|
+
require 'thor'
|
9
|
+
|
10
|
+
module MetallumCli
|
11
|
+
class App < Thor
|
12
|
+
package_name 'metallum-cli'
|
13
|
+
|
14
|
+
desc "config", "Create config and edit with $EDITOR"
|
15
|
+
def config
|
16
|
+
Configuration.save
|
17
|
+
if !ENV['EDITOR'].to_s.empty? && !ENV['EDITOR'].nil?
|
18
|
+
exec "$EDITOR #{ENV['HOME']}/.metallumcli"
|
19
|
+
else
|
20
|
+
puts "$EDITOR is not set. Please type your editor:"
|
21
|
+
editor = STDIN.gets.chomp
|
22
|
+
exec "#{editor} #{ENV['HOME']}/.metallumcli"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "album", "Search for an album"
|
27
|
+
option :reviews, :type => :boolean
|
28
|
+
def album(*album)
|
29
|
+
result = Client.get_json Url.ALBUM album.join "_"
|
30
|
+
if result["aaData"].length > 1
|
31
|
+
puts "Your search returned the following albums:\n"
|
32
|
+
result["aaData"].each_with_index do |r, i|
|
33
|
+
album = Nokogiri::HTML(r[0]).css('a').inner_html
|
34
|
+
puts "#{i+1} -> #{album} | #{r[2]}\n"
|
35
|
+
end
|
36
|
+
puts "Select a album number:"
|
37
|
+
choice = STDIN.gets.chomp
|
38
|
+
album = Nokogiri::HTML(result["aaData"][choice.to_i - 1][1]).css('a')
|
39
|
+
album.map{ |link|
|
40
|
+
Album.show_album_page(Client.get_url(link['href']), options[:reviews])
|
41
|
+
}
|
42
|
+
# Client.get_url album
|
43
|
+
elsif result["aaData"].length == 1
|
44
|
+
album = Nokogiri::HTML(result["aaData"][0][1]).css('a')
|
45
|
+
album.map{ |link|
|
46
|
+
Album.show_album_page(Client.get_url(link['href']), options[:reviews])
|
47
|
+
}
|
48
|
+
else
|
49
|
+
puts "No reults found"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
desc "artist", "Search for an artist"
|
54
|
+
option :band
|
55
|
+
def artist(*artist)
|
56
|
+
result = Client.get_json Url.ARTIST artist.join "_"
|
57
|
+
if result["aaData"].length > 1
|
58
|
+
puts "Your search returned the following artists:\n"
|
59
|
+
result["aaData"].each_with_index do |r, i|
|
60
|
+
artist = Nokogiri::HTML(r[0]).css('a').inner_html
|
61
|
+
puts "#{i+1} -> #{artist} | #{r[2]} | #{r[1]}\n"
|
62
|
+
end
|
63
|
+
puts "Select a artist number:"
|
64
|
+
choice = STDIN.gets.chomp
|
65
|
+
artist = Nokogiri::HTML(result["aaData"][choice.to_i - 1][0]).css('a')
|
66
|
+
artist.map{ |link|
|
67
|
+
Artist.show_artist_page(Client.get_url(link['href']), options[:band])
|
68
|
+
}
|
69
|
+
# Client.get_url artist
|
70
|
+
elsif result["aaData"].length == 1
|
71
|
+
artist = Nokogiri::HTML(result["aaData"][0][0]).css('a')
|
72
|
+
artist.map{ |link|
|
73
|
+
Artist.show_artist_page(Client.get_url(link['href']), options[:band])
|
74
|
+
}
|
75
|
+
else
|
76
|
+
puts "No reults found"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
desc "band BAND NAME", "Search for a band"
|
81
|
+
option :discography
|
82
|
+
option :members
|
83
|
+
option :similar, :type => :boolean
|
84
|
+
option :links
|
85
|
+
def band(*band)
|
86
|
+
result = Client.get_json Url.BAND band.join "_"
|
87
|
+
if result["aaData"].length > 1
|
88
|
+
puts "Your search returned the following bands:\n"
|
89
|
+
result["aaData"].each_with_index do |r, i|
|
90
|
+
band = Nokogiri::HTML(r[0]).css('a').inner_html
|
91
|
+
puts "#{i+1} -> #{band} | #{r[2]} | #{r[1]}\n"
|
92
|
+
end
|
93
|
+
puts "Select a band number:"
|
94
|
+
choice = STDIN.gets.chomp
|
95
|
+
band = Nokogiri::HTML(result["aaData"][choice.to_i - 1][0]).css('a')
|
96
|
+
band.map{ |link|
|
97
|
+
Band.show_band_page(Client.get_url(link['href']), options[:discography], options[:members], options[:similar], options[:links])
|
98
|
+
}
|
99
|
+
# Client.get_url band
|
100
|
+
elsif result["aaData"].length == 1
|
101
|
+
band = Nokogiri::HTML(result["aaData"][0][0]).css('a')
|
102
|
+
band.map{ |link|
|
103
|
+
Band.show_band_page(Client.get_url(link['href']), options[:discography], options[:members], options[:similar], options[:links])
|
104
|
+
}
|
105
|
+
else
|
106
|
+
puts "No reults found"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
desc "additions", "Latest additions"
|
111
|
+
def created
|
112
|
+
result = Client.get_json Url.CREATED
|
113
|
+
# File.write "out.json", result
|
114
|
+
result["aaData"].each do |r|
|
115
|
+
band = Nokogiri::HTML(r[1]).css('a').inner_html
|
116
|
+
country = Nokogiri::HTML(r[2]).css('a').inner_html
|
117
|
+
user = Nokogiri::HTML(r[5]).css('a').inner_html
|
118
|
+
puts "Band: #{band}"
|
119
|
+
puts "Country: #{country}"
|
120
|
+
puts "Genre: #{r[3]}"
|
121
|
+
puts "Added by user #{user} at #{r[4]}"
|
122
|
+
puts "\n"
|
123
|
+
end
|
124
|
+
puts "Total results: #{result["iTotalDisplayRecords"]}"
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
module MetallumCli
|
3
|
+
class Configuration
|
4
|
+
attr_accessor :lang
|
5
|
+
|
6
|
+
CONFIG_FILE = "#{ENV['HOME']}/.metallumcli"
|
7
|
+
|
8
|
+
def defaults
|
9
|
+
self.lang ||= 'en'
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.instance
|
13
|
+
@instance ||= File.exists?(CONFIG_FILE) ? load_yml() : new.tap(&:defaults)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.load_yml
|
17
|
+
YAML.load_file(CONFIG_FILE)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.save
|
21
|
+
File.open(CONFIG_FILE, 'w+') { |f| f.write(instance.to_yaml) }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module MetallumCli
|
2
|
+
class Album
|
3
|
+
|
4
|
+
def self.show_album_page(html, reviews)
|
5
|
+
# File.write 'out.html', html
|
6
|
+
page = Nokogiri::HTML(html)
|
7
|
+
album_values = {}
|
8
|
+
album_keys = {0 => "Type", 1 => "Release date", 2 => "Catalog ID", 3 => "Label", 4 => "Format", 5 => "Reviews"}
|
9
|
+
page.css('div#album_info dd').each_with_index do |item, index|
|
10
|
+
album_values[album_keys[index]] = item.content.strip.split.join " "
|
11
|
+
end
|
12
|
+
puts "\n\n////#{page.css('h1.album_name').first.content}\\\\\\\\"
|
13
|
+
album_values.each do |k, v|
|
14
|
+
puts "#{k}: #{v}"
|
15
|
+
end
|
16
|
+
if reviews
|
17
|
+
show_album_reviews page.css('table#review_list')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.show_album_reviews(res)
|
22
|
+
reviews = []
|
23
|
+
single_review = []
|
24
|
+
links = []
|
25
|
+
album_keys = {0 => "Year", 1 => "Name", 2 => "Role"}
|
26
|
+
a = 0
|
27
|
+
res.css("td[nowrap=nowrap] a").each do |link|
|
28
|
+
links.push link['href']
|
29
|
+
end
|
30
|
+
res.css("td[nowrap=nowrap]").remove
|
31
|
+
res.css("td").each_with_index do |review, index|
|
32
|
+
i = (index + 4) % 4
|
33
|
+
single_review.push review.content.strip.split.join " "
|
34
|
+
if i == 3
|
35
|
+
reviews.push single_review
|
36
|
+
single_review = []
|
37
|
+
end
|
38
|
+
end
|
39
|
+
p reviews
|
40
|
+
puts "\n\n////Bands\\\\\\\\"
|
41
|
+
reviews.each_with_index do |review,i|
|
42
|
+
puts "#{i + 1} -> #{review.join " - "}"
|
43
|
+
end
|
44
|
+
print "Select the review of your choice, or press any other key to exit: "
|
45
|
+
choice = STDIN.gets.chomp
|
46
|
+
if choice.to_i > 0
|
47
|
+
show_album_review links[choice.to_i - 1]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.show_album_review(url)
|
52
|
+
page = Nokogiri::HTML Client.get_url url
|
53
|
+
puts "\n"
|
54
|
+
puts page.css('h3.reviewTitle').first.content.strip.split.join " "
|
55
|
+
puts "\n"
|
56
|
+
puts page.css('a.profileMenu').first.parent.content.strip.split.join " "
|
57
|
+
puts "\n"
|
58
|
+
puts page.css('div.reviewContent').first.content.strip.split.join " "
|
59
|
+
puts "\n"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module MetallumCli
|
2
|
+
class Artist
|
3
|
+
|
4
|
+
def self.show_artist_page(html, band)
|
5
|
+
# File.write 'out.html', html
|
6
|
+
page = Nokogiri::HTML(html)
|
7
|
+
artist_values = {}
|
8
|
+
biography = []
|
9
|
+
artist_keys = {0 => "Location", 1 => "Age", 2 => "Place of origin", 3 => "Gender"}
|
10
|
+
page.css('div#member_info dl dd').each_with_index do |item, index|
|
11
|
+
artist_values[artist_keys[index]] = item.content.strip.split.join " "
|
12
|
+
end
|
13
|
+
page.css('div.band_comment').css(".title_comment").remove
|
14
|
+
page.css('div.band_comment').each do |item|
|
15
|
+
biography.push item.content.strip.split.join " "
|
16
|
+
end
|
17
|
+
puts "\n\n////#{page.css('h1.band_member_name').first.content}\\\\\\\\"
|
18
|
+
artist_values.each do |k, v|
|
19
|
+
puts "#{k}: #{v}"
|
20
|
+
end
|
21
|
+
biography.each do |bio|
|
22
|
+
puts bio
|
23
|
+
end
|
24
|
+
if band
|
25
|
+
show_artist_bands page, band
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.show_artist_bands(res, param)
|
30
|
+
bands = []
|
31
|
+
album = []
|
32
|
+
album_keys = {0 => "Year", 1 => "Name", 2 => "Role"}
|
33
|
+
a = 0
|
34
|
+
res.css("div#artist_tab_#{param} div.ui-tabs-panel-content div.member_in_band").each do |band|
|
35
|
+
bands.push band.css("h3.member_in_band_name").inner_text
|
36
|
+
band.css('table tr td').each_with_index do |item, index|
|
37
|
+
i = (index + 3) % 3
|
38
|
+
album.push "#{album_keys[i]}: #{item.content.strip.split.join " "}"
|
39
|
+
if i == 2
|
40
|
+
bands.push album
|
41
|
+
album = []
|
42
|
+
a += 1
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
puts "\n\n////Bands\\\\\\\\"
|
47
|
+
bands.each do |band|
|
48
|
+
puts band
|
49
|
+
puts "\n"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
module MetallumCli
|
2
|
+
class Band
|
3
|
+
|
4
|
+
def self.show_band_page(html, discography, members, similar, links)
|
5
|
+
# File.write 'out.html', html
|
6
|
+
page = Nokogiri::HTML(html)
|
7
|
+
band_values = {}
|
8
|
+
band_keys = {0 => "Country", 1 => "Location", 2 => "Status", 3 => "Active since", 4 => "Genre", 5 => "Theme", 6 => "Label", 7 => "Years active"}
|
9
|
+
page.css('div#band_stats dd').each_with_index do |item, index|
|
10
|
+
band_values[band_keys[index]] = item.content.strip.split.join " "
|
11
|
+
end
|
12
|
+
puts "\n\n////#{page.css('h1.band_name').first.content}\\\\\\\\"
|
13
|
+
band_values.each do |k, v|
|
14
|
+
puts "#{k}: #{v}"
|
15
|
+
end
|
16
|
+
if discography
|
17
|
+
sel = 0
|
18
|
+
case discography
|
19
|
+
when 'all' then sel = 1
|
20
|
+
when 'main' then sel = 2
|
21
|
+
when 'lives' then sel = 3
|
22
|
+
when 'demos' then sel = 4
|
23
|
+
when 'misc' then sel = 5
|
24
|
+
end
|
25
|
+
page.css("div#band_disco ul li:eq(#{sel}) a").map { |link|
|
26
|
+
show_band_discography link['href']
|
27
|
+
}
|
28
|
+
end
|
29
|
+
if members
|
30
|
+
show_band_members page, members
|
31
|
+
end
|
32
|
+
if similar
|
33
|
+
page.css("div#band_tab_discography").map do |prev_elem|
|
34
|
+
prev_elem.previous_element.css('li:eq(4) a').map do |link|
|
35
|
+
show_similar_bands "#{link['href']}?showMoreSimilar=1#Similar_artists"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
if links
|
40
|
+
sel = ''
|
41
|
+
case links
|
42
|
+
when 'official' then sel = 'Official'
|
43
|
+
when 'merchandise' then sel = 'Official_merchandise'
|
44
|
+
when 'unofficial' then sel = 'Unofficial'
|
45
|
+
when 'labels' then sel = 'Labels'
|
46
|
+
when 'tablatures' then sel = 'Tablatures'
|
47
|
+
end
|
48
|
+
page.css("div#band_tab_discography").map do |prev_elem|
|
49
|
+
prev_elem.previous_element.css('li:eq(5) a').map do |link|
|
50
|
+
show_band_links link['href'], sel
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.show_band_discography(url)
|
57
|
+
res = Nokogiri::HTML Client.get_url url
|
58
|
+
discography = []
|
59
|
+
discog_keys = {0 => "Name", 1 => "Type", 2 => "Year", 3 => "Reviews"}
|
60
|
+
res.css('tbody tr').each do |album|
|
61
|
+
album.css('td').map.with_index do |item, index|
|
62
|
+
discography.push "#{discog_keys[index]}: #{item.content.strip.split.join " "}"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
puts "\n\n////Albums\\\\\\\\"
|
66
|
+
discography = Client.format_array discography, discog_keys
|
67
|
+
discography.each do |album|
|
68
|
+
puts album
|
69
|
+
end
|
70
|
+
# discography.each_with_index do |album, i|
|
71
|
+
# i += 1
|
72
|
+
# puts "#{album}"
|
73
|
+
# puts "\n" if i % 4 == 0
|
74
|
+
# end
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.show_band_members(page, param)
|
78
|
+
members = [[],[],[]]
|
79
|
+
member_keys = {0 => "Name", 1 => "Instrument", 2 => "Bands"}
|
80
|
+
page.css("div#band_tab_members_#{param} div table tr td").each_with_index do |member, i|
|
81
|
+
members[i] = member.content.strip.split.join " "
|
82
|
+
end
|
83
|
+
puts "\n\n////Members\\\\\\\\"
|
84
|
+
members = Client.format_array members, member_keys
|
85
|
+
members.each do |member|
|
86
|
+
puts member
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.show_similar_bands(url)
|
91
|
+
res = Nokogiri::HTML Client.get_url url
|
92
|
+
bands = []
|
93
|
+
band_keys = {0 => "Name", 1 => "Country", 2 => "Genre"}
|
94
|
+
res.css('tbody tr td').each do |band|
|
95
|
+
bands.push band.content.strip.split.join " "
|
96
|
+
end
|
97
|
+
puts "\n\n////Similar bands\\\\\\\\"
|
98
|
+
bands = Client.format_array bands, band_keys
|
99
|
+
bands.each do |band|
|
100
|
+
puts band
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.show_band_links(url, param)
|
105
|
+
res = Nokogiri::HTML Client.get_url url
|
106
|
+
links = []
|
107
|
+
link_keys = {0 => "Name", 1 => "Country", 2 => "Genre"}
|
108
|
+
if param.eql? ""
|
109
|
+
res.css("table tr td a").each do |link|
|
110
|
+
links.push "#{link['title'].sub("Go to: ","")}: #{link['href']}"
|
111
|
+
end
|
112
|
+
else
|
113
|
+
res.css("table#linksTable#{param.capitalize} tr td a").each do |link|
|
114
|
+
links.push "#{link['title'].sub("Go to: ","")}: #{link['href']}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
puts "\n\n////Links\\\\\\\\"
|
118
|
+
links = Client.format_array links, link_keys
|
119
|
+
links.each do |link|
|
120
|
+
puts link
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'metallum-cli/configuration'
|
2
|
+
require 'net/http'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module MetallumCli
|
6
|
+
class Client
|
7
|
+
SITE_URL = "http://www.metal-archives.com"
|
8
|
+
|
9
|
+
def self.lang
|
10
|
+
Configuration.instance.lang
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.get(path)
|
14
|
+
uri = URI("#{SITE_URL}/#{path}")
|
15
|
+
req = Net::HTTP::Get.new(uri)
|
16
|
+
|
17
|
+
res = Net::HTTP.start(uri.hostname, uri.port) {|http|
|
18
|
+
http.request(req)
|
19
|
+
}
|
20
|
+
|
21
|
+
res
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.get_url(path)
|
25
|
+
uri = URI(path)
|
26
|
+
req = Net::HTTP::Get.new(uri)
|
27
|
+
|
28
|
+
res = Net::HTTP.start(uri.hostname, uri.port) {|http|
|
29
|
+
http.request(req)
|
30
|
+
}
|
31
|
+
|
32
|
+
res.body
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.get_json(path)
|
36
|
+
# puts "#{SITE_URL}/#{path}"
|
37
|
+
json_results "#{SITE_URL}/#{path}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.json_results(url)
|
41
|
+
response = Net::HTTP.get_response(URI.parse(url))
|
42
|
+
data = response.body
|
43
|
+
JSON.parse(data)
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.format_array(arr, indexes)
|
47
|
+
unique = indexes.length
|
48
|
+
formatted = []
|
49
|
+
aux = []
|
50
|
+
arr.each_with_index do |e, i|
|
51
|
+
aux.push e
|
52
|
+
if(i > 0 && i % unique == unique-1)
|
53
|
+
# aux[-1] += "\n\n"
|
54
|
+
formatted.push aux
|
55
|
+
aux = []
|
56
|
+
end
|
57
|
+
end
|
58
|
+
formatted
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module MetallumCli
|
2
|
+
class Url
|
3
|
+
|
4
|
+
def self.CREATED
|
5
|
+
"archives/ajax-band-list/selection/#{Time.now.year}-#{Time.now.month.to_s.rjust(2,'0')}/by/created//json/1?sEcho=1&iColumns=6&sColumns=&iDisplayStart=0&iDisplayLength=200&mDataProp_0=0&mDataProp_1=1&mDataProp_2=2&mDataProp_3=3&mDataProp_4=4&mDataProp_5=5&iSortCol_0=4&sSortDir_0=desc&iSortingCols=1&bSortable_0=true&bSortable_1=true&bSortable_2=true&bSortable_3=true&bSortable_4=true&bSortable_5=true"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.BAND(band)
|
9
|
+
"search/ajax-band-search/?field=name&query=#{band}&sEcho=1&iColumns=3&sColumns=&iDisplayStart=0&iDisplayLength=200&mDataProp_0=0&mDataProp_1=1&mDataProp_2=2"
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.ARTIST(artist)
|
13
|
+
"search/ajax-artist-search/?field=alias&query=#{artist}&sEcho=1&iColumns=4&sColumns=&iDisplayStart=0"
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.ALBUM(album)
|
17
|
+
"search/ajax-album-search/?field=title&query=#{album}&sEcho=1&iColumns=4&sColumns=&iDisplayStart=0"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'metallum-cli/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "metallum-cli"
|
7
|
+
spec.version = MetallumCli::VERSION
|
8
|
+
spec.authors = ["Rodrigo Muniz"]
|
9
|
+
spec.email = ["rodrigo.temiski1995@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{CLI interface for Metal Archives searches}
|
12
|
+
spec.description = %q{find any information about any artist, band, song, album, whatever at Metal Archives}
|
13
|
+
spec.homepage = "https://github.com/muniz95/metallum-cli"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
17
|
+
# delete this section to allow pushing this gem to any host.
|
18
|
+
if spec.respond_to?(:metadata)
|
19
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
20
|
+
else
|
21
|
+
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
22
|
+
end
|
23
|
+
|
24
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
spec.bindir = "bin"
|
26
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
27
|
+
spec.require_paths = ["lib"]
|
28
|
+
|
29
|
+
# spec.add_dependency 'activesupport', '>= 3.2.0'
|
30
|
+
# spec.add_dependency 'colored'
|
31
|
+
spec.add_dependency 'thor'
|
32
|
+
spec.add_dependency 'nokogiri'
|
33
|
+
# spec.add_dependency 'hashie'
|
34
|
+
# spec.add_dependency 'faraday'
|
35
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
36
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
37
|
+
spec.add_development_dependency 'pry'
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: metallum-cli
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rodrigo Muniz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
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: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.10'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: find any information about any artist, band, song, album, whatever at
|
84
|
+
Metal Archives
|
85
|
+
email:
|
86
|
+
- rodrigo.temiski1995@gmail.com
|
87
|
+
executables:
|
88
|
+
- metallum-cli
|
89
|
+
extensions: []
|
90
|
+
extra_rdoc_files: []
|
91
|
+
files:
|
92
|
+
- ".gitignore"
|
93
|
+
- Gemfile
|
94
|
+
- README.md
|
95
|
+
- Rakefile
|
96
|
+
- bin/metallum-cli
|
97
|
+
- lib/metallum-cli.rb
|
98
|
+
- lib/metallum-cli/app.rb
|
99
|
+
- lib/metallum-cli/configuration.rb
|
100
|
+
- lib/metallum-cli/helpers/album.rb
|
101
|
+
- lib/metallum-cli/helpers/artist.rb
|
102
|
+
- lib/metallum-cli/helpers/band.rb
|
103
|
+
- lib/metallum-cli/helpers/client.rb
|
104
|
+
- lib/metallum-cli/helpers/url.rb
|
105
|
+
- lib/metallum-cli/version.rb
|
106
|
+
- metallum-cli.gemspec
|
107
|
+
homepage: https://github.com/muniz95/metallum-cli
|
108
|
+
licenses:
|
109
|
+
- MIT
|
110
|
+
metadata: {}
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubyforge_project:
|
127
|
+
rubygems_version: 2.4.6
|
128
|
+
signing_key:
|
129
|
+
specification_version: 4
|
130
|
+
summary: CLI interface for Metal Archives searches
|
131
|
+
test_files: []
|