CHSNS#中通过youku的视频网址获取视频截图及视频信息

简介: 有几位朋友问我CHSNS#中的视频插件,提交时只提供了youku视频的地址,却可以自动获取视频的标题及缩略图,这个是如何实现的. 实现方式如下 youku的站外引用提供了如下地址 http://player.

有几位朋友问我CHSNS#中的视频插件,提交时只提供了youku视频的地址,却可以自动获取视频的标题及缩略图,这个是如何实现的.

image

实现方式如下

youku的站外引用提供了如下地址

image

http://player.youku.com/player.php/sid/XNTg0NDExMzI=/v.swf

其中XNTg0NDExMzI=这个部分可以看做是视频的ID

而每次视频播放时v.swf通过以下网址获取视频信息

http://v.youku.com/player/getPlayList/VideoIDS/视频的ID/version/5/source/out?onData=%5Btype%20Function%5D&n=3

这个个网址返回的是一段json,类似

{"data":[{"tt":"0","ct":"a","cs":"2143","logo":"http:\/\/vimg12.youku.com\/1100641F46493E8D0B3EFF0048E76B57CA9FBD-CEC7-7777-3402-EC9732C9950B","seed":5484,"tags":["\u7f8e\u56fd","\u98df\u54c1"],"categories":"91","streamsizes":{"flv":"3111068"},"streamfileids":{"flv":"19*67*19*19*2*42*19*16*19*19*42*61*47*44*32*46*19*5*42*42*46*61*19*19*42*32*44*50*2*5*42*37*61*30*16*16*37*23*26*37*61*30*37*26*23*44*16*16*26*5*16*47*46*26*30*50*19*16*44*44*12*37*46*47*12*46*"},"videoid":"14610283","segs":{"flv":[{"no":0,"size":"3111068","seconds":"90.00"}]},"fileid":"19*67*19*19*2*42*19*16*19*19*42*61*47*44*32*46*19*5*42*42*46*61*19*19*42*32*44*50*2*5*42*37*61*30*16*16*37*23*26*37*61*30*37*26*23*44*16*16*26*5*16*47*46*26*30*50*19*16*44*44*12*37*46*47*12*46*","username":"dongdong19850912","userid":"4777835","title":"\u591a\u79cd\u7f8e\u56fd\u8f93\u534e\u98df\u54c1\u88ab\u68c0\u51fa\u8d28\u91cf\u95ee\u9898","key1":"bd7ed04d","key2":"3fd76e2fd48efb01","seconds":"90.00","streamtypes":["flv"]}],"user":{"id":0}}

其中的Title自然就是标题,logo就是视频的截图

 

这里可以用json.net来反序列化获取,但我这里是使用的正则来提取的

		static public string[] GetMediaPic(string url) {
			if (url.ToLower().StartsWith("http://player.youku.com/player.php/sid/")) {//判断是否为youku视频
				return getPicYouKu(url);
			} else {
				return new string[0];
			}
		}
		static string[] getPicYouKu(string url) {
			string id = url.Replace(@"http://player.youku.com/player.php/sid/","").Replace(@"/v.swf","");
			string newurl = string.Format(
@"http://v.youku.com/player/getPlayList/VideoIDS/{0}/version/5/source/out?onData=%5Btype%20Function%5D&n=3"
			, id);
			var hp = new HttpProc(newurl);//这个类见下方网址
                           var html = hp.Proc().Replace(@"\/", "/");//通过get方式获取信息
			var re = new Regex("(http://[^\"]+)[\\w\\W]+\"title\":\"([^\"]+)\"");//与此同时提取截图和标题
			var m = re.Match(html);
			if (m.Success) {
				var ret = new string[2];
				ret[0] = m.Groups[1].Value;//0是url
				ret[1] = UnicodeToChinese(m.Groups[2].Value);//1是title,要从unicode转为汉字
				return ret;
			} else
				return new string[0];//如果没有就返回空数组     
		}
                /// <summary>
		/// unicode转汉字
		/// </summary>
		/// <param name="str"></param>
		/// <returns></returns>
		static public string UnicodeToChinese(string str) {
			return ConvertTo(str, "unicode");
		}
		static string ConvertTo(string str, string encode) {
			StringBuilder tmpStr = new StringBuilder();
			for (int i = 0; i < str.Length; i++) {
				if (str[i] == '\\' && str[i + 1] == 'u') {
					string s1 = str.Substring(i + 2, 2);
					string s2 = str.Substring(i + 4, 2);
					int t1 = Convert.ToInt32(s1, 16);
					int t2 = Convert.ToInt32(s2, 16);
					byte[] array = new byte[2];
					array[0] = (byte)t2;
					array[1] = (byte)t1;
					string s = System.Text.Encoding.GetEncoding(encode).GetString(array);
					tmpStr.Append(s);
					i = i + 5;
				} else { tmpStr.Append(str[i]); }
			}
			return tmpStr.ToString();
		}

