lyricit 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/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/LICENSE.txt +22 -0
- data/README.md +65 -0
- data/Rakefile +1 -0
- data/bin/lyricit +85 -0
- data/commands.txt +1 -0
- data/lib/lyricit/itunes.rb +66 -0
- data/lib/lyricit/lyrics_api.rb +31 -0
- data/lib/lyricit/make_it_personal.rb +15 -0
- data/lib/lyricit/version.rb +3 -0
- data/lib/lyricit.rb +8 -0
- data/lyricit.gemspec +24 -0
- metadata +101 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: afcb5bdba7847f1506392f43ba012d7cc38e3644
|
|
4
|
+
data.tar.gz: c56ae771cf1040a9b6dc8bd61f7f5d8ba673f275
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 6554014202e6ca60991bdb58cc85172d239e55830f3ccd42ce9b399b704bcdac8b52d83d2769a2ca5910c269f846c4bc2e667ed6bbe8f23ee9fc543449470427
|
|
7
|
+
data.tar.gz: 3f6cb0fbc185d368cb811ff419ca0731c5432e4c5f2b8aef82b4dbd18eeb0332590e5720478d6f6d04be1003388edff2c5857775b3addbe560e6bffc490cb431
|
data/.gitignore
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
*.gem
|
|
2
|
+
*.rbc
|
|
3
|
+
.bundle
|
|
4
|
+
.config
|
|
5
|
+
coverage
|
|
6
|
+
.yardoc
|
|
7
|
+
Gemfile.lock
|
|
8
|
+
InstalledFiles
|
|
9
|
+
_yardoc
|
|
10
|
+
coverage
|
|
11
|
+
doc/
|
|
12
|
+
lib/bundler/man
|
|
13
|
+
pkg
|
|
14
|
+
rdoc
|
|
15
|
+
spec/reports
|
|
16
|
+
test/tmp
|
|
17
|
+
test/version_tmp
|
|
18
|
+
tmp
|
|
19
|
+
# YARD artifacts
|
|
20
|
+
.yardoc
|
|
21
|
+
_yardoc
|
|
22
|
+
doc/
|
data/Gemfile
ADDED
data/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2013 Ankit Goyal
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
7
|
+
the Software without restriction, including without limitation the rights to
|
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
10
|
+
subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2013 Ankit Goyal
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Lyricit
|
|
2
|
+
|
|
3
|
+
Add lyrics to your itunes songs through command line.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
$ gem install lyricit
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
To update the lyrics for current song.
|
|
12
|
+
|
|
13
|
+
$ lyricit -c
|
|
14
|
+
|
|
15
|
+
To update the lyrics for a particular song
|
|
16
|
+
|
|
17
|
+
$ lyricit -s somebody
|
|
18
|
+
|
|
19
|
+
Above command will give you the list of songs matching the `somebody`
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
1 results found
|
|
23
|
+
|-----------------------------------------|
|
|
24
|
+
|Id | Name |
|
|
25
|
+
|
|
26
|
+
|-----------------------------------------|
|
|
27
|
+
|179 | Somebody That I Used To Know |
|
|
28
|
+
|-----------------------------------------|
|
|
29
|
+
Enter the Id for which you want the lyrics:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Enter the Id for the song you want to update. `179` in above example.
|
|
34
|
+
|
|
35
|
+
Now the lyrics will be displayed on the terminal.
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
"'Gotye:"'
|
|
40
|
+
Now and then I think of when we were together
|
|
41
|
+
Like when you said you felt so happy you could die
|
|
42
|
+
Told myself that you were right for me
|
|
43
|
+
But felt so lonely in your company
|
|
44
|
+
But that was love and it's an ache I still remember
|
|
45
|
+
...
|
|
46
|
+
|
|
47
|
+
Update on iTunes? [Y/n]:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Answer Y to the above question, if lyrics are what you expect.
|
|
52
|
+
|
|
53
|
+
## TODO
|
|
54
|
+
|
|
55
|
+
1. Add support for more APIs to fetch the song lyrics if first API fails.
|
|
56
|
+
2. Add search by artist name. Provide more options.
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
## Contributing
|
|
60
|
+
|
|
61
|
+
1. Fork it
|
|
62
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
63
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
64
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
65
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/lyricit
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'lyricit'
|
|
4
|
+
require 'optparse'
|
|
5
|
+
|
|
6
|
+
class UploadLyrics
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
@itunes = Lyricit::Itunes.new
|
|
10
|
+
@write_lyrics = false
|
|
11
|
+
@song_name = ""
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def ask_for_song_name
|
|
15
|
+
print "** type: lyricit -h to see all options **\n"
|
|
16
|
+
print "Enter song name: "
|
|
17
|
+
@song_name = STDIN.gets.chomp
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def find_by_name
|
|
21
|
+
results = @itunes.find_by_name @song_name
|
|
22
|
+
abort if results.nil?
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def ask_for_db_id
|
|
26
|
+
print "Enter the Id for which you want the lyrics: "
|
|
27
|
+
@db_id = STDIN.gets.chomp
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def get_lyrics
|
|
31
|
+
if $current
|
|
32
|
+
artist, name = @itunes.song_and_artist_by_current_track
|
|
33
|
+
if artist.strip == "" && name.strip == ""
|
|
34
|
+
print "Seems like you are not playing anything."
|
|
35
|
+
abort
|
|
36
|
+
end
|
|
37
|
+
@db_id = @itunes.db_id_of_current_track
|
|
38
|
+
else
|
|
39
|
+
artist, name = @itunes.song_and_artist_by_id @db_id
|
|
40
|
+
end
|
|
41
|
+
lyrics_api = Lyricit::LyricsApi.new artist, name
|
|
42
|
+
@lyrics = lyrics_api.get_lyrics
|
|
43
|
+
abort unless @lyrics
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def confirm_lyrics
|
|
47
|
+
print @lyrics
|
|
48
|
+
print "Update on iTunes? [Y/n]: "
|
|
49
|
+
update = STDIN.gets.chomp
|
|
50
|
+
@write_lyrics = update.downcase == 'y' ? true : false
|
|
51
|
+
abort unless @write_lyrics
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def write_lyrics
|
|
55
|
+
if @write_lyrics
|
|
56
|
+
@itunes.set_lyrics_by_id @db_id, @lyrics
|
|
57
|
+
print "Updated on iTunes!"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def run
|
|
62
|
+
unless $current
|
|
63
|
+
if $songname
|
|
64
|
+
@song_name = $songname
|
|
65
|
+
else
|
|
66
|
+
ask_for_song_name
|
|
67
|
+
end
|
|
68
|
+
find_by_name
|
|
69
|
+
ask_for_db_id
|
|
70
|
+
end
|
|
71
|
+
get_lyrics
|
|
72
|
+
confirm_lyrics
|
|
73
|
+
write_lyrics
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
OptionParser.new do |o|
|
|
78
|
+
o.on('-c', '--current','add lyrics for current song') { |b| $current = b }
|
|
79
|
+
o.on('-s SONGNAME', 'song name for which you want to add the lyrics') { |songname| $songname = songname }
|
|
80
|
+
o.on('-h') { puts o; exit }
|
|
81
|
+
o.parse!
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
upload_lyrics = UploadLyrics.new
|
|
85
|
+
upload_lyrics.run
|
data/commands.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
db_ids = `osascript -e "tell application \\"iTunes\\" to (get database ID of every track in current playlist)"`
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Lyricit
|
|
2
|
+
class Itunes
|
|
3
|
+
def song_and_artist_by_current_track
|
|
4
|
+
artist=%x(osascript -e 'tell application "iTunes" to artist of current track as string');
|
|
5
|
+
name=%x(osascript -e 'tell application "iTunes" to name of current track as string');
|
|
6
|
+
[artist, name]
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def song_and_artist_by_id db_id
|
|
10
|
+
return nil if db_id.strip == ""
|
|
11
|
+
artist = %x(osascript -e "tell application \\"iTunes\\" to get artist of (every track where database ID is #{db_id.strip})")
|
|
12
|
+
name = %x(osascript -e "tell application \\"iTunes\\" to get name of (every track where database ID is #{db_id.strip})")
|
|
13
|
+
[artist, name]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def db_id_of_current_track
|
|
17
|
+
%x(osascript -e 'tell application "iTunes" to database id of current track as string')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def add_lyrics lyrics, track
|
|
21
|
+
%x(osascript -e "tell application \\"iTunes\\" to set lyrics of current track to \\"#{lyrics}\\" ")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def set_lyrics_by_id db_id, lyrics
|
|
25
|
+
%x(osascript -e "tell application \\"iTunes\\" to set lyrics of (every track where database ID is #{db_id.strip}) to \\"#{lyrics}\\" ")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def find_by_name input
|
|
29
|
+
|
|
30
|
+
dirty_track_names = %x(osascript -e "tell application \\"iTunes\\" to name of tracks of library playlist 1")
|
|
31
|
+
track_names = dirty_track_names.split(',').map(&:strip)
|
|
32
|
+
|
|
33
|
+
matching_names = track_names.select{|v| v.downcase.match(/#{input.downcase}/)}
|
|
34
|
+
name_id = {}
|
|
35
|
+
matching_names.each do |name|
|
|
36
|
+
temp = %x(osascript -e "tell application \\"iTunes\\" to database id of (some track of library playlist 1 whose name is \\"#{name}\\")")
|
|
37
|
+
name_id[name] = temp.strip
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
print_matching_results name_id
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def print_matching_results name_id_hash
|
|
44
|
+
if name_id_hash.empty?
|
|
45
|
+
print "No results found. Please try again."
|
|
46
|
+
return
|
|
47
|
+
end
|
|
48
|
+
maxk = 0
|
|
49
|
+
maxv = 0
|
|
50
|
+
name_id_hash.map {|k,v| maxk = k.length if k.length > maxk; maxv = v.length if v.length > maxv}
|
|
51
|
+
maxv += 4; maxk += 4
|
|
52
|
+
|
|
53
|
+
print "\n#{name_id_hash.count} results found\n"
|
|
54
|
+
print "|#{'-'* (maxk + maxv + 2)}|\n"
|
|
55
|
+
print "|Id#{' '*(maxv - 2)}| Name#{' '*(maxk -4)}|\n\n"
|
|
56
|
+
print "|#{'-'* (maxk + maxv + 2)}|\n"
|
|
57
|
+
|
|
58
|
+
name_id_hash.each do |name, id|
|
|
59
|
+
print "|#{id}#{' ' * (maxv - id.length)}| #{name}#{' '* (maxk - name.length)}|\n"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
print "|#{'-'* (maxk + maxv + 2)}|\n"
|
|
63
|
+
return 0
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Lyricit
|
|
2
|
+
class LyricsApi
|
|
3
|
+
|
|
4
|
+
def initialize song_artist, song_name
|
|
5
|
+
@song = song_name
|
|
6
|
+
@artist = song_artist
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def get_lyrics
|
|
10
|
+
try_make_it_personal_api
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def try_make_it_personal_api
|
|
14
|
+
lyrics = Lyricit::MakeItPersonal.get_lyrics @song, @artist
|
|
15
|
+
|
|
16
|
+
case lyrics
|
|
17
|
+
when nil
|
|
18
|
+
puts "Something seems to be wrong with the API. Try after some time."
|
|
19
|
+
return nil
|
|
20
|
+
when :not_found
|
|
21
|
+
puts "Sorry could not find the lyrics for the requested song."
|
|
22
|
+
return nil
|
|
23
|
+
when :incomplete_info
|
|
24
|
+
puts "Either Artist or Song Title seems to be incorrect!"
|
|
25
|
+
return nil
|
|
26
|
+
else
|
|
27
|
+
return lyrics
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Lyricit
|
|
2
|
+
module MakeItPersonal
|
|
3
|
+
def self.get_lyrics name, artist
|
|
4
|
+
print "Getting Lyrics for:\nSong: #{name.strip}\nArtist: #{artist}"
|
|
5
|
+
return :incomplete_info if name.strip == "" || artist.strip == ""
|
|
6
|
+
res = Faraday.get("http://makeitpersonal.co/lyrics?artist=#{artist.strip}&title=#{name.strip}")
|
|
7
|
+
|
|
8
|
+
return nil if res.status.to_i != 200
|
|
9
|
+
|
|
10
|
+
return :not_found if res.body.include?("Sorry")
|
|
11
|
+
|
|
12
|
+
return res.body
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/lyricit.rb
ADDED
data/lyricit.gemspec
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'lyricit/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "lyricit"
|
|
8
|
+
spec.version = Lyricit::VERSION
|
|
9
|
+
spec.authors = ["Ankit Goyal"]
|
|
10
|
+
spec.email = ["ankit3goyal@gmail.com"]
|
|
11
|
+
spec.description = %q{Update lyrics on iTunes from command line.}
|
|
12
|
+
spec.summary = %q{Update lyrics on iTunes by simply giving the song name from command line.}
|
|
13
|
+
spec.homepage = "http://goyalankit.com"
|
|
14
|
+
spec.license = "MIT"
|
|
15
|
+
|
|
16
|
+
spec.files = `git ls-files`.split($/)
|
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
|
+
spec.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
|
22
|
+
spec.add_development_dependency "rake"
|
|
23
|
+
spec.add_development_dependency "faraday"
|
|
24
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: lyricit
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Ankit Goyal
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2013-12-24 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: bundler
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ~>
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.3'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ~>
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.3'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rake
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - '>='
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
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: faraday
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - '>='
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
description: Update lyrics on iTunes from command line.
|
|
56
|
+
email:
|
|
57
|
+
- ankit3goyal@gmail.com
|
|
58
|
+
executables:
|
|
59
|
+
- lyricit
|
|
60
|
+
extensions: []
|
|
61
|
+
extra_rdoc_files: []
|
|
62
|
+
files:
|
|
63
|
+
- .gitignore
|
|
64
|
+
- Gemfile
|
|
65
|
+
- LICENSE
|
|
66
|
+
- LICENSE.txt
|
|
67
|
+
- README.md
|
|
68
|
+
- Rakefile
|
|
69
|
+
- bin/lyricit
|
|
70
|
+
- commands.txt
|
|
71
|
+
- lib/lyricit.rb
|
|
72
|
+
- lib/lyricit/itunes.rb
|
|
73
|
+
- lib/lyricit/lyrics_api.rb
|
|
74
|
+
- lib/lyricit/make_it_personal.rb
|
|
75
|
+
- lib/lyricit/version.rb
|
|
76
|
+
- lyricit.gemspec
|
|
77
|
+
homepage: http://goyalankit.com
|
|
78
|
+
licenses:
|
|
79
|
+
- MIT
|
|
80
|
+
metadata: {}
|
|
81
|
+
post_install_message:
|
|
82
|
+
rdoc_options: []
|
|
83
|
+
require_paths:
|
|
84
|
+
- lib
|
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - '>='
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
|
+
requirements:
|
|
92
|
+
- - '>='
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '0'
|
|
95
|
+
requirements: []
|
|
96
|
+
rubyforge_project:
|
|
97
|
+
rubygems_version: 2.1.10
|
|
98
|
+
signing_key:
|
|
99
|
+
specification_version: 4
|
|
100
|
+
summary: Update lyrics on iTunes by simply giving the song name from command line.
|
|
101
|
+
test_files: []
|