rget 4.8.4 → 4.9.0
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 +4 -4
- data/README.md +1 -1
- data/bin/{ulizadl → hls-dl} +3 -3
- data/lib/asobistore.rb +5 -5
- data/lib/freshlive.rb +6 -6
- data/lib/himalaya.rb +2 -2
- data/lib/{uliza.rb → hls.rb} +5 -5
- data/lib/nicovideo.rb +3 -3
- data/lib/onsen.rb +3 -3
- data/lib/podcast.rb +1 -1
- data/lib/webradio.rb +3 -3
- data/rget.gemspec +1 -1
- data/rget.yaml +5 -38
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eb55840b853e5fdb7a25521b025c3fb4cd18d164c8ad28c33896e113b1f2f5b2
|
|
4
|
+
data.tar.gz: 5ee1cde4d467a0cb7f641280bfbd663fba4f1d8eccca6c93a6946d61d8545128
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9329208c0d637d37b7c6e4f7dc7df19e8809b035e692b50571c6888ebab4d5e7548e5db110ad81c50991953ab7f36f0a6955c6bd3651e3e8a6607dd638925ae2
|
|
7
|
+
data.tar.gz: 2fd48e4acf50937d818e203cf47a9d9222a55707e20ca7ae23e40fcacd8d02640a886a28bfd8fbc3e5fd532ae18ef19f19b2d2e5adb9b72fe5e7f9b009c1760c
|
data/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Downloading newest radio programs on the web. Supported radio stations are:
|
|
|
7
7
|
* niconico
|
|
8
8
|
* freshlive.tv
|
|
9
9
|
* himalaya.fm
|
|
10
|
-
*
|
|
10
|
+
* Asobi Store
|
|
11
11
|
|
|
12
12
|
If you want to save files as MP3, needs `ffmpeg` command.
|
|
13
13
|
To download niconico video, also needs latest `youtube-dl` command (you can get it from `https://yt-dl.org/`), then specify niconico user ID and password to `~/.netrc` as:
|
data/bin/{ulizadl → hls-dl}
RENAMED
|
@@ -5,8 +5,8 @@ require 'open-uri'
|
|
|
5
5
|
require 'thread'
|
|
6
6
|
|
|
7
7
|
if ARGV.size != 2
|
|
8
|
-
$stderr.puts "
|
|
9
|
-
$stderr.puts "
|
|
8
|
+
$stderr.puts "high speed video downloader of Http Live Streaming (HLS)"
|
|
9
|
+
$stderr.puts "hls-dl <playlist.m3u8> <output(.ts)>"
|
|
10
10
|
exit 1
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -21,7 +21,7 @@ begin
|
|
|
21
21
|
agent.get(m3u8)
|
|
22
22
|
body = agent.page.body
|
|
23
23
|
rescue ArgumentError
|
|
24
|
-
body = open(m3u8, &:read)
|
|
24
|
+
body = URI.open(m3u8, &:read)
|
|
25
25
|
end
|
|
26
26
|
tses = body.scan(/.*\.ts.*/)
|
|
27
27
|
key_url = body.scan(/URI="(.*)"/).flatten.first
|
data/lib/asobistore.rb
CHANGED
|
@@ -10,9 +10,9 @@ class AsobiStore < WebRadio
|
|
|
10
10
|
|
|
11
11
|
def download
|
|
12
12
|
player = find_player(@url)
|
|
13
|
-
html = Nokogiri(open("https:#{player}").read)
|
|
13
|
+
html = Nokogiri(URI.open("https:#{player}").read)
|
|
14
14
|
src_m3u8 = html.css('source').first.attr('src')
|
|
15
|
-
m3u8 = "#{File.dirname(src_m3u8)}/#{open(src_m3u8).read.match(/^[^#].*/)[0]}"
|
|
15
|
+
m3u8 = "#{File.dirname(src_m3u8)}/#{URI.open(src_m3u8).read.match(/^[^#].*/)[0]}"
|
|
16
16
|
|
|
17
17
|
serial = html.title.scan(/#(\d+)/).flatten.first.to_i
|
|
18
18
|
@cover = "https:#{html.css('audio,video').first.attr('poster')}" unless @cover
|
|
@@ -24,7 +24,7 @@ class AsobiStore < WebRadio
|
|
|
24
24
|
agent.get(m3u8)
|
|
25
25
|
body = agent.page.body
|
|
26
26
|
rescue ArgumentError
|
|
27
|
-
body = open(m3u8, &:read)
|
|
27
|
+
body = URI.open(m3u8, &:read)
|
|
28
28
|
end
|
|
29
29
|
tses = body.scan(/.*\.ts.*/)
|
|
30
30
|
key_url = body.scan(/URI="(.*)"/).flatten.first
|
|
@@ -52,10 +52,10 @@ class AsobiStore < WebRadio
|
|
|
52
52
|
|
|
53
53
|
private
|
|
54
54
|
def find_player(url)
|
|
55
|
-
programs = Nokogiri(open(url).read)
|
|
55
|
+
programs = Nokogiri(URI.open(url).read)
|
|
56
56
|
programs.css('.list-main-product a.wrap').each do |program|
|
|
57
57
|
begin
|
|
58
|
-
return Nokogiri(open("https://asobistore.jp#{program.attr('href')}").read).css('iframe').last.attr('src')
|
|
58
|
+
return Nokogiri(URI.open("https://asobistore.jp#{program.attr('href')}").read).css('iframe').last.attr('src')
|
|
59
59
|
rescue # access denied because only access by premium members
|
|
60
60
|
next
|
|
61
61
|
end
|
data/lib/freshlive.rb
CHANGED
|
@@ -10,7 +10,7 @@ class FreshLive < WebRadio
|
|
|
10
10
|
archive = URI(File.join(@url + '/programs/archive'))
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
each_programs(Nokogiri(open(archive).read)) do |meta|
|
|
13
|
+
each_programs(Nokogiri(URI.open(archive).read)) do |meta|
|
|
14
14
|
begin
|
|
15
15
|
serial = meta['data']['title'].scan(/\d+$/).first.to_i
|
|
16
16
|
src = "#{@label}##{'%02d' % serial}.ts"
|
|
@@ -24,7 +24,7 @@ class FreshLive < WebRadio
|
|
|
24
24
|
print "getting #{src}..."
|
|
25
25
|
ts_list(meta['data']['archiveStreamUrl']).each_with_index do |u, i|
|
|
26
26
|
print '.' if i % 50 == 0
|
|
27
|
-
w.write(open(u, 'rb').read)
|
|
27
|
+
w.write(URI.open(u, 'rb').read)
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
end
|
|
@@ -62,7 +62,7 @@ class FreshLive < WebRadio
|
|
|
62
62
|
}
|
|
63
63
|
else
|
|
64
64
|
tag = Pathname(u.path).basename.to_s
|
|
65
|
-
meta = JSON.parse(Nokogiri(open(@url, &:read)).css('script').first)
|
|
65
|
+
meta = JSON.parse(Nokogiri(URI.open(@url, &:read)).css('script').first)
|
|
66
66
|
return {
|
|
67
67
|
tag => {
|
|
68
68
|
'desc' => meta['name'],
|
|
@@ -78,13 +78,13 @@ private
|
|
|
78
78
|
x = "//section[descendant::h1[contains(text(),'アーカイブ')]]//*[contains(@class,'ProgramTitle')]/a/@href"
|
|
79
79
|
html.xpath(x).each do |href|
|
|
80
80
|
id = Pathname(href.value).basename.to_s
|
|
81
|
-
yield JSON.parse(open("https://freshlive.tv/proxy/Programs;id=#{id}", &:read))
|
|
81
|
+
yield JSON.parse(URI.open("https://freshlive.tv/proxy/Programs;id=#{id}", &:read))
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
def ts_list(rate_m3u8)
|
|
86
|
-
ts_m3u8 = open(rate_m3u8).read.each_line.grep_v(/^#/)[1].chomp
|
|
87
|
-
open(URI(rate_m3u8) + ts_m3u8).read.each_line.grep_v(/^#/).map{|u|URI(rate_m3u8) + u.chomp}
|
|
86
|
+
ts_m3u8 = URI.open(rate_m3u8).read.each_line.grep_v(/^#/)[1].chomp
|
|
87
|
+
URI.open(URI(rate_m3u8) + ts_m3u8).read.each_line.grep_v(/^#/).map{|u|URI(rate_m3u8) + u.chomp}
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
def to_mp3(src)
|
data/lib/himalaya.rb
CHANGED
|
@@ -8,7 +8,7 @@ class Himalaya < WebRadio
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def download
|
|
11
|
-
html = open(@url).read
|
|
11
|
+
html = URI.open(@url).read
|
|
12
12
|
json_str = html.scan(/__NEXT_DATA__ = (.*)/).flatten.first
|
|
13
13
|
json = JSON.parse(json_str)
|
|
14
14
|
tracks = json['props']['seo']['albumData']['data']['tracks']['list']
|
|
@@ -22,7 +22,7 @@ class Himalaya < WebRadio
|
|
|
22
22
|
mp3_file = "#{@label}##{serial}.mp3"
|
|
23
23
|
mp3nize(m4a_file, mp3_file) do
|
|
24
24
|
open(m4a_file, 'wb:ASCII-8BIT') do |m4a|
|
|
25
|
-
m4a.write(open(m4a_url).read)
|
|
25
|
+
m4a.write(URI.open(m4a_url).read)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
data/lib/{uliza.rb → hls.rb}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
require 'webradio'
|
|
2
2
|
|
|
3
|
-
class
|
|
3
|
+
class HLS < WebRadio
|
|
4
4
|
private
|
|
5
|
-
def
|
|
5
|
+
def hls_download(name, html, serial_pattern, m3u_pattern)
|
|
6
6
|
serial = html.scan(serial_pattern).flatten.sort{|a,b| a.to_i <=> b.to_i}.last
|
|
7
7
|
@m4a_file = "#{name}##{serial}.m4a"
|
|
8
8
|
@mp3_file = @m4a_file.sub(/\.m4a$/, '.mp3')
|
|
@@ -11,18 +11,18 @@ private
|
|
|
11
11
|
unless m3u_meta2
|
|
12
12
|
raise WebRadio::DownloadError.new("recent radio program not found.")
|
|
13
13
|
end
|
|
14
|
-
m3u_meta1 = open(m3u_meta2, &:read)
|
|
14
|
+
m3u_meta1 = URI.open(m3u_meta2, &:read)
|
|
15
15
|
m3u = m3u_meta1.scan(/^[^#].*/).first
|
|
16
16
|
save_m4a(URI(m3u), @m4a_file)
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def get_m4a(uri_playlist)
|
|
21
|
-
open(uri_playlist).each_line do |l|
|
|
21
|
+
URI.open(uri_playlist).each_line do |l|
|
|
22
22
|
next if /^#/ =~ l
|
|
23
23
|
l.chomp!
|
|
24
24
|
print "."
|
|
25
|
-
yield open(uri_playlist + l, 'r:ASCII-8BIT', &:read)
|
|
25
|
+
yield URI.open(uri_playlist + l, 'r:ASCII-8BIT', &:read)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
data/lib/nicovideo.rb
CHANGED
|
@@ -74,11 +74,11 @@ private
|
|
|
74
74
|
video_url = nil
|
|
75
75
|
begin
|
|
76
76
|
begin
|
|
77
|
-
rss = RSS::Parser.parse(open(list_url).read)
|
|
77
|
+
rss = RSS::Parser.parse(URI.open(list_url).read)
|
|
78
78
|
item = rss.items[offset]
|
|
79
79
|
video_url = item.link
|
|
80
80
|
rescue RSS::NotWellFormedError
|
|
81
|
-
html = open(list_url, &:read)
|
|
81
|
+
html = URI.open(list_url, &:read)
|
|
82
82
|
url = html.scan(%r|/watch/[\w]+|)[offset]
|
|
83
83
|
raise WebRadio::DownloadError.new('video not found in this pege') unless url
|
|
84
84
|
video_url = "http://www.nicovideo.jp#{url}"
|
|
@@ -93,7 +93,7 @@ private
|
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
def thumbinfo(video, elem = nil)
|
|
96
|
-
xml = open("http://ext.nicovideo.jp/api/getthumbinfo/#{video.id}").read
|
|
96
|
+
xml = URI.open("http://ext.nicovideo.jp/api/getthumbinfo/#{video.id}").read
|
|
97
97
|
if elem
|
|
98
98
|
return xml.scan(%r|<#{elem}>(.*)</#{elem}>|m).flatten.first
|
|
99
99
|
else
|
data/lib/onsen.rb
CHANGED
|
@@ -15,7 +15,7 @@ class Onsen < WebRadio
|
|
|
15
15
|
|
|
16
16
|
def dump
|
|
17
17
|
tag = Pathname(@url).basename.to_s.gsub(%r|[-/]|, '_')
|
|
18
|
-
html = Nokogiri(open(@url, &:read))
|
|
18
|
+
html = Nokogiri(URI.open(@url, &:read))
|
|
19
19
|
title = html.css('#outLineWrap h1').text
|
|
20
20
|
return {
|
|
21
21
|
tag => {
|
|
@@ -28,7 +28,7 @@ class Onsen < WebRadio
|
|
|
28
28
|
|
|
29
29
|
private
|
|
30
30
|
def onsen_download(name, program_id)
|
|
31
|
-
html = Nokogiri(open('http://onsen.ag/', 'User-Agent' => 'iPhone', &:read))
|
|
31
|
+
html = Nokogiri(URI.open('http://onsen.ag/', 'User-Agent' => 'iPhone', &:read))
|
|
32
32
|
begin
|
|
33
33
|
serial = html.css("##{program_id}").text.scan(/#(\d+)/).flatten.first
|
|
34
34
|
mp3_url = html.css('form[target=_self]').select {|form|
|
|
@@ -41,7 +41,7 @@ private
|
|
|
41
41
|
mp3_file = "#{name}##{serial}.mp3"
|
|
42
42
|
mp3nize(src_file, mp3_file, false) do
|
|
43
43
|
open(src_file, 'wb:ASCII-8BIT') do |mp3|
|
|
44
|
-
mp3.write open(mp3_url, 'rb:ASCII-8BIT', &:read)
|
|
44
|
+
mp3.write URI.open(mp3_url, 'rb:ASCII-8BIT', &:read)
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
end
|
data/lib/podcast.rb
CHANGED
data/lib/webradio.rb
CHANGED
|
@@ -132,13 +132,13 @@ private
|
|
|
132
132
|
end
|
|
133
133
|
|
|
134
134
|
def cover_image_as_url
|
|
135
|
-
open(@cover, 'rb', &:read)
|
|
135
|
+
URI.open(@cover, 'rb', &:read)
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
def cover_image_as_xpath
|
|
139
|
-
html = Nokogiri(open(@url, &:read))
|
|
139
|
+
html = Nokogiri(URI.open(@url, &:read))
|
|
140
140
|
image_url = (URI(@url) + (html.xpath(@cover)[0].text)).to_s
|
|
141
|
-
open(image_url, 'r:ASCII-8BIT', &:read)
|
|
141
|
+
URI.open(image_url, 'r:ASCII-8BIT', &:read)
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
def exist?(dst)
|
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 = "4.
|
|
7
|
+
spec.version = "4.9.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, onsen, niconico, freshlive, himalaya and asobi store.}
|
data/rget.yaml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
options:
|
|
2
|
-
mp3nize: ffmpeg -i '$1' -vn -acodec copy '$2' || ffmpeg -i '$1' -vn -y -ab
|
|
2
|
+
mp3nize: ffmpeg -i '$1' -vn -acodec copy '$2' || ffmpeg -i '$1' -vn -y -ab 128k '$2'
|
|
3
3
|
programs:
|
|
4
4
|
imas_cg:
|
|
5
5
|
desc: デレラジ☆
|
|
@@ -15,44 +15,11 @@ programs:
|
|
|
15
15
|
url: http://ch.nicovideo.jp/search/%E6%B4%B2%E5%B4%8E%E8%A5%BF?channel_id=ch2589908&mode=s&sort=f&order=d&type=video
|
|
16
16
|
label: 洲崎西
|
|
17
17
|
cover: https://pbs.twimg.com/profile_images/836214019849506818/kXSasy1Y.jpg
|
|
18
|
-
takamori:
|
|
19
|
-
desc: 高森重戦舎 (声優バラエティ専門「声フレ」チャンネル内)
|
|
20
|
-
url: https://freshlive.tv/seifre
|
|
21
|
-
label: 高森重戦舎
|
|
22
|
-
bahamut:
|
|
23
|
-
desc: ラジオ神撃のバハムート
|
|
24
|
-
url: http://hibiki-radio.jp/description/bahamut
|
|
25
|
-
label: バハムート
|
|
26
|
-
ssc:
|
|
27
|
-
desc: 春佳・彩花のSSちゃんねる
|
|
28
|
-
url: http://ch.nicovideo.jp/search/SS%E3%81%A1%E3%82%83%E3%82%93%E3%81%AD%E3%82%8B?channel_id=ch2589908&mode=s&sort=f&order=d&type=video
|
|
29
|
-
label: 春佳・彩花のSSちゃんねる
|
|
30
|
-
remake:
|
|
31
|
-
desc: りめいく!
|
|
32
|
-
url: http://ch.nicovideo.jp/search/%E3%82%8A%E3%82%81%E3%81%84%E3%81%8F?channel_id=ch2589908&mode=s&sort=f&order=d&type=video
|
|
33
|
-
label: りめいく!
|
|
34
|
-
adlib:
|
|
35
|
-
desc: あどりぶ
|
|
36
|
-
url: http://ch.nicovideo.jp/search/%E3%81%82%E3%81%A9%E3%82%8A%E3%81%B6?channel_id=ch2589908&mode=s&sort=f&order=d&type=video
|
|
37
|
-
label: あどりぶ
|
|
38
|
-
trysail:
|
|
39
|
-
desc: TrySailのTRYangle harmony
|
|
40
|
-
url: http://ch.nicovideo.jp/search/TrySail?channel_id=ch2585696&mode=s&sort=f&order=d&type=video
|
|
41
|
-
label: トラハモ
|
|
42
|
-
banpresto:
|
|
43
|
-
desc: アイドルマスターWebラジオ~バンプレストスペシャル~
|
|
44
|
-
url: http://ch.nicovideo.jp/search/IDOLM@STER?channel_id=ch346&mode=s&sort=f&order=d&type=video
|
|
45
|
-
label: バンプレスト
|
|
46
|
-
rebuild:
|
|
47
|
-
desc: Rebuild.fm
|
|
48
|
-
url: http://feeds.rebuild.fm/rebuildfm
|
|
49
|
-
label: rebuildfm
|
|
50
|
-
podcast: true
|
|
51
|
-
taneharu:
|
|
52
|
-
desc: ラジオ「たねさんはるさんとはなそ。(意志)」
|
|
53
|
-
url: http://m.himalaya.fm/jp/podcast/190452
|
|
54
|
-
label: たねさんはるさんとはなそ。(意志)
|
|
55
18
|
shiny_radio:
|
|
56
19
|
desc: ラジオ「アイドルマスター シャイニーカラーズ はばたきラジオステーション」
|
|
57
20
|
url: https://asobistore.jp/special/List?ip_seq%5B%5D=1&ip_seq%5B%5D=14&tag_seq%5B%5D=1
|
|
58
21
|
label: シャニラジ
|
|
22
|
+
luminesan:
|
|
23
|
+
desc: ル美子さん
|
|
24
|
+
url: https://ch.nicovideo.jp/luminesan/video?rss=2.0
|
|
25
|
+
label: ル美子さん
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rget
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- TADA Tadashi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-
|
|
11
|
+
date: 2019-12-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
@@ -156,8 +156,8 @@ email:
|
|
|
156
156
|
- t@tdtds.jp
|
|
157
157
|
executables:
|
|
158
158
|
- add_mp3info
|
|
159
|
+
- hls-dl
|
|
159
160
|
- rget
|
|
160
|
-
- ulizadl
|
|
161
161
|
extensions: []
|
|
162
162
|
extra_rdoc_files: []
|
|
163
163
|
files:
|
|
@@ -168,17 +168,17 @@ files:
|
|
|
168
168
|
- README.md
|
|
169
169
|
- Rakefile
|
|
170
170
|
- bin/add_mp3info
|
|
171
|
+
- bin/hls-dl
|
|
171
172
|
- bin/rget
|
|
172
|
-
- bin/ulizadl
|
|
173
173
|
- lib/asobistore.rb
|
|
174
174
|
- lib/dropbox.rb
|
|
175
175
|
- lib/freshlive.rb
|
|
176
176
|
- lib/hibiki.rb
|
|
177
177
|
- lib/himalaya.rb
|
|
178
|
+
- lib/hls.rb
|
|
178
179
|
- lib/nicovideo.rb
|
|
179
180
|
- lib/onsen.rb
|
|
180
181
|
- lib/podcast.rb
|
|
181
|
-
- lib/uliza.rb
|
|
182
182
|
- lib/webradio.rb
|
|
183
183
|
- rget.gemspec
|
|
184
184
|
- rget.yaml
|