rget 2.1.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 763df07003efcec47e65ac5451134be3337b4a67
4
- data.tar.gz: 6177207f17ecfedaa34419b90f5f1e339dda937f
3
+ metadata.gz: 025b9f5f8c137bf257d8c267dc1586c43a2e9851
4
+ data.tar.gz: de457800bc506b8950548f7d7fca1b3b753840ac
5
5
  SHA512:
6
- metadata.gz: ffe7d01d105939fb1db3a3b652c4878a5543d6970f680583a8fb17568365ea34b502d1831535d86e62d0230ec9733b251ecc321fa55eec8309a2b47fdd049961
7
- data.tar.gz: 24bdd00f877774cd8b4f90d0879ab3148dabee61545e87e8fa08d1e237be53063c1057cd4184eb860e60eff51e487e2ec49f128e427c8657968c123a8c0a48f4
6
+ metadata.gz: 6ac3a4abdbba0cb87003feff1c584aecf87e13aa6eb1b018beb88d29631d634b13db49733febcaa882f06bf9cc74387ca3401a4b5e5fa9fc31c3bbfed2e5b49e
7
+ data.tar.gz: 31619930129f831a5ab63ec2ec4c8b0ae8b137cc19515e66b9316f79a138a7acd3c1f87f479c729cbceaa6f9f703c391c7aef9f789526317b6a1ddbfb7bce5b9
data/README.md CHANGED
@@ -14,4 +14,7 @@ For customize radio programs, copy `rget.yaml` to `~/.rget` or current work dire
14
14
 
15
15
  rget imas_cg # download and convert to mp3 THE iDOLM@STER Cinderella Girls Radio
16
16
  rget imastudio --no-mp3 # download imastudio only (saved .m4a file)
17
-
17
+ rget trysail --path=/home/hoge/radio
18
+ # srore mp3 file to specified directory
19
+ rget suzakinishi --path=dropbpx://radio
20
+ # store mp3 file to radio folder of Dropbox
data/bin/rget CHANGED
@@ -8,6 +8,7 @@ require 'podcast'
8
8
 
9
9
  class GetWebRadio < Thor
10
10
  class_option :mp3, type: :boolean, default:true, desc:'convert to mp3 with ffmpeg'
11
+ class_option :path, type: :string, desc:'store path (accept "dropbox://~")'
11
12
 
12
13
  config = nil
