Youtube 视频地址解析 C#
来源:互联网 发布:外国软件 编辑:程序博客网 时间:2024/05/16 06:11
第一篇博客,最近再整国内各大视频网站真实视频地址解析,觉得很有必要共享给大家,那就从Youtube开始吧~
首先,需要能翻墙,我就拿goagent来说吧,其他的翻墙我也没用过,goagent开启后,选择设置IE代理,如下所示:
好了,正式开始吧~
第一步:获取vid,比如:https://www.youtube.com/watch?v=LyjKbMlaMbM,vid就是LyjKbMlaMbM
第二部:获取视频信息:”http://www.youtube.com/get_video_info?video_id=“ + vid,获取的是一个文件,文件中包含了视频地址、清晰度等信息,现在说下如何获取这个信息。
1.下载上述文件,并且获取文件中的字符串信息。
//下载信息文件 string infoURL = "http://www.youtube.com/get_video_info?video_id=" + vid; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(infoURL); Stream ns = request.GetResponse().GetResponseStream(); byte[] nbytes = new byte[512]; int nReadSize; string info = ""; while (true) { nReadSize = ns.Read(nbytes, 0, 512); if (nReadSize == 0) break; //转成字符串 info += Encoding.Default.GetString(nbytes); }2.用正则表达式从info中获取关键信息。
//提取出视频关键信息部分 string regStr = "&url_encoded_fmt_stream_map=(.+?)&"; Regex reg = new Regex(regStr); Match match = reg.Match(info); info = match.Groups[1].Value; //解码 info = Uri.UnescapeDataString(info);现在获取到的信息是以“,”(无引号)分隔的不同清晰度视频的信息。
3.将每种清晰度文件的信息提取出来,每种清晰度的信息中又包含了5项参数:itag,quality, type ,fallback_host,url,顺序不定,以&分隔。
<pre name="code" class="csharp"> string[] parts = info.Split(',').ToArray();//每种清晰度的参数 Hashtable ht;//存放一种清晰度的参数键值对 List<Hashtable> infoList = new List<Hashtable>();//信息列表
for (int i = 0; i < parts.Length; i++) {//对于每一种清晰度 string[] part_info = parts[i].Split('&').ToArray();//一种清晰度的参数 ht = new Hashtable();//新建一个HashTable for(int j = 0; j < part_info.Length; j++) { string[] pair = part_info[j].Split('=').ToArray();//键值对,itag,quality, type ,fallback_host,url ht.Add(pair[0], Uri.UnescapeDataString(pair[1])); } //加入列表 infoList.Add(ht); }
4.到这里,infoList中已经包含了各种清晰度的视频信息,每种清晰度的视频信息保存在一个Hashtable中,以键值对的形式保存。取出其中键为url的值即为该清晰度对应的视频下载地址。
最后把获取视频信息的全部代码附上:
private static List<Hashtable> getVideoInfo(string vid) { List<Hashtable> infoList = new List<Hashtable>();//信息列表 //下载信息文件 string infoURL = "http://www.youtube.com/get_video_info?video_id=" + vid; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(infoURL); Stream ns = request.GetResponse().GetResponseStream(); byte[] nbytes = new byte[512]; int nReadSize; string info = ""; while (true) { nReadSize = ns.Read(nbytes, 0, 512); if (nReadSize == 0) break; //转成字符串 info += Encoding.Default.GetString(nbytes); } //提取出视频关键信息部分 string regStr = "&url_encoded_fmt_stream_map=(.+?)&"; Regex reg = new Regex(regStr); Match match = reg.Match(info); info = match.Groups[1].Value; //解码 info = Uri.UnescapeDataString(info); string[] parts = info.Split(',').ToArray();//每种清晰度的参数 Hashtable ht;//存放一种清晰度的参数键值对 for (int i = 0; i < parts.Length; i++) {//对于每一种清晰度 string[] part_info = parts[i].Split('&').ToArray();//一种清晰度的参数 ht = new Hashtable();//新建一个HashTable for(int j = 0; j < part_info.Length; j++) { string[] pair = part_info[j].Split('=').ToArray();//键值对,itag,quality, type ,fallback_host,url ht.Add(pair[0], Uri.UnescapeDataString(pair[1])); } //加入列表 infoList.Add(ht); } return infoList; }
0 0
- Youtube 视频地址解析 C#
- 利用Python爬取YouTube上的视频播放地址
- 利用htmlunit在YouTube上抓取视频连接地址
- 视频地址解析
- 下载youtube的视频
- 如何下载youtube视频?
- PowerPoint嵌入YouTube视频
- youtube视频转发
- youtube有意思视频收集
- 下载YouTube视频
- 怎么下载youtube视频
- Youtube 视频下载
- YouTube视频下载-Chrome
- 下载Youtube视频
- 怎样下载Youtube视频
- Youtube视频拖动控件
- 视频下载(youtube)
- 如何下载YouTube视频
- 神經網絡實現步驟
- Java经典问题:传值与传引用
- unity框架strangeioc研究分享
- shell脚本----for循环报错
- 公钥基础设施PKI(Pubic Key Infrastructure)
- Youtube 视频地址解析 C#
- 3.QT中的debug相关的函数,以及文件锁的使用
- git命令
- Mysql海量数据存储和解决方案之一—分布式DB方案
- iOS开发非常有用的小知识点
- 搜pos不为了收单而收单,互联网是个神奇的动物
- 我在北京工作这几年 – 一个软件工程师的反省
- linux备份mysql数据库与恢复mysql备份数据
- Android中shape的使用