最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java解析sina視頻

 更新時間:2014年01月10日 11:15:23   作者:  
本文介紹了一個java解析sina視頻地址的例子,從這個例子中可以學習到java使用sax解析xml的方法,大家可以參考修改成其它功能

用一個例子來說明,比如這個http://video.sina.com.cn/v/b/75314002-1648211320.html。
用火狐打開,開啟firebug,得到如下信息。

其中在這個請求

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

中得到的響應有我們想要的xml信息,其中vid就是上面紅色部分,uid后面的都可以忽略,我們在瀏覽器中直接輸入http://v.iask.com/v_play.php?vid=75314002還是可以得到相同的信息。自此解析的思路就變清晰了,在視頻鏈接中提取出vid,使用http://v.iask.com/v_play.php?vid=得到xml文件,解析xml文件就可以得到真實視頻地址了。

下面的是解析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類是我自己定義的一個數(shù)據(jù)model。在主函數(shù)里我們只要調用sax工廠實例化解析器就行了。

復制代碼 代碼如下:

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文件里還有很多其他信息,都可以解析出來,看自己需要了。

相關文章

  • rabbitmq結合spring實現(xiàn)消息隊列優(yōu)先級的方法

    rabbitmq結合spring實現(xiàn)消息隊列優(yōu)先級的方法

    本篇文章主要介紹了rabbitmq結合spring實現(xiàn)消息隊列優(yōu)先級的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java并發(fā)編程中的Exchanger解析

    Java并發(fā)編程中的Exchanger解析

    這篇文章主要介紹了Java并發(fā)編程中的Exchanger解析,Exchanger用于線程間數(shù)據(jù)的交換,它提供一個同步點,在這個同步點,兩個線程可以交換彼此的數(shù)據(jù),這兩個線程通過exchange方法交換數(shù)據(jù),如果第一個線程先執(zhí)行exchange()方法,需要的朋友可以參考下
    2023-11-11
  • Java中的二維數(shù)組的賦值與輸出方式

    Java中的二維數(shù)組的賦值與輸出方式

    這篇文章主要介紹了Java中的二維數(shù)組的賦值與輸出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java實現(xiàn)瀏覽器端大文件分片上傳

    Java實現(xiàn)瀏覽器端大文件分片上傳

    本文主要介紹了Java實現(xiàn)瀏覽器端大文件分片上傳,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java復合語句的使用方法詳解

    Java復合語句的使用方法詳解

    這篇文章主要介紹了Java編程中復合語句,結合相關的具體實例介紹了其用法,需要的朋友可以參考下
    2017-09-09
  • java 方法與數(shù)組基礎使用詳解

    java 方法與數(shù)組基礎使用詳解

    Java語言中的“方法”(Method)在其他語言當中也可能被稱為“函數(shù)”(Function),數(shù)組對于每一門編程語言來說都是重要的數(shù)據(jù)結構之一,當然不同語言對數(shù)組的實現(xiàn)及處理也不盡相同。Java 語言中提供的數(shù)組是用來存儲固定大小的同類型元素
    2022-04-04
  • Java線程狀態(tài)及同步鎖的操作方法

    Java線程狀態(tài)及同步鎖的操作方法

    Java中的thread類自帶有線程的一些方法,這些方法可以讓線程睡眠,插隊,提高線程調度的優(yōu)先級等等,它們提供了改變線程狀態(tài)的操作手段,這篇文章主要介紹了Java線程狀態(tài)及同步鎖,需要的朋友可以參考下
    2021-11-11
  • Java 語言守護線程 Daemon Thread使用示例詳解

    Java 語言守護線程 Daemon Thread使用示例詳解

    這篇文章主要為大家介紹了Java 語言守護線程 Daemon Thread使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • java與C 代碼運行效率的對比(整理)

    java與C 代碼運行效率的對比(整理)

    最近和朋友無意間討論起了 有關java 和C 的 效率問題, (我是java 推介者, 他是 c 語言推介者, 他做的是嵌入式)故,想通過網(wǎng)絡查詢一下, 總結一下,兩者到底效率如何,其有何差異,原因又是啥?各種優(yōu)勢有在何處?
    2021-04-04
  • 淺談Java 代理機制

    淺談Java 代理機制

    Java 有兩種代理方式,一種是靜態(tài)代理,另一種是動態(tài)代理。如果我們在代碼編譯時就確定了被代理的類是哪一個,那么就可以直接使用靜態(tài)代理;如果不能確定,那么可以使用類的動態(tài)加載機制,在代碼運行期間加載被代理的類這就是動態(tài)代理
    2021-06-06

最新評論

白玉县| 开封县| 龙井市| 灵武市| 康平县| 平远县| 吉林市| 嘉义县| 陆丰市| 永仁县| 姜堰市| 磐安县| 孟村| 孝义市| 定南县| 博兴县| 兴义市| 民勤县| 汽车| 柏乡县| 胶南市| 东源县| 崇明县| 桦川县| 宁化县| 通道| 眉山市| 德安县| 孙吴县| 江都市| 海原县| 抚松县| 辰溪县| 赣州市| 壤塘县| 嘉祥县| 措勤县| 桐庐县| 乌审旗| 隆回县| 贡觉县|