HttpProc可参见:http://www.51aspx.com/CV/CHSNS122,UserWebService,ChAlumna,Reqres.cs.html

 

如无外最后返回数组即为[0]存标题,[1]存截图地址

 

var x=GetMediaPic("http://player.youku.com/player.php/sid/XNTg0NDExMzI=/v.swf");

if(x.Length==0){
        //不是youku或无法获取

}else{

      Title=x[0];

       Url=x[1];

}
目录
相关文章
|
1月前
|
前端开发 安全 应用服务中间件
Axure9官网网页的源代码篡改,自定义为个人开发使用
Axure9官网网页的源代码篡改,自定义为个人开发使用
|
3月前
查询小世界QQ账号网页源码分享
查询小世界QQ账号网页源码分享
75 3
成功解决最新版腾讯QQ软件出现的二维码加载失败,请点击刷新(一步搞定!)
成功解决最新版腾讯QQ软件出现的二维码加载失败,请点击刷新(一步搞定!)
成功解决最新版腾讯QQ软件出现的二维码加载失败,请点击刷新(一步搞定!)
|
XML 定位技术 数据格式
DEDECMS织梦系统全站链接txt格式网站地图的制作教程
网站地图的制作三种格式:xml格式、txt格式、以及html格式,这在浏览器地址栏输入 “主域名/sitemap.xml” 的方式,尝试查看对应网站的xml格式的网站地图。把 输入内容改成 “主域名/sitemap.html” 就可以查看html格式的网站地图了。网站地图的命名方式默认是sitemap,但是网站管理者(站长)可以自由修改。
DEDECMS织梦系统全站链接txt格式网站地图的制作教程
使用APICloud实现文档下载和预览功能
使用 APICloud 开发 app 时,可以使用 api.download 方法实现下载;预览文档可以使用 superFile 模块。superFile 模块封装了基于腾讯浏览服务 TBS,使用 X5Webkit 内核,实现文件的展示功能,支持多种文件格式(PDF、Word、Execl、TXT、PPT)。
405 0
APICloud 实现文档下载和预览功能
文档下载是很多app,尤其是企业应用中常用的功能。使用APICloud开发app时,可以使用api.download方法实现下载;预览文档可以使用superFile 模块。superFile 模块封装了基于腾讯浏览服务TBS,使用X5Webkit内核,实现文件的展示功能,支持多种文件格式(PDF、Word、Execl、TXT、PPT)。
265 0
APICloud 实现文档下载和预览功能
|
Java
解决csdn网页离线后打开自动跳转并批量处理下载的所有csdn文件
解决csdn网页离线后打开自动跳转并批量处理下载的所有csdn文件
404 0
解决csdn网页离线后打开自动跳转并批量处理下载的所有csdn文件
|
SQL 安全 数据安全/隐私保护
网站title标题被改并被百度网址安全中心提醒的解决办法
国庆假日期间我们Sine安全接到众多网站站长求助网站标题被改导致在百度搜索中百度安全中心提醒被拦截,导致网站正常用户无法浏览网站被跳转到一些菠菜du博网站,而且很明显的一个特征就是在百度中搜索关键词的网站快照标题被修改成了一些与网站本身内容不相关的页面,而且发现网站首页文件如index.php或index.html被增加了一些可疑的加密代码。
248 0
网站title标题被改并被百度网址安全中心提醒的解决办法
|
Web App开发 数据采集 Python
Python爬虫入门教程 4-100 美空网未登录图片爬取
简介 上一篇写的时间有点长了,接下来继续把美空网的爬虫写完,这套教程中编写的爬虫在实际的工作中可能并不能给你增加多少有价值的技术点,因为它只是一套入门的教程,老鸟你自动绕过就可以了,或者带带我也行。 爬虫分析 首先,我们已经爬取到了N多的用户个人主页,我通过链接拼接获取到了 http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/list.html 在这个页面中,咱们要找几个核心的关键点,发现平面拍摄点击进入的是图片列表页面。
1648 0
|
数据采集 Python
Python网络爬虫之爬取百度贴吧网址并保存
通过urllib2+resquest爬虫百度贴吧网址,并保存至该工作目录下 一、示例代码 示例代码 代码解析: 1.首先定义一个baidu_tieba的函数:def baidu_tieba() 2.
910 0