仿微博抓取视频网站,支持优酷/土豆/酷6/六间房/56网/音悦台/搜狐/奇艺的视频发布的java实现

视频分享效果为在站点内输入一视频网站某一视频链接,分享后即可类似微博或qq空间中那样直接点击播放,此代码赞只支持上述视频网站,6间房的视频有点问题,后面将继续扩展抓取其他视频网站。

图片

 

分享后效果图:

 

图片

实现代码如下:

package com;
/**
 * 视频实体
 * @author hanfei
 *
 */
public class Video {

private String title;
private String desc;
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;

}

public void setTitle(String title) {
this.title = title;
}

public String getTitle() {
return title;
}

public void setDesc(String desc) {
this.desc = desc;
}

public String getDesc() {
return desc;
}

}


视频工具类:

package com;

/**
 * 视频抓取工具类
 * @author hanfei
 *
 */
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) {
System.out.println(e);
video = null;

}

} else if (url.indexOf("tudou.com") != -1) {

try {

video = getTudouVideo(url);

} catch (Exception e) {

System.out.println("视频为空。。。。。");
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;

}

}

else if (url.indexOf("qiyi.com") != -1) {

try {
System.out.println("执行奇异网");
video = getQiyiVideo(url);

} catch (Exception e) {
System.out.println(e);
video = null;

}

}

return video;

}

/**
* 
* 获取优酷视频
* 
* @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=");
System.out.println(pic);

pic = pic.substring(local + 4);

/**
* 
* 获取视频地址
*/

String flash = getElementAttrById(doc, "link2", "value");

/**
* 
* 获取视频时间
*/

String time = getElementAttrById(doc, "download", "_href");

String[] arrays = time.split("\\|");
System.out.println("time" + time);
System.out.println(arrays.length);

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 {
// http://www.tudou.com/v/102387574/v.swf
Document doc = getURLContent(url);

String content = doc.html();
if (url.endsWith(".html")) {

System.out.println("执行htmol");
int beginLocal = content.indexOf("<script>var");

int endLocal = content.indexOf("</script>");

content = content.substring(beginLocal, endLocal);

// System.out.println(content);
//
// ScriptEngineManager mgr = new ScriptEngineManager();
// ScriptEngine engine = mgr.getEngineByName("JavaScript");
// engine.eval(content);
// Invocable inv = (Invocable) engine;
// inv.

/**
* 
* 获取视频地址
*/

String flash = getScriptVarByName("defaultIid", content);

flash = "http://js.tudouui.com/bin/player2/opn_22.swf?iid=" + flash;
System.out.print("flashURL" + flash);
/**
* 
* 获取视频缩略图
*/

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;
} else {

int beginLocal = content.indexOf("<script>document.domain");

int endLocal = content.indexOf("</script>");

content = content.substring(beginLocal, endLocal);

/**
* 
* 获取视频地址
*/

String flash = getScriptVarByName("iid", content);

flash = "http://js.tudouui.com/bin/player2/opn_22.swf?iid=" + flash;

/**
* 
* 获取视频缩略图
*/

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;

}

public static Video getQiyiVideo(String url) throws Exception {

Document doc = getURLContent(url);

String content = doc.html();

System.out.println("执行htmol");
int beginLocal = content.indexOf("<script");

int endLocal = content.indexOf("</script>");

content = content.substring(beginLocal, endLocal);

System.out.println(content);
String infoString = content.substring(content.indexOf("{"),
content.length());
System.out.println(infoString);
JSONObject infoOBJ = JSONObject.fromObject(infoString);
String videoId = infoOBJ.getString("videoId");
String title = infoOBJ.getString("title");
// http://www.qiyipic.com/thumb/20111013/v134588.jpg

String tvId = infoOBJ.getString("tvId");
String vurl = infoOBJ.getString("url");

vurl = vurl.replace("http://www.", "");
vurl = vurl.replace("http://", "");
// vurl=vurl.replace(":", "");

vurl = vurl.replace("/", ".");
vurl = vurl.replace(".", ",");

String[] urldata = vurl.split(",");
System.out.println(vurl);
String image = "http://www.qiyipic.com/thumb/" + urldata[3] + "/v"
+ tvId + ".jpg";
/**
* 
* 获取视频地址
*/
String flashUrl = "http://player.video.qiyi.com/" + videoId + "/0/600/"
+ urldata[0] + "/" + urldata[3] + "/" + urldata[4] + ".swf";

Video video = new Video();

video.setPic(image);

video.setFlash(flashUrl);

video.setTime("77");

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;

}

/**
* 
* 根据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;

}

/**
* 
* 获取网页的内容
*/

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_XMzExNzA1MDA4.html";

// String url = "http://www.tudou.com/programs/view/CHKM-8D5MmE/";

String url = "http://v.youku.com/v_playlist/f16343935o1p0.html";

// String url = "http://v.ku6.com/show/BpP5LeyVwvikbT1F.html";

// String url = "http://www.tudou.com/playlist/p/l10485826.html";

// String url = "http://www.56.com/u64/v_NTkzMDEzMTc.html";
// String url="http://www.tudou.com/playlist/p/l10485826i60175370.html";
url = "http://www.qiyi.com/dianshiju/20111008/23e2566d0ae56486.html";

// String[] s="yule,qiyi.com.20111011.c1837626ef2280a5.html".split(",");
// String a=s[1];
Video video = getVideoInfo(url);
if (video == null) {
System.out.println(url);
} else

{

System.out.println("视频缩略图:" + video.getPic());

System.out.println("视频地址:" + video.getFlash());

System.out.println("视频时长:" + video.getTime());

}
System.out.print(url.endsWith(".html"));

}

}
 

 

你可能感兴趣的:(java实现)