getvideo 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|