getvideo 0.0.4 → 0.0.5
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/Gemfile +1 -1
- data/getvideo.gemspec +1 -0
- data/lib/getvideo.rb +3 -2
- data/lib/getvideo/iqiyi.rb +32 -33
- data/lib/getvideo/ku6.rb +2 -2
- data/lib/getvideo/{iask.rb → sina.rb} +33 -26
- data/lib/getvideo/tudou.rb +247 -109
- data/lib/getvideo/version.rb +1 -1
- data/lib/getvideo/video.rb +16 -14
- data/lib/getvideo/youtube.rb +6 -3
- data/spec/iqiyi_spec.rb +12 -4
- data/spec/{iask_spec.rb → sina_spec.rb} +18 -14
- data/spec/tudou_spec.rb +204 -90
- data/spec/youtube_spec.rb +7 -3
- metadata +30 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a05caec5a828055c6ed17d483e8323240803f4f5
|
4
|
+
data.tar.gz: 883ed8d880add6c2247534fd8a9e6db91a368c59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23eba5aff34a41371bb27c58bd619ba5c1709f4f1936ca36d868b02b82d3074d31d7d47bea6c0fccb31c095908bfcc1f6f5d8753d3662ae15000b83239792de1
|
7
|
+
data.tar.gz: d139dbbc2ebfe31e629fdbf10a4d30547734b2f1591d8a115941876326cd8f23e5a01625cdc5951eefd23b3cdf639e0874c825e0a608166e580c85e6de34c710
|
data/Gemfile
CHANGED
data/getvideo.gemspec
CHANGED
data/lib/getvideo.rb
CHANGED
@@ -4,6 +4,7 @@ require 'cgi'
|
|
4
4
|
require 'json'
|
5
5
|
require 'nokogiri'
|
6
6
|
require 'multi_json'
|
7
|
+
require 'multi_xml'
|
7
8
|
require 'getvideo/video'
|
8
9
|
require "getvideo/version"
|
9
10
|
require "getvideo/youku"
|
@@ -13,7 +14,7 @@ require "getvideo/tudou"
|
|
13
14
|
require "getvideo/sohu"
|
14
15
|
require "getvideo/iqiyi"
|
15
16
|
require "getvideo/youtube"
|
16
|
-
require 'getvideo/
|
17
|
+
require 'getvideo/sina'
|
17
18
|
|
18
19
|
module Getvideo
|
19
20
|
def self.parse(url)
|
@@ -32,7 +33,7 @@ module Getvideo
|
|
32
33
|
elsif url =~ /youtube/
|
33
34
|
Youtube.new(url)
|
34
35
|
else url =~ /(iask|sina)/
|
35
|
-
|
36
|
+
Sina.new(url)
|
36
37
|
end
|
37
38
|
end
|
38
39
|
end
|
data/lib/getvideo/iqiyi.rb
CHANGED
@@ -3,33 +3,31 @@
|
|
3
3
|
module Getvideo
|
4
4
|
class Iqiyi < Video
|
5
5
|
set_api_uri { "http://cache.video.qiyi.com/v/#{id}" }
|
6
|
-
attr_reader :ipad_response
|
7
6
|
|
8
|
-
def
|
9
|
-
|
10
|
-
ipad_connection
|
7
|
+
def ipad_response
|
8
|
+
@ipad_response ||= ipad_connection
|
11
9
|
end
|
12
10
|
|
13
11
|
def html_url
|
14
|
-
|
12
|
+
response_info["videoUrl"]
|
15
13
|
end
|
16
14
|
|
17
15
|
def id
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
if url =~ /\.html/
|
17
|
+
parse_vid[1]
|
18
|
+
elsif url =~ /swf/
|
19
|
+
url.scan(/com\/([^\/]+)/)[0][0]
|
20
|
+
else
|
23
21
|
url
|
24
|
-
|
22
|
+
end
|
25
23
|
end
|
26
24
|
|
27
25
|
def title
|
28
|
-
|
26
|
+
response_info["title"]
|
29
27
|
end
|
30
28
|
|
31
29
|
def cover
|
32
|
-
|
30
|
+
response_info["albumImage"]
|
33
31
|
end
|
34
32
|
|
35
33
|
def m3u8
|
@@ -37,21 +35,24 @@ module Getvideo
|
|
37
35
|
end
|
38
36
|
|
39
37
|
def flash
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
38
|
+
position = response_info["logoPosition"]
|
39
|
+
duration = response_info["totalDuration"]
|
40
|
+
video_url = response_info["videoUrl"].gsub("http://www.iqiyi.com/","")
|
41
|
+
"http://player.video.qiyi.com/#{id}/#{position}/#{duration}/#{video_url}"[0..-5]+"swf"
|
44
42
|
end
|
45
43
|
|
46
44
|
def media
|
47
45
|
video_list = {}
|
48
46
|
video_list["mp4"] = []
|
49
|
-
video_list["
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
file
|
54
|
-
|
47
|
+
video_list["f4v"] = []
|
48
|
+
mp4_file = ipad_response["data"]["mp4Url"]
|
49
|
+
res = Faraday.get "http://data.video.qiyi.com/#{mp4_file.split("/")[-1].split(".")[0]}.ts"
|
50
|
+
video_list["mp4"] << "#{mp4_file}?#{URI.parse(res["location"]).query}"
|
51
|
+
file = response_info["fileUrl"]["file"]
|
52
|
+
size = response_info["fileBytes"]["size"]
|
53
|
+
file.each_with_index do |f, i|
|
54
|
+
res = Faraday.get "http://data.video.qiyi.com/#{file[i].split("/")[-1].split(".")[0]}.ts"
|
55
|
+
video_list["f4v"] << "#{f}?#{URI.parse(res["location"]).query}"
|
55
56
|
end
|
56
57
|
return video_list
|
57
58
|
end
|
@@ -59,16 +60,10 @@ module Getvideo
|
|
59
60
|
private
|
60
61
|
|
61
62
|
def ipad_connection
|
62
|
-
conn = Faraday.new
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
def parse_mp4(url=nil)
|
68
|
-
site = ipad_response["data"]["mp4Url"]
|
69
|
-
conn = Faraday.new
|
70
|
-
res = conn.get(site)
|
71
|
-
res.body.scan(/"l":"([^,]+)"/)[0][0]
|
63
|
+
conn = Faraday.new "http://cache.video.qiyi.com"
|
64
|
+
conn.headers["User-Agent"] = ""
|
65
|
+
response= conn.get "/m/#{id}/"
|
66
|
+
MultiJson.load response.body.scan(/ipadUrl=([^*]+)/)[0][0]
|
72
67
|
end
|
73
68
|
|
74
69
|
def parse_vid
|
@@ -76,5 +71,9 @@ module Getvideo
|
|
76
71
|
page_res = conn.get(url)
|
77
72
|
return page_res.body.match(/data-player-videoid\s*[:=]\s*["']([^"']+)["']/)
|
78
73
|
end
|
74
|
+
|
75
|
+
def response_info
|
76
|
+
response["root"]["video"]
|
77
|
+
end
|
79
78
|
end
|
80
79
|
end
|
data/lib/getvideo/ku6.rb
CHANGED
@@ -49,8 +49,8 @@ module Getvideo
|
|
49
49
|
|
50
50
|
def connection
|
51
51
|
conn = Faraday.new
|
52
|
-
response= conn.post "http://v.ku6.com/fetch.htm", {"t" => "getVideo4Player", "vid" => id}
|
53
|
-
|
52
|
+
response= conn.post "http://v.ku6.com/fetch.htm", {"t" => "getVideo4Player", "vid" => id}
|
53
|
+
Response.new(response).parsed
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -1,18 +1,20 @@
|
|
1
1
|
#coding:utf-8
|
2
2
|
|
3
3
|
module Getvideo
|
4
|
-
class
|
4
|
+
class Sina < Video
|
5
5
|
set_api_uri { "http://v.iask.com/v_play.php?vid=#{id}" }
|
6
|
-
attr_reader :ipad_response, :info_response
|
7
6
|
|
8
7
|
def initialize(url)
|
9
8
|
@url = url
|
10
|
-
set_id
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
set_id
|
10
|
+
end
|
11
|
+
|
12
|
+
def ipad_response
|
13
|
+
@ipad_response ||= ipad_connect
|
14
|
+
end
|
15
|
+
|
16
|
+
def info_response
|
17
|
+
@info_response ||= Nokogiri::HTML(parse_html).css("head script").text.gsub(" ", "")
|
16
18
|
end
|
17
19
|
|
18
20
|
def html_url
|
@@ -31,7 +33,7 @@ module Getvideo
|
|
31
33
|
if has_html?
|
32
34
|
info_response.scan(/title:'([^']+)'/)[0][0]
|
33
35
|
else
|
34
|
-
response
|
36
|
+
response["vname"]
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
@@ -59,7 +61,9 @@ module Getvideo
|
|
59
61
|
|
60
62
|
def m3u8
|
61
63
|
if has_html?
|
62
|
-
ipad_response.nil?
|
64
|
+
if !ipad_response.nil?
|
65
|
+
media["mp4"][0]
|
66
|
+
end
|
63
67
|
else
|
64
68
|
""
|
65
69
|
end
|
@@ -72,15 +76,16 @@ module Getvideo
|
|
72
76
|
def media
|
73
77
|
vedio_list = {}
|
74
78
|
vedio_list["hlv"] = []
|
75
|
-
|
76
|
-
|
77
|
-
|
79
|
+
vedio_list["mp4"] = []
|
80
|
+
if res = response
|
81
|
+
if res["video"]["result"] != "error"
|
82
|
+
vedio_list["hlv"] << res["video"]["durl"]["url"]
|
83
|
+
end
|
78
84
|
end
|
79
85
|
|
80
|
-
if ipad_response
|
81
|
-
|
82
|
-
|
83
|
-
vedio_list["mp4"] << d.text
|
86
|
+
if m_res = ipad_response
|
87
|
+
if m_res["video"]["result"] != "error"
|
88
|
+
vedio_list["mp4"] << m_res["vdieo"]["durl"]["url"]
|
84
89
|
end
|
85
90
|
end
|
86
91
|
|
@@ -97,16 +102,16 @@ module Getvideo
|
|
97
102
|
if url =~ /\/v\/b\/([^\D]+)-([^\D]+)\.html/
|
98
103
|
ids = url.scan(/\/v\/b\/([^\D]+)-([^\D]+)\.html/)[0]
|
99
104
|
@id = ids[0]
|
100
|
-
@uid = ids[1]
|
105
|
+
@uid = ids[1]
|
101
106
|
elsif url =~ /\/playlist\/([^\D]+).*.#([^\D]+)/
|
102
107
|
ids = url.scan(/\/playlist\/[^\D]+-([^\D]+).*#([^\D]+)/)[0]
|
103
108
|
@id = ids[1]
|
104
|
-
@uid = ids[0]
|
109
|
+
@uid = ids[0]
|
105
110
|
elsif url =~ /\.swf/
|
106
111
|
ids = url.scan(/vid=([^\D]+)_([^\D]+)_.+\.swf/)[0]
|
107
112
|
@id = ids[0]
|
108
|
-
@uid = ids[1]
|
109
|
-
elsif url =~ /(\/[\S]?\/)/
|
113
|
+
@uid = ids[1]
|
114
|
+
elsif url =~ /(\/[\S]?\/)/
|
110
115
|
if url.index("#").nil?
|
111
116
|
html = parse_html
|
112
117
|
ids = html.scan(/vid[\s]?:[\s]?['|"]([^\D]+)['|"]/)[0]
|
@@ -132,7 +137,7 @@ module Getvideo
|
|
132
137
|
def ipad_connect
|
133
138
|
conn = Faraday.new
|
134
139
|
response = conn.get "http://v.iask.com/v_play.php?vid=#{ipad_id}"
|
135
|
-
|
140
|
+
Response.new(response).parsed
|
136
141
|
end
|
137
142
|
|
138
143
|
def html_info_path
|
@@ -144,7 +149,7 @@ module Getvideo
|
|
144
149
|
url
|
145
150
|
end
|
146
151
|
else
|
147
|
-
url
|
152
|
+
url
|
148
153
|
end
|
149
154
|
elsif url =~ /\.swf/
|
150
155
|
html_url
|
@@ -153,9 +158,11 @@ module Getvideo
|
|
153
158
|
end
|
154
159
|
end
|
155
160
|
|
156
|
-
def parse_html
|
157
|
-
|
158
|
-
|
161
|
+
def parse_html
|
162
|
+
if !html_info_path.empty?
|
163
|
+
conn = Faraday.new
|
164
|
+
conn.get(html_info_path).body
|
165
|
+
end
|
159
166
|
end
|
160
167
|
|
161
168
|
def get_media(type=nil)
|
data/lib/getvideo/tudou.rb
CHANGED
@@ -2,162 +2,300 @@
|
|
2
2
|
|
3
3
|
module Getvideo
|
4
4
|
class Tudou < Video
|
5
|
-
|
5
|
+
|
6
|
+
set_api_uri do
|
7
|
+
if url_type == "albumplay" || url_type == "oplay"
|
8
|
+
"http://v.youku.com/player/getPlayList/VideoIDS/#{page_get_vcode}"
|
9
|
+
else
|
10
|
+
"http://www.tudou.com/outplay/goto/getItemSegs.action?iid=#{page_get_iid}"
|
11
|
+
end
|
12
|
+
end
|
6
13
|
|
7
14
|
def initialize(url)
|
8
15
|
@url = url
|
9
|
-
|
10
|
-
|
11
|
-
|
16
|
+
parse_page
|
17
|
+
get_type
|
18
|
+
if !swf_iid && url_type != "views"
|
19
|
+
get_item_info(page_get_iid)
|
20
|
+
end
|
12
21
|
end
|
13
22
|
|
14
23
|
def id
|
15
|
-
|
24
|
+
page_get_iid
|
16
25
|
end
|
17
26
|
|
18
27
|
def html_url
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
"http://www.tudou.com/albumplay/#{
|
24
|
-
|
25
|
-
|
26
|
-
when "l"
|
27
|
-
"http://www.tudou.com/listplay/#{acode}#{"/" + lcode if lcode}.html"
|
28
|
-
end
|
29
|
-
elsif url =~ /dp\.tudou.com\/(a|o|l|v|albumplay|oplay|listplay)\//
|
30
|
-
type = url.scan(/dp\.tudou.com\/(a|o|l|v|albumplay|oplay|listplay)\/.*.\.html/)[0][0]
|
31
|
-
case type
|
32
|
-
when "a", "albumplay"
|
33
|
-
"http://www.tudou.com/albumplay/#{acode}#{"/" + lcode if lcode}.html"
|
34
|
-
when "o", "oplay"
|
35
|
-
"http://www.tudou.com/oplay/#{acode}#{"/" + lcode if lcode}.html"
|
36
|
-
when "l", "listplay"
|
37
|
-
"http://www.tudou.com/listplay/#{acode}#{"/" + lcode if lcode}.html"
|
38
|
-
when "v"
|
39
|
-
"http://www.tudou.com/programs/view/#{lcode}/"
|
40
|
-
end
|
41
|
-
elsif url =~ /www\.tudou.com\/(programs|albumplay|listplay|oplay)/
|
42
|
-
url
|
43
|
-
else
|
44
|
-
"http://www.tudou.com/programs/view/#{lcode}/"
|
28
|
+
case url_type
|
29
|
+
when "views"
|
30
|
+
"http://www.tudou.com/programs/view/#{page_get_icode}/"
|
31
|
+
when "albumplay", "oplay"
|
32
|
+
"http://www.tudou.com/albumplay/#{page_get_lcode}/#{page_get_icode}.html"
|
33
|
+
when "listplay"
|
34
|
+
"http://www.tudou.com/listplay/#{page_get_lcode}/#{page_get_icode}.html"
|
45
35
|
end
|
46
36
|
end
|
47
37
|
|
48
38
|
def title
|
49
|
-
|
39
|
+
if page_get_title.encoding != 'UTF-8'
|
40
|
+
CGI.unescapeHTML(page_get_title)
|
41
|
+
else
|
42
|
+
page_get_title
|
43
|
+
end
|
50
44
|
end
|
51
45
|
|
52
46
|
def cover
|
53
|
-
|
47
|
+
if url_type == "albumplay" || url_type == "oplay"
|
48
|
+
response["data"][0]["logo"]
|
49
|
+
else
|
50
|
+
page_get_pic
|
51
|
+
end
|
54
52
|
end
|
55
53
|
|
56
54
|
def flash
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
"http://www.tudou.com/#{
|
62
|
-
|
63
|
-
|
64
|
-
"http://www.tudou.com/#{url_type}/#{acode}/&rpid=116105338&resourceId=116105338_04_05_99&iid=#{iid}/v.swf"
|
65
|
-
elsif url =~ /dp\.tudou\.com\/v/
|
66
|
-
"http://www.tudou.com/v/#{lcode}/&rpid=116105338&resourceId=116105338_04_05_99/v.swf"
|
67
|
-
else
|
68
|
-
"http://www.tudou.com/v/#{lcode}/&rpid=116105338&resourceId=116105338_04_05_99/v.swf"
|
55
|
+
case url_type
|
56
|
+
when "views"
|
57
|
+
"http://www.tudou.com/v/#{page_get_icode}/v.swf"
|
58
|
+
when "albumplay", "oplay"
|
59
|
+
"http://www.tudou.com/a/#{page_get_lcode}/&iid=#{page_get_iid}/v.swf"
|
60
|
+
when "listplay"
|
61
|
+
"http://www.tudou.com/l/#{page_get_lcode}/&iid=#{page_get_iid}/v.swf"
|
69
62
|
end
|
70
63
|
end
|
71
64
|
|
72
65
|
def m3u8
|
73
|
-
"http://vr.tudou.com/v2proxy/v2.m3u8?it=#{
|
66
|
+
"http://vr.tudou.com/v2proxy/v2.m3u8?it=#{page_get_iid}&st=2&pw="
|
74
67
|
end
|
75
68
|
|
76
|
-
def media
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
@body.css("f").each do | file |
|
82
|
-
brt = file.attr("brt")
|
83
|
-
if brt != old_brt
|
84
|
-
if file.content =~ /f4v/
|
85
|
-
video_list["f4v"] << file.content
|
86
|
-
elsif file.content =~ /flv/
|
87
|
-
video_list["flv"] << file.content
|
88
|
-
end
|
89
|
-
old_brt = brt
|
90
|
-
end
|
69
|
+
def media(type = nil)
|
70
|
+
if url_type == "albumplay" || url_type == "oplay"
|
71
|
+
albumplay_media(type)
|
72
|
+
else
|
73
|
+
view_media(type)
|
91
74
|
end
|
92
|
-
return video_list
|
93
75
|
end
|
94
76
|
|
95
77
|
private
|
96
78
|
|
97
|
-
def
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
79
|
+
def get_items
|
80
|
+
if url_type == "albumplay" || url_type == "oplay"
|
81
|
+
Getvideo::Response.new(Faraday.get("http://www.tudou.com/outplay/goto/getAlbumItems.html?aid=#{page_get_lid}")).parsed
|
82
|
+
elsif url_type == "listplay"
|
83
|
+
Getvideo::Response.new(Faraday.get("http://www.tudou.com/outplay/goto/getPlaylistItems.html?lid=#{page_get_lid}")).parsed
|
84
|
+
else
|
85
|
+
nil
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def get_item_info(id)
|
90
|
+
get_items["message"].each do |item|
|
91
|
+
if item["itemId"].to_s == id
|
92
|
+
@item_info = item
|
93
|
+
break
|
94
|
+
end
|
95
|
+
end
|
103
96
|
end
|
104
97
|
|
105
|
-
def
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
98
|
+
def parse_page
|
99
|
+
video_url = get_url
|
100
|
+
if swf_iid
|
101
|
+
res = Faraday.get(video_url)
|
102
|
+
@swf_info = {}
|
103
|
+
res.headers['location'].split("?")[1].split("&").each do |data|
|
104
|
+
data_info = data.split("=")
|
105
|
+
if data_info.length > 1
|
106
|
+
@swf_info[data_info[0]] = CGI::unescape(data_info[1])
|
107
|
+
end
|
108
|
+
end
|
114
109
|
else
|
115
|
-
|
116
|
-
Nokogiri::XML(response).children()[0].attr("code")
|
110
|
+
@page = Getvideo::Response.new(Faraday.get(video_url)).parsed.css("script").text
|
117
111
|
end
|
118
112
|
end
|
119
113
|
|
120
|
-
def
|
114
|
+
def get_type
|
115
|
+
type = url.match(/\/(v|a|o|l|listplay|albumplay|oplay|programs)\//)[1]
|
116
|
+
@url_type = case type
|
117
|
+
when "v", "programs"
|
118
|
+
"views"
|
119
|
+
when "a", "albumplay"
|
120
|
+
"albumplay"
|
121
|
+
when "o", "oplay"
|
122
|
+
"oplay"
|
123
|
+
when "l", "listplay"
|
124
|
+
"listplay"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def get_url
|
121
129
|
if url =~ /\/(a|o|l)\/.*.\.swf/
|
122
|
-
url.
|
123
|
-
|
124
|
-
url.
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
130
|
+
code = url.match(/\/[a|o|l]\/([^\/]+)\//)[1]
|
131
|
+
@swf_iid = url.match(/iid=([^&]+)/)[1]
|
132
|
+
type = url.match(/\/(a|o|l)\/.*.\.swf/)[1]
|
133
|
+
url
|
134
|
+
elsif url =~ /\/v\/.*.\.swf/
|
135
|
+
code = url.match(/\/v\/([^\/]+)\//)[1]
|
136
|
+
"http://www.tudou.com/programs/view/#{code}/"
|
137
|
+
elsif url =~ /www\.tudou.com\/oplay/
|
138
|
+
url_id = url.match(/www\.tudou.com\/oplay\/(.*.).html/)[1]
|
139
|
+
"http://www.tudou.com/albumplay/#{url_id}.html"
|
140
|
+
else
|
141
|
+
url
|
142
|
+
end
|
143
|
+
end
|
129
144
|
|
130
|
-
|
131
|
-
|
145
|
+
def page_get_lid
|
146
|
+
if swf_iid
|
147
|
+
if url_type == "albumplay"
|
148
|
+
swf_info["aid"]
|
149
|
+
elsif url_type == "listplay"
|
150
|
+
swf_info["lid"]
|
151
|
+
end
|
152
|
+
else
|
153
|
+
page_match(/lid[\s|'|:]*(\S+)/)[1]
|
132
154
|
end
|
133
155
|
end
|
134
156
|
|
135
|
-
def
|
136
|
-
if
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
get_iid[0][0]
|
144
|
-
elsif url =~ /dp\.tudou\.com\/player\.php/
|
145
|
-
url.scan(/player\.php\?id=([^&]+)/)[0][0]
|
146
|
-
elsif url =~ /dp.tudou.com\/nplayer\.swf/
|
147
|
-
url.scan(/nplayer\.swf\?([^&]+)/)[0][0]
|
157
|
+
def page_get_lcode
|
158
|
+
if swf_iid
|
159
|
+
if url_type == "albumplay" || url_type == "oplay"
|
160
|
+
swf_info["aCode"]
|
161
|
+
elsif url_type == "listplay"
|
162
|
+
swf_info["lCode"]
|
163
|
+
else
|
164
|
+
end
|
148
165
|
else
|
149
|
-
|
166
|
+
page_match(/lcode[\s|'|:]*(\S+)'/)[1]
|
150
167
|
end
|
151
168
|
end
|
152
169
|
|
153
|
-
def
|
154
|
-
|
170
|
+
def page_get_iid
|
171
|
+
swf_iid || (page_match(/iid[\s|'|:]*(\S+)/)[1])
|
155
172
|
end
|
156
173
|
|
157
|
-
def
|
158
|
-
|
159
|
-
|
160
|
-
|
174
|
+
def page_get_icode
|
175
|
+
if swf_iid
|
176
|
+
if url_type == "oplay"
|
177
|
+
swf_info["ablumItemCode"]
|
178
|
+
else
|
179
|
+
swf_info["code"]
|
180
|
+
end
|
181
|
+
else
|
182
|
+
if url_type == "albumplay" || url_type == "listplay"
|
183
|
+
item_info["code"]
|
184
|
+
else
|
185
|
+
page_match(/icode[\s|'|:]*(\S+)'/)[1]
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def page_get_vcode
|
191
|
+
if swf_iid
|
192
|
+
swf_info["vcode"]
|
193
|
+
else
|
194
|
+
if url_type == "albumplay"
|
195
|
+
item_info["vcode"]
|
196
|
+
else
|
197
|
+
page_match(/vcode[\s|'|:]*(\S+)'/)[1]
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
def page_get_title
|
203
|
+
if swf_iid
|
204
|
+
swf_info["title"]
|
205
|
+
else
|
206
|
+
if url_type == "albumplay"
|
207
|
+
item_info["albumItemShortDescription"]
|
208
|
+
elsif url_type == "listplay"
|
209
|
+
item_info["title"]
|
210
|
+
else
|
211
|
+
page_match(/,kw[\s|'|:]*(\S+.*)'/)[1]
|
212
|
+
end
|
213
|
+
end
|
161
214
|
end
|
215
|
+
|
216
|
+
def page_get_pic
|
217
|
+
if swf_iid
|
218
|
+
swf_info["snap_pic"]
|
219
|
+
else
|
220
|
+
if url_type == "albumplay" || url_type == "listplay"
|
221
|
+
item_info["picUrl"]
|
222
|
+
else
|
223
|
+
page_match(/pic[\s|'|:]*(\S+)'/)[1]
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
def page_match(regex)
|
229
|
+
data = page.match(regex)
|
230
|
+
data || []
|
231
|
+
end
|
232
|
+
|
233
|
+
def view_media(type = nil)
|
234
|
+
video_list = {}
|
235
|
+
video_type = {
|
236
|
+
"2" => "f4v_sd",
|
237
|
+
"3" => "f4v_hd",
|
238
|
+
"4" => "f4v",
|
239
|
+
"5" => "f4v_fhd",
|
240
|
+
"52" => "mp4"
|
241
|
+
}
|
242
|
+
conn = Faraday.new "http://v2.tudou.com"
|
243
|
+
conn.headers["User-Agent"] = ""
|
244
|
+
response.each do |key, val|
|
245
|
+
type = video_type[key] || key
|
246
|
+
video_list[type] = []
|
247
|
+
val.each do |video|
|
248
|
+
video_list[type] << Getvideo::Response.new(conn.get("http://v2.tudou.com/f?id=#{video["k"]}", )).parsed["f"]["__content__"]
|
249
|
+
end
|
250
|
+
end
|
251
|
+
return video_list
|
252
|
+
end
|
253
|
+
|
254
|
+
def albumplay_media(type = nil)
|
255
|
+
video_list = {}
|
256
|
+
response["data"][0]["streamfileids"].each_key do |type|
|
257
|
+
stream = parse_stream(type)
|
258
|
+
video_list[type] = []
|
259
|
+
segs(type).each do |s|
|
260
|
+
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
|
261
|
+
end
|
262
|
+
end
|
263
|
+
return video_list
|
264
|
+
end
|
265
|
+
|
266
|
+
def sid
|
267
|
+
Time.now.to_i.to_s + rand(10..99).to_s+ "1000" + rand(30..80).to_s+"00"
|
268
|
+
end
|
269
|
+
|
270
|
+
def segs(type)
|
271
|
+
response["data"][0]["segs"][type]
|
272
|
+
end
|
273
|
+
|
274
|
+
def videoid
|
275
|
+
response["data"][0]["videoid"]
|
276
|
+
end
|
277
|
+
|
278
|
+
def parse_stream(type)
|
279
|
+
seed = response["data"][0]["seed"]
|
280
|
+
stream_fileids = response["data"][0]["streamfileids"][type]
|
281
|
+
random_text = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\:._-1234567890'
|
282
|
+
|
283
|
+
text = ""
|
284
|
+
random_text.each_char do |t|
|
285
|
+
seed = (seed * 211 + 30031) % 65536
|
286
|
+
cuch = ((seed / 65536.0) * random_text.length).to_i
|
287
|
+
char = random_text[cuch]
|
288
|
+
text = text + char
|
289
|
+
random_text = random_text.gsub(char, "")
|
290
|
+
end
|
291
|
+
|
292
|
+
real_text = ""
|
293
|
+
stream_fileids.split("*").each do |s|
|
294
|
+
real_text = real_text + text.to_s[s.to_i]
|
295
|
+
end
|
296
|
+
return real_text
|
297
|
+
end
|
298
|
+
|
299
|
+
attr_accessor :page, :swf_iid, :url_type, :item_info, :swf_info
|
162
300
|
end
|
163
301
|
end
|