getvideo 0.0.5 → 0.0.6
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 +11 -10
- data/lib/getvideo.rb +3 -1
- data/lib/getvideo/sina.rb +49 -135
- data/lib/getvideo/tudou.rb +15 -7
- data/lib/getvideo/version.rb +1 -1
- data/lib/getvideo/youku.rb +17 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 966b2b18dc31ed75dc68aa6be526dd4a007ccba9
|
4
|
+
data.tar.gz: 5d7a0212afab5c185fc3785009efa84cceca5ecf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cec3ea5db8dd89ad25834ec2288513f460d10ca327b884be0fdc8d9726e42d6f9f39d45f7b77d82d34849146a72e0f98fd98d09eae1e3b969d2be15a31dd493b
|
7
|
+
data.tar.gz: 8661946a3c84fe918f9643b2e84ef79042030ec7fc1df9024f247dbf6bb6f27c7e61418d44489ffda6ceb6f5311d74de50ebee2eb5e5d641ff06f99412538b96
|
data/README.md
CHANGED
@@ -34,15 +34,16 @@ check faraday, multi_json, nokogiri gems installed
|
|
34
34
|
require 'getvideo'
|
35
35
|
|
36
36
|
video = Getvideo.parse "http://videourl.com/info"
|
37
|
-
video.cover
|
38
|
-
video.id
|
39
|
-
video.html_url
|
40
|
-
video.title
|
41
|
-
video.media
|
42
|
-
video.flash
|
43
|
-
video.play_media
|
44
|
-
video.json
|
45
|
-
|
37
|
+
video.cover # 视频网站提供的截图或封面
|
38
|
+
video.id #视频的ID,用来在视频网站查询视频
|
39
|
+
video.html_url #视频的源url
|
40
|
+
video.title #视频的标题
|
41
|
+
video.media #获取视频内容 {"mp4" => "http://mp4 play url", "hlv" => "http://hlv"}
|
42
|
+
video.flash #视频flash格式
|
43
|
+
video.play_media #已获取视频内容,选取一条作为播放内容
|
44
|
+
video.json #以json格式显示
|
45
|
+
```
|
46
|
+
|
46
47
|
## Contributing
|
47
48
|
|
48
49
|
1. Fork it
|
@@ -53,4 +54,4 @@ check faraday, multi_json, nokogiri gems installed
|
|
53
54
|
|
54
55
|
## Thanks
|
55
56
|
|
56
|
-
get more video you can access [you-get](https://github.com/soimort/you-get)
|
57
|
+
get more video you can access [you-get](https://github.com/soimort/you-get)
|
data/lib/getvideo.rb
CHANGED
data/lib/getvideo/sina.rb
CHANGED
@@ -1,180 +1,94 @@
|
|
1
1
|
#coding:utf-8
|
2
|
+
require 'digest/md5'
|
2
3
|
|
3
4
|
module Getvideo
|
4
5
|
class Sina < Video
|
5
|
-
set_api_uri
|
6
|
+
set_api_uri do
|
7
|
+
rand = "0.#{rand(10000..10000000)}#{rand(10000..10000000)}"
|
8
|
+
"http://v.iask.com/v_play.php?vid=#{id}&ran=#{rand}&p=i&k=#{get_k(id, rand)}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def ipad_response
|
12
|
+
@ipad_response ||= ipad_connection
|
13
|
+
end
|
6
14
|
|
7
15
|
def initialize(url)
|
8
|
-
|
9
|
-
|
16
|
+
super
|
17
|
+
parse_page if !(is_flash_url? || is_subject_url?)
|
10
18
|
end
|
11
19
|
|
12
|
-
def
|
13
|
-
|
20
|
+
def id
|
21
|
+
return url.match(/vid=(\d+)/).to_a[1] if is_flash_url?
|
22
|
+
return url.match(/#(\d+)/).to_a[1] if is_subject_url?
|
23
|
+
page.match(/vid[\s]*:[\s]*["|']?[\s]*(\d+)[\s]*["|']?/).to_a[1]
|
14
24
|
end
|
15
25
|
|
16
|
-
def
|
17
|
-
|
26
|
+
def cover
|
27
|
+
return "" if is_flash_url? || is_subject_url?
|
28
|
+
page.match(/pic[\s]*:[\s]*["|']?[\s]*([^'|"]+)?/).to_a[1]
|
18
29
|
end
|
19
30
|
|
20
31
|
def html_url
|
21
|
-
if
|
22
|
-
|
23
|
-
url
|
24
|
-
else
|
25
|
-
"http://video.sina.com.cn/v/b/#{@id}-#{@uid}.html"
|
26
|
-
end
|
27
|
-
else
|
28
|
-
""
|
29
|
-
end
|
32
|
+
return "" if is_flash_url?
|
33
|
+
url
|
30
34
|
end
|
31
35
|
|
32
36
|
def title
|
33
|
-
|
34
|
-
info_response.scan(/title:'([^']+)'/)[0][0]
|
35
|
-
else
|
36
|
-
response["vname"]
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def cover
|
41
|
-
if has_html?
|
42
|
-
pic = info_response.scan(/pic:'([^']+)'/)
|
43
|
-
pic.empty? ? "" : pic[0][0]
|
44
|
-
else
|
45
|
-
""
|
46
|
-
end
|
37
|
+
response["video"]["vname"]
|
47
38
|
end
|
48
39
|
|
49
40
|
def flash
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
unless flash_url.empty?
|
55
|
-
flash_url[0][0]
|
56
|
-
else
|
57
|
-
""
|
58
|
-
end
|
59
|
-
end
|
41
|
+
return url if is_flash_url?
|
42
|
+
return "" if is_subject_url?
|
43
|
+
return "" if !page
|
44
|
+
page.match(/swfOutsideUrl[\s]*:[\s]*["|']?[\s]*([^'|"]+)/).to_a[1]
|
60
45
|
end
|
61
46
|
|
62
47
|
def m3u8
|
63
|
-
if
|
64
|
-
|
65
|
-
media["mp4"][0]
|
66
|
-
end
|
48
|
+
if !(is_flash_url? || is_subject_url?)
|
49
|
+
ipad_response["video"]["durl"]["url"]
|
67
50
|
else
|
68
51
|
""
|
69
52
|
end
|
70
53
|
end
|
71
54
|
|
72
|
-
def id
|
73
|
-
@id
|
74
|
-
end
|
75
|
-
|
76
55
|
def media
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
if res["video"]["result"] != "error"
|
82
|
-
vedio_list["hlv"] << res["video"]["durl"]["url"]
|
83
|
-
end
|
56
|
+
video_list = {}
|
57
|
+
if !(is_flash_url? || is_subject_url?)
|
58
|
+
video_list["mp4"] = []
|
59
|
+
video_list["mp4"] << ipad_response["video"]["durl"]["url"]
|
84
60
|
end
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
vedio_list["mp4"] << m_res["vdieo"]["durl"]["url"]
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
return vedio_list
|
61
|
+
video_list["hlv"] = []
|
62
|
+
video_list["hlv"] << response["video"]["durl"]["url"]
|
63
|
+
return video_list
|
93
64
|
end
|
94
65
|
|
95
66
|
private
|
96
67
|
|
97
|
-
def
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
def set_id
|
102
|
-
if url =~ /\/v\/b\/([^\D]+)-([^\D]+)\.html/
|
103
|
-
ids = url.scan(/\/v\/b\/([^\D]+)-([^\D]+)\.html/)[0]
|
104
|
-
@id = ids[0]
|
105
|
-
@uid = ids[1]
|
106
|
-
elsif url =~ /\/playlist\/([^\D]+).*.#([^\D]+)/
|
107
|
-
ids = url.scan(/\/playlist\/[^\D]+-([^\D]+).*#([^\D]+)/)[0]
|
108
|
-
@id = ids[1]
|
109
|
-
@uid = ids[0]
|
110
|
-
elsif url =~ /\.swf/
|
111
|
-
ids = url.scan(/vid=([^\D]+)_([^\D]+)_.+\.swf/)[0]
|
112
|
-
@id = ids[0]
|
113
|
-
@uid = ids[1]
|
114
|
-
elsif url =~ /(\/[\S]?\/)/
|
115
|
-
if url.index("#").nil?
|
116
|
-
html = parse_html
|
117
|
-
ids = html.scan(/vid[\s]?:[\s]?['|"]([^\D]+)['|"]/)[0]
|
118
|
-
uids = html.scan(/uid[\s]?:[\s]?['|"]([^\D]+)['|"]/)[0]
|
119
|
-
@id = ids[0]
|
120
|
-
@uid = uids[0]
|
121
|
-
else
|
122
|
-
ids = url.scan(/(\/[\S]?\/).+#([^\D]+)/)[0]
|
123
|
-
@id = ids[1]
|
124
|
-
end
|
125
|
-
else
|
126
|
-
ids = url.split("|")
|
127
|
-
@id = ids[0]
|
128
|
-
@uid = ids[1]
|
129
|
-
end
|
68
|
+
def ipad_connection
|
69
|
+
rand = "0.#{rand(10000..10000000)}#{rand(10000..10000000)}"
|
70
|
+
Response.new(Faraday.get("http://v.iask.com/v_play.php?vid=#{ipad_vid}&ran=#{rand}&p=i&k=#{get_k(ipad_vid, rand)}")).parsed
|
130
71
|
end
|
131
72
|
|
132
|
-
def
|
133
|
-
|
134
|
-
|
73
|
+
def get_k(vid, rand)
|
74
|
+
t = Time.now.to_i.to_s(2)[0..-7].to_i(2)
|
75
|
+
Digest::MD5.hexdigest("#{vid.to_s}Z6prk18aWxP278cVAH#{t.to_s}#{rand.to_s}".encode('utf-8'))[0..15] + t.to_s
|
135
76
|
end
|
136
77
|
|
137
|
-
def
|
138
|
-
|
139
|
-
response = conn.get "http://v.iask.com/v_play.php?vid=#{ipad_id}"
|
140
|
-
Response.new(response).parsed
|
78
|
+
def is_flash_url?
|
79
|
+
url =~ /\.swf/
|
141
80
|
end
|
142
81
|
|
143
|
-
def
|
144
|
-
|
145
|
-
if url.index("#")
|
146
|
-
if url =~ /play_list/
|
147
|
-
html_url
|
148
|
-
else
|
149
|
-
url
|
150
|
-
end
|
151
|
-
else
|
152
|
-
url
|
153
|
-
end
|
154
|
-
elsif url =~ /\.swf/
|
155
|
-
html_url
|
156
|
-
else
|
157
|
-
html_url
|
158
|
-
end
|
82
|
+
def is_subject_url?
|
83
|
+
url =~ /#\d+/
|
159
84
|
end
|
160
85
|
|
161
|
-
def
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
end
|
86
|
+
def parse_page
|
87
|
+
page_res = Faraday.get(url)
|
88
|
+
@page = page_res.body
|
89
|
+
@ipad_vid = page.match(/ipad_vid[\s]*:[\s]*["|']?[\s]*(\d+)[\s]*["|']?/).to_a[1]
|
166
90
|
end
|
167
91
|
|
168
|
-
|
169
|
-
if type == "mp4"
|
170
|
-
if ipad_id
|
171
|
-
uri = "http://v.iask.com/v_play.php?vid=#{ipad_id}"
|
172
|
-
end
|
173
|
-
else
|
174
|
-
uri = "http://v.iask.com/v_play.php?vid=#{id}"
|
175
|
-
end
|
176
|
-
conn = Faraday.new
|
177
|
-
return conn.get(uri).body
|
178
|
-
end
|
92
|
+
attr_accessor :page, :ipad_vid
|
179
93
|
end
|
180
94
|
end
|
data/lib/getvideo/tudou.rb
CHANGED
@@ -45,7 +45,11 @@ module Getvideo
|
|
45
45
|
|
46
46
|
def cover
|
47
47
|
if url_type == "albumplay" || url_type == "oplay"
|
48
|
-
response["data"]
|
48
|
+
if data = response["data"]
|
49
|
+
data[0]["logo"]
|
50
|
+
else
|
51
|
+
page_get_pic
|
52
|
+
end
|
49
53
|
else
|
50
54
|
page_get_pic
|
51
55
|
end
|
@@ -253,11 +257,13 @@ module Getvideo
|
|
253
257
|
|
254
258
|
def albumplay_media(type = nil)
|
255
259
|
video_list = {}
|
256
|
-
response["data"]
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
260
|
+
if data = response["data"]
|
261
|
+
data[0]["streamfileids"].each_key do |type|
|
262
|
+
stream = parse_stream(type)
|
263
|
+
video_list[type] = []
|
264
|
+
segs(type).each do |s|
|
265
|
+
video_list[type] << "http://f.youku.com/player/getFlvPath/sid/" + sid + "/st/#{type}/fileid/#{stream[0..8]+s["no"].to_i.to_s(16)+stream[10..-1]}_0#{s["no"].to_i.to_s(16)}?K="+s["k"] if s["k"] != -1
|
266
|
+
end
|
261
267
|
end
|
262
268
|
end
|
263
269
|
return video_list
|
@@ -272,7 +278,9 @@ module Getvideo
|
|
272
278
|
end
|
273
279
|
|
274
280
|
def videoid
|
275
|
-
response["data"]
|
281
|
+
if data = response["data"]
|
282
|
+
data[0]["videoid"]
|
283
|
+
end
|
276
284
|
end
|
277
285
|
|
278
286
|
def parse_stream(type)
|
data/lib/getvideo/version.rb
CHANGED
data/lib/getvideo/youku.rb
CHANGED
@@ -17,11 +17,15 @@ module Getvideo
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def title
|
20
|
-
response["data"]
|
20
|
+
if data = response["data"]
|
21
|
+
data[0]["title"]
|
22
|
+
end
|
21
23
|
end
|
22
24
|
|
23
25
|
def cover
|
24
|
-
response["data"]
|
26
|
+
if data = response["data"]
|
27
|
+
data[0]["logo"]
|
28
|
+
end
|
25
29
|
end
|
26
30
|
|
27
31
|
def flash
|
@@ -34,11 +38,13 @@ module Getvideo
|
|
34
38
|
|
35
39
|
def media(type = nil)
|
36
40
|
video_list = {}
|
37
|
-
response["data"]
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
41
|
+
if data = response["data"]
|
42
|
+
data[0]["streamfileids"].each_key do |type|
|
43
|
+
stream = parse_stream(type)
|
44
|
+
video_list[type] = []
|
45
|
+
segs(type).each do |s|
|
46
|
+
video_list[type] << "http://f.youku.com/player/getFlvPath/sid/" + sid + "/st/#{type}/fileid/#{stream[0..8]+s["no"].to_i.to_s(16)+stream[10..-1]}_0#{s["no"].to_i.to_s(16)}?K="+s["k"] if s["k"] != -1
|
47
|
+
end
|
42
48
|
end
|
43
49
|
end
|
44
50
|
return video_list
|
@@ -55,7 +61,9 @@ module Getvideo
|
|
55
61
|
end
|
56
62
|
|
57
63
|
def videoid
|
58
|
-
response["data"]
|
64
|
+
if data = response["data"]
|
65
|
+
data[0]["videoid"]
|
66
|
+
end
|
59
67
|
end
|
60
68
|
|
61
69
|
def parse_stream(type)
|
@@ -76,6 +84,7 @@ module Getvideo
|
|
76
84
|
stream_fileids.split("*").each do |s|
|
77
85
|
real_text = real_text + text.to_s[s.to_i]
|
78
86
|
end
|
87
|
+
|
79
88
|
return real_text
|
80
89
|
end
|
81
90
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: getvideo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ye.li
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|