Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          通過JAVA獲取優(yōu)酷、土豆、酷6、6間房、56視頻,現(xiàn)在很多社會網(wǎng)站都有這個功能,用戶輸入優(yōu)酷、土豆、酷6、6間房、56視頻地址后,能找到對應(yīng)的視頻及視頻的縮略圖,有些社區(qū)網(wǎng)站還能獲取到視頻的時長。
          比如:新浪微博就有這個功能,當(dāng)用戶輸入優(yōu)酷、土豆、酷6、6間房、56視頻網(wǎng)址后,就能獲取到相應(yīng)的視頻地址及視頻的縮略圖。

          代碼如下:
          import?org.jsoup.Jsoup;
          import?org.jsoup.nodes.Document;
          import?org.jsoup.nodes.Element;
          import?org.jsoup.select.Elements;

          public?class?VideoUtil?{
          ????
          ????
          /**
          ?????*?獲取視頻信息
          ?????*?
          @param?url
          ?????*?
          @return
          ?????
          */
          ????
          public?static?Video?getVideoInfo(String?url){
          ????????Video?video?
          =?new?Video();
          ????????
          ????????
          if(url.indexOf("v.youku.com")!=-1){
          ????????????
          try?{
          ????????????????video?
          =?getYouKuVideo(url);
          ????????????}?
          catch?(Exception?e)?{
          ????????????????video?
          =?null;
          ????????????}
          ????????}
          else?if(url.indexOf("tudou.com")!=-1){
          ????????????
          try?{
          ????????????????video?
          =?getTudouVideo(url);
          ????????????}?
          catch?(Exception?e)?{
          ????????????????video?
          =?null;
          ????????????}
          ????????}
          else?if(url.indexOf("v.ku6.com")!=-1){
          ????????????
          try?{
          ????????????????video?
          =?getKu6Video(url);
          ????????????}?
          catch?(Exception?e)?{
          ????????????????video?
          =?null;
          ????????????}
          ????????}
          else?if(url.indexOf("6.cn")!=-1){
          ????????????
          try?{
          ????????????????video?
          =?get6Video(url);
          ????????????}?
          catch?(Exception?e)?{
          ????????????????video?
          =?null;
          ????????????}
          ????????}
          else?if(url.indexOf("56.com")!=-1){
          ????????????
          try?{
          ????????????????video?
          =?get56Video(url);
          ????????????}?
          catch?(Exception?e)?{
          ????????????????video?
          =?null;
          ????????????}
          ????????}
          ????????
          ????????
          return?video;
          ????}
          ????
          ????
          ????
          /**
          ?????*?獲取優(yōu)酷視頻
          ?????*?
          @param?url??視頻URL
          ?????
          */
          ????
          public?static?Video?getYouKuVideo(String?url)?throws?Exception{
          ????????Document?doc?
          =?getURLContent(url);
          ????????
          ????????
          /**
          ?????????*獲取視頻縮略圖?
          ?????????
          */
          ????????String?pic?
          =?getElementAttrById(doc,?"s_sina",?"href");
          ????????
          int?local?=?pic.indexOf("pic=");
          ????????pic?
          =?pic.substring(local+4);
          ????????
          ????????
          /**
          ?????????*?獲取視頻地址
          ?????????
          */????????
          ????????String?flash?
          =?getElementAttrById(doc,?"link2",?"value");
          ????????
          ????????
          /**
          ?????????*?獲取視頻時間
          ?????????
          */????
          ????????String?time?
          =?getElementAttrById(doc,?"download",?"href");
          ????????String?[]arrays?
          =?time.split("\\|");
          ????????time?
          =?arrays[4];
          ????????
          ????????Video?video?
          =?new?Video();
          ????????video.setPic(pic);
          ????????video.setFlash(flash);
          ????????video.setTime(time);
          ????????
          ????????
          return?video;
          ????}
          ????
          ????
          ????
          /**
          ?????*?獲取土豆視頻
          ?????*?
          @param?url??視頻URL
          ?????
          */
          ????
          public?static?Video?getTudouVideo(String?url)?throws?Exception{
          ????????Document?doc?
          =?getURLContent(url);
          ????????String?content?
          =?doc.html();
          ????????
          int?beginLocal?=?content.indexOf("<script>document.domain");
          ????????
          int?endLocal?=?content.indexOf("</script>");
          ????????content?
          =?content.substring(beginLocal,?endLocal);
          ????????
          ????????
          /**
          ?????????*?獲取視頻地址
          ?????????
          */????
          ????????String?flash?
          =?getScriptVarByName("iid_code",?content);
          ????????flash?
          =?"http://www.tudou.com/v/"?+?flash?+?"/v.swf";
          ????????
          ????????
          /**
          ?????????*獲取視頻縮略圖?
          ?????????
          */
          ????????String?pic?
          =?getScriptVarByName("thumbnail",?content);
          ????????
          ????????
          /**
          ?????????*?獲取視頻時間
          ?????????
          */????
          ????????String?time?
          =?getScriptVarByName("time",?content);

          ????????Video?video?
          =?new?Video();
          ????????video.setPic(pic);
          ????????video.setFlash(flash);
          ????????video.setTime(time);
          ????????
          ????????
          return?video;
          ????}
          ????
          ????
          ????
          /**
          ?????*?獲取酷6視頻
          ?????*?
          @param?url??視頻URL
          ?????
          */
          ????
          public?static?Video?getKu6Video(String?url)?throws?Exception{
          ????????Document?doc?
          =?getURLContent(url);
          ????????
          ????????
          /**
          ?????????*?獲取視頻地址
          ?????????
          */
          ????????Element?flashEt?
          =?doc.getElementById("outSideSwfCode");
          ????????String?flash?
          =?flashEt.attr("value");
          ????????
          ????????
          /**
          ?????????*?獲取視頻縮略圖
          ?????????
          */
          ????????Element?picEt?
          =?doc.getElementById("plVideosList");
          ????????String?time?
          =?null;
          ????????String?pic?
          =?null;
          ????????
          if(picEt!=null){
          ????????????Elements?pics?
          =?picEt.getElementsByTag("img");
          ????????????pic?
          =?pics.get(0).attr("src");
          ????????????
          ????????????
          /**
          ?????????????*?獲取視頻時長
          ?????????????
          */
          ????????????Element?timeEt?
          =?picEt.select("span.review>cite").first();?
          ????????????time?
          =?timeEt.text();
          ????????}
          else{
          ????????????pic?
          =?doc.getElementsByClass("s_pic").first().text();
          ????????}
          ????????
          ????????Video?video?
          =?new?Video();
          ????????video.setPic(pic);
          ????????video.setFlash(flash);
          ????????video.setTime(time);
          ????????
          ????????
          return?video;
          ????????
          ????}
          ????
          ????
          ????
          /**
          ?????*?獲取6間房視頻
          ?????*?
          @param?url??視頻URL
          ?????
          */
          ????
          public?static?Video?get6Video(String?url)?throws?Exception{
          ????????Document?doc?
          =?getURLContent(url);
          ????????
          ????????
          /**
          ?????????*?獲取視頻縮略圖
          ?????????
          */
          ????????Element?picEt?
          =?doc.getElementsByClass("summary").first();
          ????????String?pic?
          =?picEt.getElementsByTag("img").first().attr("src");
          ????????
          ????????
          /**
          ?????????*?獲取視頻時長
          ?????????
          */
          ????????String?time?
          =?getVideoTime(doc,?url,?"watchUserVideo");
          ????????
          if(time==null){
          ????????????time?
          =?getVideoTime(doc,?url,?"watchRelVideo");
          ????????}
          ????????
          ????????
          /**
          ?????????*?獲取視頻地址
          ?????????
          */
          ????????Element?flashEt?
          =?doc.getElementById("video-share-code");
          ????????doc?
          =?Jsoup.parse(flashEt.attr("value"));??
          ????????String?flash?
          =?doc.select("embed").attr("src");
          ????????
          ????????Video?video?
          =?new?Video();
          ????????video.setPic(pic);
          ????????video.setFlash(flash);
          ????????video.setTime(time);
          ????????
          ????????
          return?video;
          ????}
          ????
          ????
          ????
          /**
          ?????*?獲取56視頻
          ?????*?
          @param?url??視頻URL
          ?????
          */
          ????
          public?static?Video?get56Video(String?url)?throws?Exception{
          ????????Document?doc?
          =?getURLContent(url);
          ????????String?content?
          =?doc.html();
          ????????
          ????????
          /**
          ?????????*?獲取視頻縮略圖
          ?????????
          */
          ????????
          int?begin?=?content.indexOf("\"img\":\"");
          ????????content?=?content.substring(begin+7,?begin+200);
          ????????
          int?end?=?content.indexOf("\"};");
          ????????String?pic?=?content.substring(0,?end).trim();
          ????????pic?
          =?pic.replaceAll("\\\\",?"");????????
          ????????
          ????????
          /**
          ?????????*?獲取視頻地址
          ?????????
          */
          ????????String?flash?
          =?"http://player.56.com"?+?url.substring(url.lastIndexOf("/"),?url.lastIndexOf(".html"))?+?".swf";
          ????????
          ????????Video?video?
          =?new?Video();
          ????????video.setPic(pic);
          ????????video.setFlash(flash);
          ????????
          ????????
          return?video;
          ????}

          ????
          /**
          ?????*?獲取6間房視頻時長????
          ?????
          */
          ????
          private?static?String?getVideoTime(Document?doc,?String?url,?String?id)?{
          ????????String?time?
          =?null;
          ????????
          ????????Element?timeEt?
          =?doc.getElementById(id);?
          ????????Elements?links?
          =?timeEt.select("dt?>?a");
          ????????
          ????????
          ????????
          for?(Element?link?:?links)?{
          ??????????String?linkHref?
          =?link.attr("href");
          ??????????
          if(linkHref.equalsIgnoreCase(url)){
          ??????????????time?
          =?link.parent().getElementsByTag("em").first().text();
          ??????????????
          break;
          ??????????}
          ????????}
          ????????
          return?time;
          ????}
          ????
          ????????????
          ????
          /**
          ?????*?獲取script某個變量的值
          ?????*?
          @param?name??變量名稱
          ?????*?
          @return???返回獲取的值?
          ?????
          */
          ????
          private?static?String?getScriptVarByName(String?name,?String?content){
          ????????String?script?
          =?content;
          ????????
          ????????
          int?begin?=?script.indexOf(name);
          ????????
          ????????script?
          =?script.substring(begin+name.length()+2);
          ????????
          ????????
          int?end?=?script.indexOf(",");
          ????????
          ????????script?
          =?script.substring(0,end);
          ????????
          ????????String?result
          =script.replaceAll("'",?"");
          ????????result?
          =?result.trim();
          ????????
          ????????
          return?result;
          ????}
          ????
          ????
          ????
          /**
          ?????*?根據(jù)HTML的ID鍵及屬于名,獲取屬于值
          ?????*?
          @param?id??HTML的ID鍵
          ?????*?
          @param?attrName??屬于名
          ?????*?
          @return??返回屬性值
          ?????
          */
          ????
          private?static?String?getElementAttrById(Document?doc,?String?id,?String?attrName)throws?Exception{
          ????????Element?et?
          =?doc.getElementById(id);
          ????????String?attrValue?
          =?et.attr(attrName);
          ????????
          ????????
          return?attrValue;
          ????}
          ????
          ????
          ????
          ????
          /**
          ?????*?獲取網(wǎng)頁的內(nèi)容
          ?????
          */
          ????
          private?static?Document?getURLContent(String?url)?throws?Exception{
          ????????Document?doc?
          =?Jsoup.connect(url)
          ??????????.data(
          "query",?"Java")
          ??????????.userAgent(
          "Mozilla")
          ??????????.cookie(
          "auth",?"token")
          ??????????.timeout(
          6000)
          ??????????.post();
          ????????
          return?doc;
          ????}
          ????
          ????
          ????
          public?static?void?main(String[]?args)?{
          ????????
          //String?url?=?"http://v.youku.com/v_show/id_XMjU0MjI2NzY0.html";
          ????????
          //String?url?=?"http://www.tudou.com/programs/view/pVploWOtCQM/";
          ????????
          //String?url?=?"http://v.ku6.com/special/show_4024167/9t7p64bisV2A31Hz.html";
          ????????
          //String?url?=?"http://v.ku6.com/show/BpP5LeyVwvikbT1F.html";
          ????????
          //String?url?=?"http://6.cn/watch/14757577.html";
          ????????String?url?=?"http://www.56.com/u64/v_NTkzMDEzMTc.html";
          ????????Video?video?
          =?getVideoInfo(url);
          ????????System.out.println(
          "視頻縮略圖:"+video.getPic());
          ????????System.out.println(
          "視頻地址:"+video.getFlash());
          ????????System.out.println(
          "視頻時長:"+video.getTime());
          ????}
          }

          視頻封裝類

          public?class?Video?{
          ????
          private?String?flash;
          ????
          private?String?pic;
          ????
          private?String?time;
          ????
          public?String?getFlash()?{
          ????????
          return?flash;
          ????}
          ????
          public?void?setFlash(String?flash)?{
          ????????
          this.flash?=?flash;
          ????}
          ????
          public?String?getPic()?{
          ????????
          return?pic;
          ????}
          ????
          public?void?setPic(String?pic)?{
          ????????
          this.pic?=?pic;
          ????}
          ????
          public?String?getTime()?{
          ????????
          return?time;
          ????}
          ????
          public?void?setTime(String?time)?{
          ????????
          this.time?=?time;
          ????}
          }

          其中要用到一個JAR包,鏈接地址如下:
          http://jsoup.org/packages/jsoup-1.5.2.jar

          posted on 2011-06-02 23:49 禮物 閱讀(2668) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。

          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 嘉义市| 昆明市| 兴业县| 靖西县| 长葛市| 崇信县| 兴宁市| 福贡县| 鄂伦春自治旗| 宝应县| 临西县| 闸北区| 新平| 乌兰浩特市| 珠海市| 铜陵市| 淮北市| 永福县| 江西省| 汽车| 张家口市| 盐边县| 丹巴县| 乐业县| 神农架林区| 高陵县| 襄樊市| 葫芦岛市| 舟山市| 桂平市| 沧州市| 宜春市| 清水河县| 绥江县| 桐庐县| 金华市| 鹿邑县| 兰州市| 滦南县| 上高县| 闵行区|