当我们去解析新浪体育NBA赛事的时候,有一个项目是视频,它存储的是网页形式,我们需要获取真实地址才能播放,不利用第三方工具,我们也可以去从网页上获取真实地址,首先我们看一下他的一个真实地址http://v.iask.com/v_play_ipad.php?vid=121251907,多个对比可以看到只有vid后面的内容是变化的,所以我们只需要从网页上抓取他的vid内容就可以了,而站点地址的网页里面是有提供这个vid的,有两个地方可以获取,一个是script里面,内容如下:
var $SCOPE = {};
// 视频
$SCOPE['video'] = {
channel:'ty',
cid:'',
epgid:'',
vid:'121242131',
hd_vid:'0',
sid:'63230801',
uid: '6',
categoryId: '2',
pid:'6',
tid:'408',
pic: 'http://p1.v.iask.com/264/11/121242131_2.jpg',
actlogActive:1,
url: window.location.href,
title:'视频集锦-詹宁斯33分 活塞下半场发力大胜公牛',
resolution:0,
isWide:0,
swfOutsideUrl:'http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=121242131_6_bUzmHSE7XWLK+l1lHz2stqkM7KQNt6njnynt71+iJgxaVQSOZorfO4kK4SvXAstA8G9M/s.swf',
videoData:{
ipad_vid:'121240242',
class_code:'1'
},
newsid:'6-408-163232',
ad_state:'1',
videoStyle:2,
index:1,
comment_state:0,
AllCount:0
};
// 其它
$SCOPE['jsPath'] = 'http://sjs2.sinajs.cn/video/snake_video/js/';
$SCOPE['cssPath'] = 'http://sjs0.sinajs.cn/video/snake_video/css/';
$SCOPE['jsVersion'] = '1.0.0.34';
$SCOPE['cssVersion'] = '1.0.0.14';
$SCOPE['hotVideoUrl']='http://platform.sina.com.cn/top_news/top?app_key=1841630516&top_channel=video&top_type=day&top_cat=sp_ty_yypdpx&top_time=today&top_show_num=10&top_order=DESC&show_video_info=1&short_title=1';
// 模块
var $widget = [];
// suda 日志
$SCOPE['sudaData']={
code:"1420"
};
里面的vid:'121242131',就是vid后面的内容,但是我们使用jsoup解析不太好用,另一个地方就是他的相关视频 第一个就是当前要解析的视频,里面的标签是video-id="121242131",这个解析比较容易,所以我们解析来解析第二个地方来获取真实地址:
/**
* 获取新浪的视频
* @param url
* @return
*/
public VideoDemandModel getVideoDemandModel(String url){
VideoDemandModel model = new VideoDemandModel();
try {
Document doc = Jsoup.connect(url).get();
Element video_info = doc.getElementById("pl_video_info");
Element tit = video_info.select("div.tit").first();
model.setTitle(tit.getElementsByTag("h3").text());
Element vedioinfo_inner = video_info.select("div.vedioinfo_inner").first();
model.setDateTime(vedioinfo_inner.select("p.from").first().text());
Elements ems = vedioinfo_inner.select("em[task=oldinfor]");
if (ems != null && ems.size() > 0) {
model.setDescription(ems.first().text().trim());
}else {
ems = vedioinfo_inner.select("em[task=infor]");
model.setDescription(ems.first().text().trim());
}
Elements videoIds = doc.select("li[video-id]");
if (videoIds != null) {
Element li = videoIds.first();
Element videoLk = li.select("a.videoLk").first();
String img = videoLk.getElementsByTag("img").first().attr("_src");
model.setImg(img);
String time = videoLk.select("span.playTm").first().getElementsByTag("em").first().text();
model.setDateTime(time);
model.setUrl_real("http://v.iask.com/v_play_ipad.php?vid="+li.attr("video-id"));
}
System.out.println(model.toString());
} catch (Exception e) {
e.printStackTrace();
}
return model;
}
解析出的内容如下:
标题:视频信息 图片链接:http://p3.v.iask.com/603/259/121242141_2.jpg站点链接:null上传时间: 视频真实地址:http://v.iask.com/v_play_ipad.php?vid=121242141
使用vlc测试可以播放