import org.jsoup.Jsoup; |
002 |
import org.jsoup.nodes.Document; |
003 |
import org.jsoup.nodes.Element; |
004 |
import org.jsoup.select.Elements; |
005 |
006 |
/** |
007 |
* 视频工具类 |
008 |
* @author sunlightcs |
009 |
* 2011-4-6 |
010 |
* http://hi.juziku.com/sunlightcs/ |
011 |
*/ |
012 |
public class VideoUtil { |
013 |
|
014 |
/** |
015 |
* 获取视频信息 |
016 |
* @param url |
017 |
* @return |
018 |
*/ |
019 |
public static Video getVideoInfo(String url){ |
020 |
Video video = new Video(); |
021 |
|
022 |
if (url.indexOf( "v.youku.com" )!=- 1 ){ |
023 |
try { |
024 |
video = getYouKuVideo(url); |
025 |
} catch (Exception e) { |
026 |
video = null ; |
027 |
} |
028 |
} else if (url.indexOf( "tudou.com" )!=- 1 ){ |
029 |
try { |
030 |
video = getTudouVideo(url); |
031 |
} catch (Exception e) { |
032 |
video = null ; |
033 |
} |
034 |
} else if (url.indexOf( "v.ku6.com" )!=- 1 ){ |
035 |
try { |
036 |
video = getKu6Video(url); |
037 |
} catch (Exception e) { |
038 |
video = null ; |
039 |
} |
040 |
} else if (url.indexOf( "6.cn" )!=- 1 ){ |
041 |
try { |
042 |
video = get6Video(url); |
043 |
} catch (Exception e) { |
044 |
video = null ; |
045 |
} |
046 |
} else if (url.indexOf( "56.com" )!=- 1 ){ |
047 |
try { |
048 |
video = get56Video(url); |
049 |
} catch (Exception e) { |
050 |
video = null ; |
051 |
} |
052 |
} |
053 |
|
054 |
return video; |
055 |
} |
056 |
|
057 |
|
058 |
/** |
059 |
* 获取优酷视频 |
060 |
* @param url 视频URL |
061 |
*/ |
062 |
public static Video getYouKuVideo(String url) throws Exception{ |
063 |
Document doc = getURLContent(url); |
064 |
|
065 |
/** |
066 |
*获取视频缩略图 |
067 |
*/ |
068 |
String pic = getElementAttrById(doc, "s_sina" , "href" ); |
069 |
int local = pic.indexOf( "pic=" ); |
070 |
pic = pic.substring(local+ 4 ); |
071 |
|
072 |
/** |
073 |
* 获取视频地址 |
074 |
*/ |
075 |
String flash = getElementAttrById(doc, "link2" , "value" ); |
076 |
|
077 |
/** |
078 |
* 获取视频时间 |
079 |
*/ |
080 |
String time = getElementAttrById(doc, "download" , "href" ); |
081 |
String []arrays = time.split( "\\|" ); |
082 |
time = arrays[ 4 ]; |
083 |
|
084 |
Video video = new Video(); |
085 |
video.setPic(pic); |
086 |
video.setFlash(flash); |
087 |
video.setTime(time); |
088 |
|
089 |
return video; |
090 |
} |
091 |
|
092 |
|
093 |
/** |
094 |
* 获取土豆视频 |
095 |
* @param url 视频URL |
096 |
*/ |
097 |
public static Video getTudouVideo(String url) throws Exception{ |
098 |
Document doc = getURLContent(url); |
099 |
String content = doc.html(); |
100 |
int beginLocal = content.indexOf( "<script>document.domain" ); |
101 |
int endLocal = content.indexOf( "</script>" ); |
102 |
content = content.substring(beginLocal, endLocal); |
103 |
|
104 |
/** |
105 |
* 获取视频地址 |
106 |
*/ |
107 |
String flash = getScriptVarByName( "iid_code" , content); |
108 |
flash = "http://www.tudou.com/v/" + flash + "/v.swf" ; |
109 |
|
110 |
/** |
111 |
*获取视频缩略图 |
112 |
*/ |
113 |
String pic = getScriptVarByName( "thumbnail" , content); |
114 |
|
115 |
/** |
116 |
* 获取视频时间 |
117 |
*/ |
118 |
String time = getScriptVarByName( "time" , content); |
119 |
120 |
Video video = new Video(); |
121 |
video.setPic(pic); |
122 |
video.setFlash(flash); |
123 |
video.setTime(time); |
124 |
|
125 |
return video; |
126 |
} |
127 |
|
128 |
|
129 |
/** |
130 |
* 获取酷6视频 |
131 |
* @param url 视频URL |
132 |
*/ |
133 |
public static Video getKu6Video(String url) throws Exception{ |
134 |
Document doc = getURLContent(url); |
135 |
|
136 |
/** |
137 |
* 获取视频地址 |
138 |
*/ |
139 |
Element flashEt = doc.getElementById( "outSideSwfCode" ); |
140 |
String flash = flashEt.attr( "value" ); |
141 |
|
142 |
/** |
143 |
* 获取视频缩略图 |
144 |
*/ |
145 |
Element picEt = doc.getElementById( "plVideosList" ); |
146 |
String time = null ; |
147 |
String pic = null ; |
148 |
if (picEt!= null ){ |
149 |
Elements pics = picEt.getElementsByTag( "img" ); |
150 |
pic = pics.get( 0 ).attr( "src" ); |
151 |
|
152 |
/** |
153 |
* 获取视频时长 |
154 |
*/ |
155 |
Element timeEt = picEt.select( "span.review>cite" ).first(); |
156 |
time = timeEt.text(); |
157 |
} else { |
158 |
pic = doc.getElementsByClass( "s_pic" ).first().text(); |
159 |
} |
160 |
|
161 |
Video video = new Video(); |
162 |
video.setPic(pic); |
163 |
video.setFlash(flash); |
164 |
video.setTime(time); |
165 |
|
166 |
return video; |
167 |
|
168 |
} |
169 |
|
170 |
|
171 |
/** |
172 |
* 获取6间房视频 |
173 |
* @param url 视频URL |
174 |
*/ |
175 |
public static Video get6Video(String url) throws Exception{ |
176 |
Document doc = getURLContent(url); |
177 |
|
178 |
/** |
179 |
* 获取视频缩略图 |
180 |
*/ |
181 |
Element picEt = doc.getElementsByClass( "summary" ).first(); |
182 |
String pic = picEt.getElementsByTag( "img" ).first().attr( "src" ); |
183 |
|
184 |
/** |
185 |
* 获取视频时长 |
186 |
*/ |
187 |
String time = getVideoTime(doc, url, "watchUserVideo" ); |
188 |
if (time== null ){ |
189 |
time = getVideoTime(doc, url, "watchRelVideo" ); |
190 |
} |
191 |
|
192 |
/** |
193 |
* 获取视频地址 |
194 |
*/ |
195 |
Element flashEt = doc.getElementById( "video-share-code" ); |
196 |
doc = Jsoup.parse(flashEt.attr( "value" )); |
197 |
String flash = doc.select( "embed" ).attr( "src" ); |
198 |
|
199 |
Video video = new Video(); |
200 |
video.setPic(pic); |
201 |
video.setFlash(flash); |
202 |
video.setTime(time); |
203 |
|
204 |
return video; |
205 |
} |
206 |
|
207 |
|
208 |
/** |
209 |
* 获取56视频 |
210 |
* @param url 视频URL |
211 |
*/ |
212 |
public static Video get56Video(String url) throws Exception{ |
213 |
Document doc = getURLContent(url); |
214 |
String content = doc.html(); |
215 |
|
216 |
/** |
217 |
* 获取视频缩略图 |
218 |
*/ |
219 |
int begin = content.indexOf( "\"img\":\"" ); |
220 |
content = content.substring(begin+ 7 , begin+ 200 ); |
221 |
int end = content.indexOf( "\"};" ); |
222 |
String pic = content.substring( 0 , end).trim(); |
223 |
pic = pic.replaceAll( "\\\\" , "" ); |
224 |
|
225 |
/** |
226 |
* 获取视频地址 |
227 |
*/ |
228 |
String flash = "http://player.56.com" + url.substring(url.lastIndexOf( "/" ), url.lastIndexOf( ".html" )) + ".swf" ; |
229 |
|
230 |
Video video = new Video(); |
231 |
video.setPic(pic); |
232 |
video.setFlash(flash); |
233 |
|
234 |
return video; |
235 |
} |
236 |
237 |
/** |
238 |
* 获取6间房视频时长 |
239 |
*/ |
240 |
private static String getVideoTime(Document doc, String url, String id) { |
241 |
String time = null ; |
242 |
|
243 |
Element timeEt = doc.getElementById(id); |
244 |
Elements links = timeEt.select( "dt > a" ); |
245 |
|
246 |
|
247 |
for (Element link : links) { |
248 |
String linkHref = link.attr( "href" ); |
249 |
if (linkHref.equalsIgnoreCase(url)){ |
250 |
time = link.parent().getElementsByTag( "em" ).first().text(); |
251 |
break ; |
252 |
} |
253 |
} |
254 |
return time; |
255 |
} |
256 |
|
257 |
|
258 |
/** |
259 |
* 获取script某个变量的值 |
260 |
* @param name 变量名称 |
261 |
* @return 返回获取的值 |
262 |
*/ |
263 |
private static String getScriptVarByName(String name, String content){ |
264 |
String script = content; |
265 |
|
266 |
int begin = script.indexOf(name); |
267 |
|
268 |
script = script.substring(begin+name.length()+ 2 ); |
269 |
|
270 |
int end = script.indexOf( "," ); |
271 |
|
272 |
script = script.substring( 0 ,end); |
273 |
|
274 |
String result=script.replaceAll( "'" , "" ); |
275 |
result = result.trim(); |
276 |
|
277 |
return result; |
278 |
} |
279 |
|
280 |
|
281 |
/** |
282 |
* 根据HTML的ID键及属于名,获取属于值 |
283 |
* @param id HTML的ID键 |
284 |
* @param attrName 属于名 |
285 |
* @return 返回属性值 |
286 |
*/ |
287 |
private static String getElementAttrById(Document doc, String id, String attrName) throws Exception{ |
288 |
Element et = doc.getElementById(id); |
289 |
String attrValue = et.attr(attrName); |
290 |
|
291 |
return attrValue; |
292 |
} |
293 |
|
294 |
|
295 |
|
296 |
/** |
297 |
* 获取网页的内容 |
298 |
*/ |
299 |
private static Document getURLContent(String url) throws Exception{ |
300 |
Document doc = Jsoup.connect(url) |
301 |
.data( "query" , "Java" ) |
302 |
.userAgent( "Mozilla" ) |
303 |
.cookie( "auth" , "token" ) |
304 |
.timeout( 6000 ) |
305 |
.post(); |
306 |
return doc; |
307 |
} |
308 |
|
309 |
|
310 |
public static void main(String[] args) { |
311 |
//String url = "http://v.youku.com/v_show/id_XMjU0MjI2NzY0.html"; |
312 |
//String url = "http://www.tudou.com/programs/view/pVploWOtCQM/"; |
313 |
//String url = "http://v.ku6.com/special/show_4024167/9t7p64bisV2A31Hz.html"; |
314 |
//String url = "http://v.ku6.com/show/BpP5LeyVwvikbT1F.html"; |
315 |
//String url = "http://6.cn/watch/14757577.html"; |
316 |
String url = "http://www.56.com/u64/v_NTkzMDEzMTc.html" ; |
317 |
Video video = getVideoInfo(url); |
318 |
System.out.println( "视频缩略图:" +video.getPic()); |
319 |
System.out.println( "视频地址:" +video.getFlash()); |
320 |
System.out.println( "视频时长:" +video.getTime()); |
321 |
} |
322 |
} |
视频封装类
01 |
/** |
02 |
* 视频封装 |
03 |
* @author sunlightcs |
04 |
* 2011-4-6 |
05 |
* http://hi.juziku.com/sunlightcs/ |
06 |
*/ |
07 |
public class Video { |
08 |
private String flash; |
09 |
private String pic; |
10 |
private String time; |
11 |
public String getFlash() { |
12 |
return flash; |
13 |
} |
14 |
public void setFlash(String flash) { |
15 |
this .flash = flash; |
16 |
} |
17 |
public String getPic() { |
18 |
return pic; |
19 |
} |
20 |
public void setPic(String pic) { |
21 |
this .pic = pic; |
22 |
} |
23 |
public String getTime() { |
24 |
return time; |
25 |
} |
26 |
public void setTime(String time) { |
27 |
this .time = time; |
28 |
} |
29 |
} |
http://jsoup.org/packages/jsoup-1.5.2.jar