`
sunlightcs
  • 浏览: 76023 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

通过JAVA获取优酷、土豆、酷6、6间房等视频

阅读更多
通过JAVA获取优酷、土豆、酷6、6间房、56视频,现在很多社会网站都有这个功能,用户输入优酷、土豆、酷6、6间房、56视频地址后,能找到对应的视频及视频的缩略图,有些社区网站还能获取到视频的时长。
比如:新浪微博就有这个功能,当用户输入优酷、土豆、酷6、6间房、56视频网址后,就能获取到相应的视频地址及视频的缩略图。

代码如下:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
* 视频工具类
* @author sunlightcs
* 2011-4-6
* http://hi.juziku.com/sunlightcs/
*/
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;
	}
	
	
	/**
	 * 获取优酷视频
	 * @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;
	}
	
	
	/**
	 * 根据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_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());
	}
}


全文请访问:人人编程
分享到:
评论
13 楼 yhh 2013-05-25  
有没有什么能够解析视频内容的啊,要想知道视频的具体内容,通过页面源码,总是很被动,格式的改变,以及其他很多的小网站,总不能一一去看吧,而且还有动态加载的。
12 楼 sunlightcs 2011-04-15  
dingoo 写道
这个是不是要分析网页结构的啊,如果这些网站改版之后是不是也要修改一下代码?

是的,网页结构改变了,代码也要跟着改了。
11 楼 dingoo 2011-04-14  
这个是不是要分析网页结构的啊,如果这些网站改版之后是不是也要修改一下代码?
10 楼 java_user 2011-04-14  
这样只能把那个播放器下载过来
9 楼 sunlightcs 2011-04-14  
mercyblitz 写道
估计要投新手帖子了!



哈哈  我写的帖子都是新手帖了。
8 楼 sunlightcs 2011-04-14  
handby123 写道
求创新 
个人觉得思想的交流比整一堆代码有意思



嗯,是了。   主要是要实现这个功能,不写代码也不行了。
7 楼 handby123 2011-04-14  
求创新 
个人觉得思想的交流比整一堆代码有意思
6 楼 mercyblitz 2011-04-13  
估计要投新手帖子了!
5 楼 genggeng 2011-04-13  
一看标题就觉得会用Jsoup
4 楼 rox 2011-04-13  
谢谢,自己也需要这方面的功能。
3 楼 sunlightcs 2011-04-13  
jkvast 写道
随便看了下,挑了下youku的,
楼主只不过是到优酷页面取
<input type="text" id="link2" value="http://player.youku.com/player.php/Type/Folder/Fid/5738387/Ob/1/Pt/0/sid/XMjU4NDcwMzM2/v.swf" />

id为link2的这个input的value

但这个地址只不过是优酷的一个flash播放器而已

所以 视频是无法下载的

其他视频网站没看过

呵呵 所以 不知道楼主 这段代码有什么意义

如果可以 也最多只是个转帖视频的工具

所以楼主的标题含糊不清,我还以为是下载呢。。。 呵呵

最后说下,最新版的迅雷7已经支持优酷的视频文件真实地址嗅探了,改天瞧瞧


这个工具是做视频分享的时候用的,像t.sina.com.cn
2 楼 jkvast 2011-04-13  
随便看了下,挑了下youku的,
楼主只不过是到优酷页面取
<input type="text" id="link2" value="http://player.youku.com/player.php/Type/Folder/Fid/5738387/Ob/1/Pt/0/sid/XMjU4NDcwMzM2/v.swf" />

id为link2的这个input的value

但这个地址只不过是优酷的一个flash播放器而已

所以 视频是无法下载的

其他视频网站没看过

呵呵 所以 不知道楼主 这段代码有什么意义

如果可以 也最多只是个转帖视频的工具

所以楼主的标题含糊不清,我还以为是下载呢。。。 呵呵

最后说下,最新版的迅雷7已经支持优酷的视频文件真实地址嗅探了,改天瞧瞧
1 楼 sunlightcs 2011-04-13  
单个获取视频的类,在我博客里有了,呵呵

相关推荐

    微生物细胞壁中S层蛋白的功能与结构解析及其应用前景

    内容概要:本文深入探讨了微生物表面层次(S-layer)蛋白质的结构和功能,尤其关注其在古菌和细菌中的角色。文中详细介绍了S层结构特征,如形成二維晶格的方式以及与其他细胞外膜成分的相互作用机制。对于S层的具体生物学作用——从保护细胞到适应环境变化——都有详尽论述,并且对不同种类微生物S层的特异性进行了分类比较。此外,还提到了当前的研究热点和潜在的应用领域。 适合人群:生物学家、微生物学家及其他生命科学研究人员;对细胞生物学特别是细胞壁研究感兴趣的学生及专业人士。 使用场景及目标:作为参考资料帮助科学家理解S层的物理化学属性,为实验设计提供思路,推动相关领域学术交流与发展;也为寻找新的工业材料和技术提供了理论依据。 阅读建议:鉴于论文的技术性强且内容丰富复杂,在初读时可以先把握各章节的大致意义,后续针对个人感兴趣的专题进一步深入了解。由于涉及到大量的分子生物学知识,请确保读者有良好的背景基础。同时推荐配合最新的科研报道一同学习以获取最新进展。

    一个简单的Python爬虫示例,使用了requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML页面 这个示例将从一个简单的网页中获取标题并打印出来

    python爬虫,一个简单的Python爬虫示例,使用了requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML页面。这个示例将从一个简单的网页中获取标题并打印出来。

    深度学习中全连接神经网络与卷积神经网络融合用于猫狗二分类任务(PyTorch实现)-含代码设计和报告

    内容概要:本文介绍了一种使用PyTorch构建的深度学习模型,该模型结合了一个包含一个隐藏层的全连接神经网络(FCN)和一个卷积神经网络(CNN)。模型用于解决CIFAR-10数据集中猫狗图片的二分类问题。文章详细描述了从数据预处理到模型架构设计、融合方式选择、损失函数设定以及训练和测试流程。实验证明,模型的有效性和融合的优势得到了显著体现。 适用人群:面向具有一定机器学习和Python编程基础的研究人员和技术爱好者。 使用场景及目标:本项目的目的是提供一种可行的猫狗分类解决方案,同时帮助研究者深入了解两类网络的工作机制及其协作的可能性。 其他说明:文中不仅展示了完整的代码片段,还讨论了多种改进方向如结构优化、预处理策略、超参数调节、引入正则化技术等。 本项目适合有兴趣探究全连接网路与卷积网络结合使用的从业者。无论是初学者想要加深对这两类基本神经网络的理解还是希望找到新的切入点做相关研究的专业人士都可以从中受益。 此资源主要用于指导如何用Python(借助于PyTorch框架)实现针对特定分类任务设计的人工智能系统。它强调了实验的设计细节和对关键组件的选择与调优。 此外,作者还在最后探讨了多个可用于改善现有成果的方法,鼓励大家持续关注并试验不同的改进措施来提升模型性能。

    简传-win-1.4.1-x64.exe

    简传1.4.1 windows安装包,支持局域网内文件和文本的传输,可以跨操作系统

    地面无线电台(站)设置使用申请表.xlsx

    地面无线电台(站)设置使用申请表.xlsx

    【Python】Python爬虫实战--小猪短租爬虫_pgj.zip

    【Python】Python爬虫实战--小猪短租爬虫_pgj

    comsol模型,变压器匝间短路5%,电磁场,二维模型,瞬态 包括电流变化曲线,正常与匝短后的绕组上的轴向磁密和辐向磁密波形与分布,铁心的磁密变化

    comsol模型,变压器匝间短路5%,电磁场,二维模型,瞬态 包括电流变化曲线,正常与匝短后的绕组上的轴向磁密和辐向磁密波形与分布,铁心的磁密变化

    数据分析-63-基于逻辑回归模型的医疗数据分析(拟合度差)

    文中使用了逻辑回归模型对病人如约就诊与相关变量进行分析,结果发现该数据对逻辑回归模型的拟合程度很差,需要在后续使用其他模型进行进一步的拟合。因此,**该文章未能成功探索到相关变量和如约就诊之间的关系,不能提供准确的参考,可以作为小白的逻辑回归模型流程参照使用**。且待后续更新(课程和考试繁忙,学习进度较为缓慢,尚在学习中,但一定会进行补充)

    QQ空间全能王软件易语言源码【赠送 易语言模块+易语言教程】

    QQ空间全能王软件易语言源码【赠送 易语言模块+易语言教程】 一、QQ空间全能王软件易语言源码 二、QQ空间全能王软件易语言模块 三、赠送2套易语言教程 1、价值150易语言视频教程光盘 2、价值900E锦学院易语言POST+JS实战,仅供学习研究 QQ空间全能王软件易语言源码【赠送 易语言模块+易语言教程】

    2023-04-06-项目笔记 - 第三百六十八阶段 - 4.4.2.366全局变量的作用域-366 -2025.01.04

    2023-04-06-项目笔记-第三百六十八阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.366局变量的作用域_366- 2025-01-04

    【组合导航】基于matlab卡尔曼滤波KF IMU和UWB融合高精度定位组合导航【含Matlab源码 10905期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    GUI(1)代码.doc

    java面向对象程序设计实验报告

    Java学生信息管理系统(MySQL版)源码+数据库+文档说明.zip

    Java学生信息管理系统(MySQL版)源码+数据库+文档说明.zip,含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 Java学生信息管理系统(MySQL版)源码+数据库+文档说明.zipJava学生信息管理系统(MySQL版)源码+数据库+文档说明.zipJava学生信息管理系统(MySQL版)源码+数据库+文档说明.zipJava学生信息管理系统(MySQL版)源码+数据库+文档说明.zipJava学生信息管理系统(MySQL版)源码+数据库+文档说明.zipJava学生信息管理系统(MySQL版)源码+数据库+文档说明.zipJava学生信息管理系统(MySQL版)源码+数据库+文档说明.zipJava学生信息管理系统(MySQL版)源码+数据库+文档说明.zipJava学生信息管理系统(MySQL版)源码+数据库+文档说明.zipJava学生信息管理系统(MySQL版)源码+数据库+文档说明.zi

    多时间尺度滚动优化的多能源微网双层调度模型 参考文档:Collaborative Autonomous Optimization of Interconnected Multi-Energy Sys

    多时间尺度滚动优化的多能源微网双层调度模型 参考文档:《Collaborative Autonomous Optimization of Interconnected Multi-Energy Systems with Two-Stage Transactive Control Framework》 代码主要做的是一个多能源微网的优化调度问题,首先对于下层多能源微网模型,考虑以其最小化运行成本为目标函数,通过多时间尺度滚动优化求解其最优调度策略,对于上层模型,考虑运营商以最小化运营成本为目标函数,同时考虑变压器过载等问题,构建了一个两阶段优化模型,通过互补松弛条件以及KKT条件,对模型进行了化简求解。

    Multimodal Deep Learning

    内容概要:《Multimodal Deep Learning.pdf》是一本深入探讨多模态深度学习的专业书籍,涵盖自然语言处理(NLP)和计算机视觉(CV)领域最新的研究进展与应用实例。本书按照时间顺序介绍了该领域的演进过程和技术背景,并详细讲解了将不同模态数据转换或融合的技术框架,如图像到文本、文本到图像、支持视觉的语言模型和支持语言的视觉模型等。同时书中也对未来的发展趋势进行了展望并提出了当前技术存在的挑战及改进方向,最后强调了几款最新发布的架构的重要性以及向视频扩展的可能性。 适合人群:对自然语言处理、计算机视觉有浓厚兴趣的研究人员、工程师或者学生,尤其是从事相关技术开发工作的读者。 使用场景及目标:帮助用户了解多模态深度学习的核心原理;为开发者提供实用的参考工具;激发新的科研创意和技术突破。 阅读建议:鉴于这本书籍内容丰富且前沿,在阅读过程中应当关注每一章节所涉及的基本概念和具体案例之间的联系,结合实际应用场景理解各部分内容,并尝试复现文中提到的关键实验以加强记忆。此外,随着该领域快速发展,鼓励持续追踪最新的文献报道来补充书内的知识点。

    matlab 滤波器设计,基于matlab的模拟滤波器和数字滤波器设计,其中数字滤波器包扩IIR和FIR的低通、高通、带通、带阻四大类型,模拟滤波器包括巴特沃斯(Butterworth)和切比雪夫(C

    matlab 滤波器设计,基于matlab的模拟滤波器和数字滤波器设计,其中数字滤波器包扩IIR和FIR的低通、高通、带通、带阻四大类型,模拟滤波器包括巴特沃斯(Butterworth)和切比雪夫(Chebyshev)算法下的低通、高通、带通、带阻四种类型。

    关键词:一致性算法;直流微电网;下垂控制;分布式二次控制;电压电流恢复与均分;非线性负载;MATLAB Simulink;顶刊复现,有意者加好友;设有粉丝价,本模型不,运行时间较长耐心等待 主题:提出

    关键词:一致性算法;直流微电网;下垂控制;分布式二次控制;电压电流恢复与均分;非线性负载;MATLAB Simulink;顶刊复现,有意者加好友;设有粉丝价,本模型不,运行时间较长耐心等待 主题:提出了一种新的基于一致性算法的直流微电网均流和均压二级控制方案,该微电网由分布式电源、动态RLC和非线性ZIE(恒阻抗、恒电流和指数型)负载组成。 分布式二级控制器位于初级电压控制层(下垂控制层)之上,并利用通过与邻居通信来计算必要的控制动作。 除了表明在稳定状态下总是能达到预期的目标之外,还推导了恒功率负载(即零指数负载)平衡点存在和唯一的充分条件。 该控制方案仅依赖于本地信息,便于即插即用。 最后提供了电压稳定性分析,并通过仿真说明了该方案的优秀性能和鲁棒性。

    管理工程系学生周五和周六晚不住校申请表.doc

    管理工程系学生周五和周六晚不住校申请表.doc

    【C++】哔哩哔哩直播万能场控机器人,弹幕姬+答谢姬+回复姬+点歌姬+各种小骚操作,目前唯一可编程机器人.zip

    【C++】哔哩哔哩直播万能场控机器人,弹幕姬+答谢姬+回复姬+点歌姬+各种小骚操作,目前唯一可编程机器人

    自适应大领域搜索算法(ALNS)matlab解决tsp问题,与传统大规模领域搜索算法(LNS)相比收敛性强,运行时间短,很好的学习资料

    自适应大领域搜索算法(ALNS)matlab解决tsp问题,与传统大规模领域搜索算法(LNS)相比收敛性强,运行时间短,很好的学习资料

Global site tag (gtag.js) - Google Analytics