安卓TV开发(七) 移动智能终端多媒体之在线解析网页视频源
载请标明出处:http://blog.csdn.net/sk719887916/article/details/40049137,作者:skay
结束了所有UI绘制的学习,智能设备常用的应用音视频类,游戏类和浏览器类,本篇文章先从视频类应用开始,主流的视频播放器离不开在线解码,视频播放和在线直播等,今天就先学习怎么解析一个普通的视频网站html。想了解焦点可控UI的朋友可以阅读前几篇文章和上边文章。
移动智能终端UI之实现类似GridView的焦点控制FocusView框架。
解析网站,常用开源的jsoup进行解析 今天就先给大家看下怎么使用此开源jar包进行解析一个普通的网页 本篇用http://www.yinyuetai.com/为列,
一 建立用于接收的Model
/**
* @author liuyongkui
*
*/
public class TvTaiModel implements Serializable{
private static final long serialVersionUID = 1L;
/**
* 网页上面的视频连接
*/
private String href;
/**
* 解析以后的真正的视频连接
*/
private String realHref;
/**
* 视频的图片链接
*/
private String img;
/**
* 视频的标题
*/
private String title;
/**
* 视频的清晰度
*/
private String shdIco;
/**
* 视频的时间
*/
private String v_time_num;
/**
* 视频的艺人
*/
private String man;
/**
* 视频的描述
*/
private String description;
public String getHref() {
return href;
}
public void setHref(String href) {
this.href = href;
}
public String getRealHref() {
return realHref;
}
public void setRealHref(String realHref) {
this.realHref = realHref;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getShdIco() {
return shdIco;
}
public void setShdIco(String shdIco) {
this.shdIco = shdIco;
}
public String getV_time_num() {
return v_time_num;
}
public void setV_time_num(String v_time_num) {
this.v_time_num = v_time_num;
}
public String getMan() {
return man;
}
public void setMan(String man) {
this.man = man;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
二 建立用于获取管理视频资源的 DataVideoManager
1,解析来自音乐的MV列表
public static ArrayList<TvTaiModel> getYinYueTai(String url){
ArrayList<TvTaiModel> listData = new ArrayList<TvTaiModel>();
try {
Document doc = Jsoup.connect(url).get();
Element mv_list_vertical = doc.getElementById("mvlist");
Elements mv_lists = mv_list_vertical.select("li");
System.out.println(mv_lists.size());
for (Element mv : mv_lists) {
TvTaiModel yinYueTaiModel = new TvTaiModel();
Element thumb_mv = mv.select("div.thumb_mv").first();
Element href_a = thumb_mv.getElementsByTag("a").first();
yinYueTaiModel.setHref(href_a.attr("href"));
Element img = href_a.getElementsByTag("img").first();
yinYueTaiModel.setImg(img.attr("src"));
yinYueTaiModel.setTitle(img.attr("title"));
yinYueTaiModel.setV_time_num(thumb_mv.select("div.v_time_num").text());
Element info = mv.select("div.info").first();
// yinYueTaiModel.setDescription(info.select("p.description hid J_id").first().text());
listData.add(yinYueTaiModel);
}
}catch (Exception e){
e.printStackTrace();
}
return listData;
}
2, 解析QQ体育频道的视频列表
/**
* 获取QQ NBA视频列表
* @param url
* @return
*/
public static ArrayList<TvTaiModel> getQQNBA(String url){
ArrayList<TvTaiModel> listData = new ArrayList<TvTaiModel>();
try {
Document doc = Jsoup.connect(url).get();
Element ul = doc.getElementById("piclist");
Elements lists = ul.getElementsByTag("li");
for (Element video : lists) {
TvTaiModel model = new TvTaiModel();
Element href = video.select("div.bdhui_pic").first().getElementsByTag("a").first();
model.setHref(href.attr("href"));
Element img = href.getElementsByTag("img").first();
model.setImg(img.attr("src"));
model.setTitle(img.attr("alt"));
model.setV_time_num(video.select("td.lh16").text().replace(" ", " "));
System.out.println(model.toString());
listData.add(model);
}
} catch (Exception e) {
e.printStackTrace();
}
return listData;
}
3 通过两个列子可以看出 jsoup.connect(url).get();就可以获取网页的dom元素,无需我们建立连接和请求此jar已经封装好了请求并以返回xml文件
然后通过获取xml的元素节点可以获取里面的对应数据,具体网页还需要我们自己去打开源网页产看代码源,对于熟悉html和js朋友看懂一个类似音悦台和腾讯视频的网站静态代码不在话下 我们也可以解析更多的视频源,如优酷,目前已经有成熟的专门解析优酷是视频源的开源项目,但是对于一个实际开发视频客户端项目的人来说,我们无需去解析,因为服务器会提供相关的视频接口,供我们去请求获取视频数据返回json格式的数据源,
三 完善管理器
完善数据管理者,因为后面视频直播会用到相关此数据源
static ArrayList<TvTaiModel> getData(TvModle tvModle) {
String url = tvModle.getUrl();
List<TvTaiModel> taiModels = null;
switch (tvModle.getPostion()) {
case 0:
taiModels = getYinYueTai(url);
break;
case 1:
taiModels = getQQNBA(url);
break;
default:
break;
}
return (ArrayList<TvTaiModel>) taiModels;
}
到此数据接口和接收javabean已经写好,通过本次的视频源,下篇
【移动智能终端多媒体之在线加载网页视频源】
将继续讲解获取网络视频和播放的功能,欢迎大家的阅读。
参考资料:http://blog.csdn.net/jwzhangjie/article/details/17195011
如本篇侵犯到您的原创请及时联系本人,谢谢。
jsoup下载地址
http://download.csdn.net/detail/sk719887916/8852319
安卓TV开发(七) 移动智能终端多媒体之在线解析网页视频源的更多相关文章
- 安卓TV开发(八) 移动智能终端多媒体爬虫技术 获取加载网页视频源
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40049137,作者:skay 从上一篇学习中,学习了多媒体技术中的怎么去用josu ...
- 安卓TV开发(五) 移动智能终端UI之实现主流TV焦点可控UI
载请标明出处:http://blog.csdn.net/sk719887916,作者:skay 由于其他网站收录,导致你无法查看本系列原创文章请点击此处 安卓TV开发(四)实现主流智能T ...
- 安卓TV开发(六) 移动智能终端UI之实现类似GridView的焦点控制FocusView框架
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40045089,作者:skay 前言 安卓TV开发(五) 移动智能终端UI之实现主流 ...
- 安卓TV开发(十) 智能电视开发之在线视频直播
转载注明出处:http://blog.csdn.net/sk719887916/article/details/46582987 从<安卓TV开发(八) 移动智能终端多媒体之在线加载网页视频源& ...
- 安卓Tv开发(一)移动智能电视之焦点控制(触控事件)
前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验风格上有很大的区别,本系列博 ...
- 安卓TV开发(四) 实现主流智能TV视频播放器UI
前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验上有很大的区别,本系列博文主 ...
- 安卓TV开发(三) 移动智能设备之实现主流TV电视盒子焦点可控UI
前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验上有很大的区别,本系列博文主 ...
- 安卓Tv开发(二)移动智能电视之焦点控制(按键事件)
原文:http://blog.csdn.net/sk719887916/article/details/44781475 skay 前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家 ...
- 安卓TV开发(概述) 智能电视之视觉设计和体验分析
转载说明出处 :http://blog.csdn.net/sk719887916, 作者:skay 前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大 ...
随机推荐
- SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式
在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依 ...
- jdbcTemplate的queryForList
jdbcTemplate的queryForList的使用方法如下,它不一样的地方是,它获得的结果,会再放到一个map里去: List rows = jdbcTemplate.queryForList( ...
- java 之容器
在Java中,我们想要保存对象可以使用很多种手段.我们之前了解过的数组就是其中之一.但是数组具有固定的尺寸,而通常来说,程序总是在运行时根据条件来创建对象,我们无法预知将要创建对象的个数以及类型,所以 ...
- iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 ...
- 【Unity Shaders】Transparency —— 透明的cutoff shader
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- Java-IO之管道(PipedInputStream和PipedOutputStream)
java中PipedInputStream和PipedOutputStream分别是管道输入流和管道输出流,它的作用是让多线程可以通过管道进行线程间的通讯,在使用管道通信时,必须将PipedInput ...
- ROS_Kinetic_08 ROS的集成开发环境(IDEs)之使用Eclipse
ROS_Kinetic_08 ROS的集成开发环境(IDEs)之使用Eclipse ROS支持的IDEs比较丰富,这里以Eclipse为例介绍一下. 具体内容参考:http://wiki.ros.or ...
- Linux编译Windows共享目录下代码
Linux编译Windows共享目录下代码(金庆的专栏)万神服务器代码是跨平台的.平时策划在Windows上开自己的服务器测试,测试和发布服务器为Linux.开发时,先在Windows上编译测试,再到 ...
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十一)
机器人发射子弹已经完成了,下面看看怎么给玩家设置障碍. 大家从上篇的图可以看到,在机器和篮筐直接有若干障碍物.我们先看如何实现它们. 打开SpriteBuilder,在Sprites文件夹中新建Sma ...
- maven中去掉单元测试的配置
如果是在命令行中去掉测试,可以在命令行中输入:mvn install -Dmaven.test.skip=true 在pom.xml <plugins> <plugin& ...