rubytube 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/rubytube/cipher.rb +2 -1
- data/lib/rubytube/client.rb +8 -0
- data/lib/rubytube/stream.rb +8 -0
- data/lib/rubytube/stream_format.rb +152 -0
- data/lib/rubytube/stream_query.rb +6 -1
- data/lib/rubytube/version.rb +1 -1
- data/lib/rubytube.rb +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cc85afbbd2fe5d5810318f9cf2c7bc16c0194d10e3919673ae393991b28e473
|
4
|
+
data.tar.gz: 8e7c4102505799239962d99f8697cce2457c8d46aef47f46595a65bda35fd6e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01aab01de46c366279769feefeaa6f9bde56da54eaf1febbba266834dc17772c57707272a239aa7b1ec8d2d23bf805ff9d7f9cae77b2182f35aeff442bd22510
|
7
|
+
data.tar.gz: e7d289d421ad60bff7e84022ba11926a2108a32cd63be2d3d768550f500cf66b9373ecc6c142b3ed61cbbc454096b7b9e4cf019d8267e57aeee359d09bb17ebd
|
data/README.md
CHANGED
data/lib/rubytube/cipher.rb
CHANGED
@@ -140,7 +140,7 @@ module RubyTube
|
|
140
140
|
mapper
|
141
141
|
end
|
142
142
|
|
143
|
-
def reverse(arr)
|
143
|
+
def reverse(arr, _ = nil)
|
144
144
|
# Ruby equivalent of JavaScript's Array.reverse()
|
145
145
|
arr.reverse!
|
146
146
|
end
|
@@ -155,6 +155,7 @@ module RubyTube
|
|
155
155
|
temp = arr[0]
|
156
156
|
arr[0] = arr[index.to_i % arr.length]
|
157
157
|
arr[index.to_i % arr.length] = temp
|
158
|
+
arr
|
158
159
|
end
|
159
160
|
|
160
161
|
def push(arr, val)
|
data/lib/rubytube/client.rb
CHANGED
@@ -99,6 +99,14 @@ module RubyTube
|
|
99
99
|
@streams = StreamQuery.new(fmt_streams)
|
100
100
|
end
|
101
101
|
|
102
|
+
def thumbnail_url
|
103
|
+
thumbs = vid_info.fetch('videoDetails', {}).fetch('thumbnail', {}).fetch('thumbnails', [])
|
104
|
+
|
105
|
+
return thumbs[-1]['url'] if thumbs.size > 0
|
106
|
+
|
107
|
+
"https://img.youtube.com/vi/#{ideo_id}/maxresdefault.jpg"
|
108
|
+
end
|
109
|
+
|
102
110
|
def vid_info
|
103
111
|
return @vid_info if @vid_info
|
104
112
|
|
data/lib/rubytube/stream.rb
CHANGED
@@ -61,6 +61,10 @@ module RubyTube
|
|
61
61
|
monostate.title
|
62
62
|
end
|
63
63
|
|
64
|
+
def resolution
|
65
|
+
stream_format.resolution
|
66
|
+
end
|
67
|
+
|
64
68
|
private
|
65
69
|
|
66
70
|
def get_file_path(filename, output_dir, prefix = '')
|
@@ -77,5 +81,9 @@ module RubyTube
|
|
77
81
|
def default_filename
|
78
82
|
"#{monostate.title}.#{subtype}"
|
79
83
|
end
|
84
|
+
|
85
|
+
def stream_format
|
86
|
+
@stream_format ||= StreamFormat.new(itag)
|
87
|
+
end
|
80
88
|
end
|
81
89
|
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
module RubyTube
|
2
|
+
class StreamFormat
|
3
|
+
PROGRESSIVE_VIDEO = {
|
4
|
+
5 => ["240p", "64kbps"],
|
5
|
+
6 => ["270p", "64kbps"],
|
6
|
+
13 => ["144p", nil],
|
7
|
+
17 => ["144p", "24kbps"],
|
8
|
+
18 => ["360p", "96kbps"],
|
9
|
+
22 => ["720p", "192kbps"],
|
10
|
+
34 => ["360p", "128kbps"],
|
11
|
+
35 => ["480p", "128kbps"],
|
12
|
+
36 => ["240p", nil],
|
13
|
+
37 => ["1080p", "192kbps"],
|
14
|
+
38 => ["3072p", "192kbps"],
|
15
|
+
43 => ["360p", "128kbps"],
|
16
|
+
44 => ["480p", "128kbps"],
|
17
|
+
45 => ["720p", "192kbps"],
|
18
|
+
46 => ["1080p", "192kbps"],
|
19
|
+
59 => ["480p", "128kbps"],
|
20
|
+
78 => ["480p", "128kbps"],
|
21
|
+
82 => ["360p", "128kbps"],
|
22
|
+
83 => ["480p", "128kbps"],
|
23
|
+
84 => ["720p", "192kbps"],
|
24
|
+
85 => ["1080p", "192kbps"],
|
25
|
+
91 => ["144p", "48kbps"],
|
26
|
+
92 => ["240p", "48kbps"],
|
27
|
+
93 => ["360p", "128kbps"],
|
28
|
+
94 => ["480p", "128kbps"],
|
29
|
+
95 => ["720p", "256kbps"],
|
30
|
+
96 => ["1080p", "256kbps"],
|
31
|
+
100 => ["360p", "128kbps"],
|
32
|
+
101 => ["480p", "192kbps"],
|
33
|
+
102 => ["720p", "192kbps"],
|
34
|
+
132 => ["240p", "48kbps"],
|
35
|
+
151 => ["720p", "24kbps"],
|
36
|
+
300 => ["720p", "128kbps"],
|
37
|
+
301 => ["1080p", "128kbps"],
|
38
|
+
}
|
39
|
+
|
40
|
+
DASH_VIDEO = {
|
41
|
+
133 => ["240p", nil],
|
42
|
+
134 => ["360p", nil],
|
43
|
+
135 => ["480p", nil],
|
44
|
+
136 => ["720p", nil],
|
45
|
+
137 => ["1080p", nil],
|
46
|
+
138 => ["2160p", nil],
|
47
|
+
160 => ["144p", nil],
|
48
|
+
167 => ["360p", nil],
|
49
|
+
168 => ["480p", nil],
|
50
|
+
169 => ["720p", nil],
|
51
|
+
170 => ["1080p", nil],
|
52
|
+
212 => ["480p", nil],
|
53
|
+
218 => ["480p", nil],
|
54
|
+
219 => ["480p", nil],
|
55
|
+
242 => ["240p", nil],
|
56
|
+
243 => ["360p", nil],
|
57
|
+
244 => ["480p", nil],
|
58
|
+
245 => ["480p", nil],
|
59
|
+
246 => ["480p", nil],
|
60
|
+
247 => ["720p", nil],
|
61
|
+
248 => ["1080p", nil],
|
62
|
+
264 => ["1440p", nil],
|
63
|
+
266 => ["2160p", nil],
|
64
|
+
271 => ["1440p", nil],
|
65
|
+
272 => ["4320p", nil],
|
66
|
+
278 => ["144p", nil],
|
67
|
+
298 => ["720p", nil],
|
68
|
+
299 => ["1080p", nil],
|
69
|
+
302 => ["720p", nil],
|
70
|
+
303 => ["1080p", nil],
|
71
|
+
308 => ["1440p", nil],
|
72
|
+
313 => ["2160p", nil],
|
73
|
+
315 => ["2160p", nil],
|
74
|
+
330 => ["144p", nil],
|
75
|
+
331 => ["240p", nil],
|
76
|
+
332 => ["360p", nil],
|
77
|
+
333 => ["480p", nil],
|
78
|
+
334 => ["720p", nil],
|
79
|
+
335 => ["1080p", nil],
|
80
|
+
336 => ["1440p", nil],
|
81
|
+
337 => ["2160p", nil],
|
82
|
+
394 => ["144p", nil],
|
83
|
+
395 => ["240p", nil],
|
84
|
+
396 => ["360p", nil],
|
85
|
+
397 => ["480p", nil],
|
86
|
+
398 => ["720p", nil],
|
87
|
+
399 => ["1080p", nil],
|
88
|
+
400 => ["1440p", nil],
|
89
|
+
401 => ["2160p", nil],
|
90
|
+
402 => ["4320p", nil],
|
91
|
+
571 => ["4320p", nil],
|
92
|
+
694 => ["144p", nil],
|
93
|
+
695 => ["240p", nil],
|
94
|
+
696 => ["360p", nil],
|
95
|
+
697 => ["480p", nil],
|
96
|
+
698 => ["720p", nil],
|
97
|
+
699 => ["1080p", nil],
|
98
|
+
700 => ["1440p", nil],
|
99
|
+
701 => ["2160p", nil],
|
100
|
+
702 => ["4320p", nil]
|
101
|
+
}
|
102
|
+
|
103
|
+
DASH_AUDIO = {
|
104
|
+
139 => [nil, "48kbps"],
|
105
|
+
140 => [nil, "128kbps"],
|
106
|
+
141 => [nil, "256kbps"],
|
107
|
+
171 => [nil, "128kbps"],
|
108
|
+
172 => [nil, "256kbps"],
|
109
|
+
249 => [nil, "50kbps"],
|
110
|
+
250 => [nil, "70kbps"],
|
111
|
+
251 => [nil, "160kbps"],
|
112
|
+
256 => [nil, "192kbps"],
|
113
|
+
258 => [nil, "384kbps"],
|
114
|
+
325 => [nil, nil],
|
115
|
+
328 => [nil, nil],
|
116
|
+
}
|
117
|
+
|
118
|
+
ITAGS = {
|
119
|
+
**PROGRESSIVE_VIDEO,
|
120
|
+
**DASH_VIDEO,
|
121
|
+
**DASH_AUDIO
|
122
|
+
}
|
123
|
+
|
124
|
+
HDR = [330, 331, 332, 333, 334, 335, 336, 337]
|
125
|
+
FORMAT_3D = [82, 83, 84, 85, 100, 101, 102]
|
126
|
+
LIVE = [91, 92, 93, 94, 95, 96, 132, 151]
|
127
|
+
|
128
|
+
attr_reader :itag, :resolution, :abr
|
129
|
+
|
130
|
+
def initialize(_itag)
|
131
|
+
@itag = _itag
|
132
|
+
|
133
|
+
@resolution, @abr = ITAGS.fetch(itag)
|
134
|
+
end
|
135
|
+
|
136
|
+
def is_live?
|
137
|
+
!!LIVE[itag]
|
138
|
+
end
|
139
|
+
|
140
|
+
def is_3d?
|
141
|
+
!!FORMAT_3D[itag]
|
142
|
+
end
|
143
|
+
|
144
|
+
def is_hdr?
|
145
|
+
!!HDR[itag]
|
146
|
+
end
|
147
|
+
|
148
|
+
def is_dash?
|
149
|
+
!!DASH_AUDIO[itag] || !!DASH_VIDEO[itag]
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -7,12 +7,13 @@ module RubyTube
|
|
7
7
|
@streams = fmt_streams
|
8
8
|
end
|
9
9
|
|
10
|
-
def filter(file_extension: nil, only_audio: false, only_video: false)
|
10
|
+
def filter(file_extension: nil, only_audio: false, only_video: false, resolution: nil)
|
11
11
|
filters = []
|
12
12
|
|
13
13
|
filters << ->(stream) { stream.subtype == file_extension } if file_extension
|
14
14
|
filters << ->(stream) { stream.is_audio? } if only_audio
|
15
15
|
filters << ->(stream) { stream.is_video? } if only_video
|
16
|
+
filters << ->(stream) { stream.resolution == resolution } if resolution
|
16
17
|
|
17
18
|
r = streams
|
18
19
|
filters.each do |f|
|
@@ -29,5 +30,9 @@ module RubyTube
|
|
29
30
|
def get_by_itag(itag)
|
30
31
|
streams.find { |s| s.itag == itag }
|
31
32
|
end
|
33
|
+
|
34
|
+
def get_by_resolution(resolution)
|
35
|
+
streams.find { |s| s.resolution == resolution }
|
36
|
+
end
|
32
37
|
end
|
33
38
|
end
|
data/lib/rubytube/version.rb
CHANGED
data/lib/rubytube.rb
CHANGED
@@ -12,6 +12,7 @@ require_relative 'rubytube/innertube'
|
|
12
12
|
require_relative 'rubytube/monostate'
|
13
13
|
require_relative 'rubytube/parser'
|
14
14
|
require_relative 'rubytube/request'
|
15
|
+
require_relative 'rubytube/stream_format'
|
15
16
|
require_relative 'rubytube/stream_query'
|
16
17
|
require_relative 'rubytube/stream'
|
17
18
|
require_relative 'rubytube/utils'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubytube
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nightswinger
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-09-
|
11
|
+
date: 2023-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- lib/rubytube/parser.rb
|
63
63
|
- lib/rubytube/request.rb
|
64
64
|
- lib/rubytube/stream.rb
|
65
|
+
- lib/rubytube/stream_format.rb
|
65
66
|
- lib/rubytube/stream_query.rb
|
66
67
|
- lib/rubytube/utils.rb
|
67
68
|
- lib/rubytube/version.rb
|
@@ -81,7 +82,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
82
|
requirements:
|
82
83
|
- - ">="
|
83
84
|
- !ruby/object:Gem::Version
|
84
|
-
version: 2.
|
85
|
+
version: 2.7.0
|
85
86
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
87
|
requirements:
|
87
88
|
- - ">="
|