C#控制台程序取得INSOYA视频区的视频的真实URL,视频标题,发布时间集合。
标签:
准备工作起因是因为这个网站: 这个是一个叫做冒险岛的游戏的资讯论坛,以前我经常在里面传视频,现在我不玩这个游戏了,但是很多玩家还是经常到我的网站里面去看视频,所以我觉得有点不好意思,我觉得开发出一款自动上传下载的工具比什么都好,也不耽误我时间。需要准备一些插件,这些插件都可以从Nuget里面找到,比如Newtonsoft.Json啊HtmlAgilityPack ,不过目前为止也只用到了这些东西。还有我没有做youtube视频的下载,我只做了Daum tv的视频解析,因为Insoya视频区大部分都是上传到Daum Tv 的视频。
Insoya视频区结构解析我先不放代码,大家先要对网站的文件解析有个大概的了解才行吧?我的想法就是:解析当天的视频。因为Insoya是一个韩国网站,所以韩文什么的思密达什么的就不要再吐槽了。这是视频区的地址:?id=ucc
大家可以把手指指向链接,可以发现:视频的ID是一个自增长的。比如:
?id=ucc&no=58158
?id=ucc&no=58157
?id=ucc&no=58156.....略掉了。。。
我们随便点一个进去,如果我们想获得视频的标题啊,URL啊,还有发布日期的话,就可以从里面获取,下面框框就是:
需要知道的几件事情第一,我们从Daum Tv上面获取视频的真实地址,具体可以参考优酷,因为有点难度,视频的地址通常只是给了ID,所以我们还必须获取真实地址:不过StackoverFlow上面我得到了答案 ,哈哈多亏这位老兄。下面是daumTv 的调用API,后面的Vid是视频的ID.
public static string daumAPI = "http://videofarm.daum.net/controller/api/closed/v1_2/IntegratedMovieData.json?vid=";
光有了api不行,因为我们是从inosya网站里面去得到视频的真实地址,所以我们还需要有一个解析工具就是HtmlAgilityPack .为此我们需要知道网站是怎么在HTML结点里面存储这些东西的(标题,URL等)。下面几张图可以帮你解惑。下面这张图中指向的是URL,我们想,如果这些ID都是连续的话,那我是不是在第一页获取一个最大的ID,那其他的ID是不是可以都得出来了呢?
下面图是内容页的,我们可以看到时间是存储到这个CLASS里面的,也许我们有疑问,为什么我要标注CLASS呢,嘿嘿,别急,等下你就知道了。
编码1:获取文件的真实地址因为我们是从INSOYA网站里面去获取,INSOYA采用的是iframe方式,所以我们并没有在daumTV里面弄。我的想法是弄到DAUM TV的真实页面地址。
public static string GetDownloadUrls(string videoUrl) { string vid = ""; if (videoUrl == null) { throw new ArgumentNullException("video Url can not be null"); } //是否是标准的daumtv链接,并输出链接地址和视频ID bool isDaumUrl = TryNormalizeDaumTvUrl(videoUrl, out videoUrl,out vid); if (!isDaumUrl) { throw new ArgumentException("It is not a daum Url"); } string vLink = ""; try { //通过DAUM API获得返回的JSON var json = LoadJson(daumAPI + vid); //通过JSON获得文件的真实地址。 vLink = GetVideLink(json); } catch (Exception ex) { } return vLink; }
GetDownloadUrls(获取下载URL)
/// <summary> /// 把从insoya.com中获取的视频地址转换为标准的DAUM TV的视频地址 /// </summary> /// <param></param> /// <param></param> /// <returns></returns> public static bool TryNormalizeDaumTvUrl(string url, out string normalizeUrl, out string vId) { url = url.Trim(); string videoId = ""; if (url.IndexOf("videofarm") != -1) { int firstParam = url.IndexOf(‘=‘); int secondParam = url.IndexOf(‘&‘)-1; videoId = url.Substring(firstParam + 1, secondParam - firstParam); url = "" + videoId; } vId = videoId; normalizeUrl = url; return true; }
TryNormalizeDaumTvUrl(转换INSOYA内嵌视频地址为标准的DAUM TV视频地址)
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67000.html
- 上一篇:二叉树表达式计算
- 下一篇:如何彻底关闭任务栏获取windows10的提示?