java解析sina視頻
用一個(gè)例子來說明,比如這個(gè)http://video.sina.com.cn/v/b/75314002-1648211320.html。
用火狐打開,開啟firebug,得到如下信息。
其中在這個(gè)請(qǐng)求
http://v.iask.com/v_play.php?vid=75314002&uid=1648211320&pid=478&tid=&plid=4001&prid=ja_7_3485822616&referrer=&ran=0.2936802236363292&r=video.sina.com.cn
中得到的響應(yīng)有我們想要的xml信息,其中vid就是上面紅色部分,uid后面的都可以忽略,我們?cè)跒g覽器中直接輸入http://v.iask.com/v_play.php?vid=75314002還是可以得到相同的信息。自此解析的思路就變清晰了,在視頻鏈接中提取出vid,使用http://v.iask.com/v_play.php?vid=得到xml文件,解析xml文件就可以得到真實(shí)視頻地址了。
下面的是解析xml的代碼,使用sax解析xml。首先定義xml reader。
package hdu.fang.parser;
import hdu.fang.model.Video;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class XMLSaxReader extends DefaultHandler {
private List<Video> videos = null;
private Video video = null;
private Long timeLength = null;
private String tag = null;
@Override
public void startDocument() throws SAXException {
videos = new ArrayList<Video>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ("durl".equals(qName)) {
video = new Video();
}
tag = qName;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ("durl".equals(qName)) {
videos.add(video);
video = null;
}
tag = null;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (tag != null) {
String data = new String(ch, start, length);
if ("timelength".equals(tag)) {
timeLength = Long.valueOf(data);
} else if ("order".equals(tag)) {
video.setOrder(Integer.valueOf(data));
} else if ("url".equals(tag)) {
video.setUrl(data);
} else if ("length".equals(tag)) {
video.setLength(Integer.valueOf(data));
}
}
}
public List<Video> getVideos() {
return videos;
}
public long getLength() {
return timeLength;
}
}
Video類是我自己定義的一個(gè)數(shù)據(jù)model。在主函數(shù)里我們只要調(diào)用sax工廠實(shí)例化解析器就行了。
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
XMLSaxReader reader = new XMLSaxReader();
InputStream in_withcode = new ByteArrayInputStream(
xml.getBytes("UTF-8"));//xml就是剛得到的xml文件,類型String
sp.parse(in_withcode, reader);
videos=reader.getVideos();//得到Video List
timeLength=reader.getLength();//得到視頻長度
System.out.println(videos);
在xml文件里還有很多其他信息,都可以解析出來,看自己需要了。
- java代碼實(shí)現(xiàn)截圖功能(屏幕截圖)
- java實(shí)現(xiàn)區(qū)域內(nèi)屏幕截圖示例
- java編程實(shí)現(xiàn)屏幕截圖(截屏)代碼總結(jié)
- 使用Java實(shí)現(xiàn)系統(tǒng)托盤功能的介紹(附源碼以及截圖)
- Java實(shí)現(xiàn)屏幕截圖及剪裁
- Java模擬QQ桌面截圖功能實(shí)現(xiàn)方法
- java調(diào)用ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)換的方法
- 用java實(shí)現(xiàn)的獲取優(yōu)酷等視頻縮略圖的實(shí)現(xiàn)代碼
- 使用JMF實(shí)現(xiàn)java視頻播放器
- 詳解java調(diào)用ffmpeg轉(zhuǎn)換視頻格式為flv
- Java實(shí)現(xiàn)對(duì)視頻進(jìn)行截圖的方法【附ffmpeg下載】
相關(guān)文章
rabbitmq結(jié)合spring實(shí)現(xiàn)消息隊(duì)列優(yōu)先級(jí)的方法
本篇文章主要介紹了rabbitmq結(jié)合spring實(shí)現(xiàn)消息隊(duì)列優(yōu)先級(jí)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
Java 語言守護(hù)線程 Daemon Thread使用示例詳解
這篇文章主要為大家介紹了Java 語言守護(hù)線程 Daemon Thread使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
java與C 代碼運(yùn)行效率的對(duì)比(整理)
最近和朋友無意間討論起了 有關(guān)java 和C 的 效率問題, (我是java 推介者, 他是 c 語言推介者, 他做的是嵌入式)故,想通過網(wǎng)絡(luò)查詢一下, 總結(jié)一下,兩者到底效率如何,其有何差異,原因又是啥?各種優(yōu)勢有在何處?2021-04-04