13
14
  [
data/lib/dropbox.rb ADDED
@@ -0,0 +1,36 @@
1
+ require "dropbox-api"
2
+ require "dropbox-api/tasks"
3
+ require 'pit'
4
+
5
+ module DropboxAuth
6
+ def self.client
7
+ token = Pit::get('rget-dropbox')
8
+ unless token[:api_key]
9
+ print "Enter dropbox app key: "
10
+ token[:api_key] = $stdin.gets.chomp
11
+ print "Enter dropbox app secret: "
12
+ token[:api_secret] = $stdin.gets.chomp
13
+ Pit::set('rget-dropbox', data: token)
14
+ end
15
+ Dropbox::API::Config.app_key = token[:api_key]
16
+ Dropbox::API::Config.app_secret = token[:api_secret]
17
+ Dropbox::API::Config.mode = 'dropbox'
18
+
19
+ unless token[:access_token]
20
+ consumer = Dropbox::API::OAuth.consumer(:authorize)
21
+ request_token = consumer.get_request_token
22
+ puts "\nGo to this url and click 'Authorize' to get the token:"
23
+ puts request_token.authorize_url
24
+ query = request_token.authorize_url.split('?').last
25
+ verifier, = CGI.parse(query)['oauth_token']
26
+ print "\nOnce you authorize the app on Dropbox, press enter... "
27
+ $stdin.gets
28
+ access_token = request_token.get_access_token(oauth_verifier: verifier)
29
+ token[:access_token] = access_token.token
30
+ token[:access_secret] = access_token.secret
31
+ Pit::set('rget-dropbox', data: token)
32
+ end
33
+
34
+ Dropbox::API::Client.new(token: token[:access_token], secret: token[:access_secret])
35
+ end
36
+ end
data/lib/webradio.rb CHANGED
@@ -35,6 +35,10 @@ class WebRadio
35
35
  raise 'do not instanciate directly, use WebRadio method.' if self.class == WebRadio
36
36
  @url = url
37
37
  @options = options
38
+ if @options.path =~ %r|^dropbox://|
39
+ require 'dropbox'
40
+ @dropbox = DropboxAuth.client
41
+ end
38
42
  end
39
43
 
40
44
  def download(name)
@@ -43,37 +47,88 @@ class WebRadio
43
47
 
44
48
  private
45
49
  def mp3ize(src, dst, delete_src = true)
50
+ if @options.mp3
51
+ if exist?(dst)
52
+ puts "#{dst} is existent, skipped."
53
+ return
54
+ end
55
+ else
56
+ if exist?(src)
57
+ puts "#{src} is existent, skipped."
58
+ return
59
+ end
60
+ end
61
+
62
+
46
63
  # download src file
47
- if !File.exist?(src) && !File.exist?(dst)
64
+ unless File.exist?(src)
48
65
  print "getting #{src}..."
49
66
  begin
50
67
  yield
51
68
  puts "done."
52
69
  rescue DownloadError => e
53
- puts "failed."
54
70
  File.delete(src) if File.exist?(src)
71
+ puts "failed."
55
72
  $stderr.puts e.message
56
73
  return
57
74
  end
58
75
  end
76
+ if !@options.mp3 || src == dst
77
+ move(src) if @options.path
78
+ return
79
+ end
59
80
 
60
81
  # convert to mp3
61
- return self unless @options.mp3
62
-
63
82
  print "converting to mp3..."
64
- if File.exist? dst
65
- puts "skipped."
83
+ result = Open3.capture3("ffmpeg -i #{src} -ab 64k #{dst}")
84
+ if result[2].to_i == 0
85
+ File.delete(src) if delete_src
86
+ puts "done."
66
87
  else
67
- result = Open3.capture3("ffmpeg -i #{src} -ab 64k #{dst}")
68
- if result[2].to_i == 0
69
- File.delete(src) if delete_src
88
+ File.delete(dst) if File.exist?(dst)
89
+ puts "failed."
90
+ $stderr.puts result[1]
91
+ return
92
+ end
93
+ move(dst) if @options.path
94
+ end
95
+
96
+ def exist?(dst)
97
+ if @dropbox
98
+ begin
99
+ !@dropbox.ls(dropbox_file(dst))[0]['is_deleted']
100
+ rescue Dropbox::API::Error::NotFound, NoMethodError
101
+ false
102
+ end
103
+ elsif @options.path
104
+ File.exist?(File.join(@options.path, dst))
105
+ else
106
+ File.exist?(dst)
107
+ end
108
+ end
109
+
110
+ def move(dst)
111
+ if @options.path
112
+ print "move to #{@options.path}..."
113
+ begin
114
+ if @dropbox
115
+ @dropbox.chunked_upload(dropbox_file(dst), open(dst))
116
+ File.delete(dst)
117
+ elsif @options.path
118
+ FileUtils.mv(dst, @options.path)
119
+ end
70
120
  puts "done."
71
- else
121
+ rescue => e
72
122
  puts "failed."
73
- $stderr.puts MediaConvertError.new(result[1])
123
+ $stderr.puts e.message
74
124
  end
75
125
  end
76
126
  end
127
+
128
+ def dropbox_file(file)
129
+ path = @options.path.sub(%r|^dropbox://|, '')
130
+ File.join(path, file)
131
+ end
77
132
  end
78
133
 
79
134
  def WebRadio(url, options)
data/lib/youtube.rb CHANGED
@@ -16,7 +16,7 @@ class YouTube < WebRadio
16
16
  @src = "#{name}##{'%02d' % serial}.mp4"
17
17
  @dst = "#{name}##{'%02d' % serial}.mp3"
18
18
  mp3ize(@src, @dst) do
19
- player_url = "http://www.youtube.com#{list[serial]}"
19
+ player_url = "https://www.youtube.com#{list[serial]}".sub(/&.*/, '')
20
20
  result = Open3.capture3("viddl-rb -u -q '*:*:mp4' '#{player_url}'")
21
21
  video_url = result[0].split.last.chomp
22
22
  open(@src, 'wb:ASCII-8BIT') do |o|
data/rget.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "rget"
7
- spec.version = "2.1.1"
7
+ spec.version = "2.2.0"
8
8
  spec.authors = ["TADA Tadashi"]
9
9
  spec.email = ["t@tdtds.jp"]
10
10
  spec.description = %q{Downloading newest radio programs on the web. Supported radio stations are hibiki, animate, onsen, seaside communications, niconico and youtube.}
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency "niconico", ">= 1.7.0"
23
23
  spec.add_runtime_dependency "viddl-rb"
24
24
  spec.add_runtime_dependency "pit"
25
+ spec.add_runtime_dependency "dropbox-api"
25
26
 
26
27
  spec.add_development_dependency "bundler", "~> 1.3"
27
28
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rget
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TADA Tadashi
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dropbox-api
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -138,6 +152,7 @@ files:
138
152
  - Rakefile
139
153
  - bin/rget
140
154
  - lib/animate.rb
155
+ - lib/dropbox.rb
141
156
  - lib/hibiki.rb
142
157
  - lib/nicovideo.rb
143
158
  - lib/onsen.rb