taifu 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.
- data/.gitignore +21 -0
- data/Gemfile +4 -0
- data/README.md +31 -0
- data/Rakefile +1 -0
- data/bin/taifu +5 -0
- data/lib/taifu.rb +17 -0
- data/lib/taifu/app.rb +111 -0
- data/lib/taifu/version.rb +4 -0
- data/taifu.gemspec +23 -0
- metadata +71 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# taifu
|
2
|
+
taifu will bring YouTube sound to your iTunes library silently.
|
3
|
+
|
4
|
+
## Usage
|
5
|
+
|
6
|
+
Try
|
7
|
+
|
8
|
+
```
|
9
|
+
taifu http://www.youtube.com/watch?v=I1X6MrBfjrk
|
10
|
+
```
|
11
|
+
|
12
|
+
And check type 'taifu' at search box on your iTunes.
|
13
|
+
|
14
|
+
|
15
|
+
## Install
|
16
|
+
|
17
|
+
```
|
18
|
+
gem install taifu
|
19
|
+
```
|
20
|
+
|
21
|
+
# Supported OS
|
22
|
+
- OSX
|
23
|
+
|
24
|
+
## Dependencies
|
25
|
+
- ffmpeg
|
26
|
+
- youtube-dl
|
27
|
+
|
28
|
+
You can install these tools by homebrew.
|
29
|
+
|
30
|
+
## Licence
|
31
|
+
taifu is released into the public domain by the copyright holders.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/taifu
ADDED
data/lib/taifu.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'fileutils'
|
3
|
+
require 'appscript'
|
4
|
+
|
5
|
+
require "taifu/app"
|
6
|
+
require "taifu/version"
|
7
|
+
|
8
|
+
module Taifu
|
9
|
+
def hit
|
10
|
+
url = ARGV.first
|
11
|
+
if url.nil?
|
12
|
+
raise ArgumentError.new 'You need to specify URL. Try "taifu http://www.youtube.com/watch?v=I1X6MrBfjrk"'
|
13
|
+
end
|
14
|
+
App.new(url)
|
15
|
+
end
|
16
|
+
module_function :hit
|
17
|
+
end
|
data/lib/taifu/app.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
module Taifu
|
3
|
+
include Appscript
|
4
|
+
|
5
|
+
class App
|
6
|
+
REQUIRED_APPS = ['youtube-dl', 'ffmpeg']
|
7
|
+
|
8
|
+
def initialize(url)
|
9
|
+
return unless satisfied?
|
10
|
+
|
11
|
+
init_working_dir
|
12
|
+
|
13
|
+
save_wav_with(url)
|
14
|
+
add_track
|
15
|
+
|
16
|
+
logging "Done. Type 'taifu' on your iTunes", false
|
17
|
+
end
|
18
|
+
|
19
|
+
def init_working_dir
|
20
|
+
unless File.exist?(working_dir)
|
21
|
+
FileUtils.mkdir(working_dir)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def working_dir
|
26
|
+
home_dir = File.expand_path('~')
|
27
|
+
File.join(home_dir, '.taifu')
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_track
|
31
|
+
logging 'Add wav file to iTunes'
|
32
|
+
|
33
|
+
script = create_script
|
34
|
+
`osascript #{script}`
|
35
|
+
delete_script
|
36
|
+
|
37
|
+
delete_wav
|
38
|
+
end
|
39
|
+
|
40
|
+
def delete_wav
|
41
|
+
FileUtils.rm "#{working_dir}/taifu.wav"
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete_script
|
45
|
+
FileUtils.rm "#{working_dir}/track.scpt"
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_script
|
49
|
+
file_path = MacTypes::FileURL.path(File.expand_path("#{working_dir}/taifu.wav")).hfs_path
|
50
|
+
script_path = "#{working_dir}/track.scpt"
|
51
|
+
|
52
|
+
script = script_base.gsub('$file_path', file_path)
|
53
|
+
open(script_path, 'w') do |f|
|
54
|
+
f.write script
|
55
|
+
end
|
56
|
+
script_path
|
57
|
+
end
|
58
|
+
|
59
|
+
def save_wav_with(youtube_url)
|
60
|
+
url = youtube_url.split('&').first
|
61
|
+
wav_file = 'taifu.wav'
|
62
|
+
wav_path = "#{working_dir}/#{wav_file}"
|
63
|
+
|
64
|
+
logging 'Download data'
|
65
|
+
system "youtube-dl -q #{url} -o #{working_dir}/taifu.flv"
|
66
|
+
|
67
|
+
logging 'Save wav file'
|
68
|
+
system "ffmpeg -i #{working_dir}/taifu.flv #{wav_path} 2>/dev/null"
|
69
|
+
system "rm -f #{working_dir}/taifu.flv"
|
70
|
+
end
|
71
|
+
|
72
|
+
def satisfied?
|
73
|
+
REQUIRED_APPS.each do |app|
|
74
|
+
if `which #{app}`.empty?
|
75
|
+
messages = []
|
76
|
+
messages << "'#{app}' is not installed."
|
77
|
+
messages << "Try this command to install '#{app}'."
|
78
|
+
messages << ""
|
79
|
+
messages << " brew install #{app}"
|
80
|
+
messages << ""
|
81
|
+
raise RuntimeError, messages.join("\n")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
true
|
85
|
+
end
|
86
|
+
|
87
|
+
def logging(message, caption=true)
|
88
|
+
if caption
|
89
|
+
puts "[#{message}]..." if ENV['LOGGING']
|
90
|
+
else
|
91
|
+
puts message
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def script_base
|
96
|
+
<<-SCRIPT
|
97
|
+
tell application "iTunes"
|
98
|
+
set added_track to add "$file_path"
|
99
|
+
set loc to (get location of added_track)
|
100
|
+
convert added_track
|
101
|
+
delete added_track
|
102
|
+
|
103
|
+
tell application "Finder"
|
104
|
+
delete loc
|
105
|
+
end tell
|
106
|
+
end tell
|
107
|
+
SCRIPT
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
data/taifu.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "taifu/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "taifu"
|
7
|
+
s.version = Taifu::VERSION
|
8
|
+
s.authors = ["Ryo Katsuma"]
|
9
|
+
s.email = ["katsuma@gmail.com"]
|
10
|
+
s.homepage = "http://github.com/katsuma/taifu"
|
11
|
+
s.summary = %q{YouTube sound converter for iTunes}
|
12
|
+
s.description = %q{taifu will bring YouTube sound to your iTunes library silently}
|
13
|
+
|
14
|
+
s.rubyforge_project = "taifu"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
s.add_development_dependency "rb-appscript"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: taifu
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ryo Katsuma
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-09-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rb-appscript
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
description: taifu will bring YouTube sound to your iTunes library silently
|
31
|
+
email:
|
32
|
+
- katsuma@gmail.com
|
33
|
+
executables:
|
34
|
+
- taifu
|
35
|
+
extensions: []
|
36
|
+
extra_rdoc_files: []
|
37
|
+
files:
|
38
|
+
- .gitignore
|
39
|
+
- Gemfile
|
40
|
+
- README.md
|
41
|
+
- Rakefile
|
42
|
+
- bin/taifu
|
43
|
+
- lib/taifu.rb
|
44
|
+
- lib/taifu/app.rb
|
45
|
+
- lib/taifu/version.rb
|
46
|
+
- taifu.gemspec
|
47
|
+
homepage: http://github.com/katsuma/taifu
|
48
|
+
licenses: []
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options: []
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ! '>='
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
requirements: []
|
66
|
+
rubyforge_project: taifu
|
67
|
+
rubygems_version: 1.8.24
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: YouTube sound converter for iTunes
|
71
|
+
test_files: []
|