//下载视频 public void Download() { //开始下载 delegates.Start(new ParaStart(this.TaskId)); delegates.TipText(new ParaTipText(this.TaskId, "正在分析视频地址")); _status = DownloadStatus.正在下载; try { //获取密码 string password = ""; if (Url.EndsWith("密码")) { password = ToolForm.CreatePasswordForm(true, "", ""); } //取得网页源文件 string src = Network.GetHtmlSource(Url.Replace("密码", ""), Encoding.UTF8, delegates.Proxy); //分析视频evid string evid = ""; //取得evid Regex r1 = new Regex(@"evid = '(?<evid>.+)'"); Match m1 = r1.Match(src); evid = m1.Groups["evid"].ToString(); //取得视频标题 Regex rTitle = new Regex(@"<h(1|2) class=$(vt|pvt)$>(?<title>.+?)<".Replace("$", "\"")); Match mTitle = rTitle.Match(src); string title = mTitle.Groups["title"].Value; //过滤非法字符 title = Tools.InvalidCharacterFilter(title, ""); _title = title; //视频地址数组 string[] videos = null; //清空地址 _filePath.Clear(); //调用内建的土豆视频解析器 SixcnParser parserSixcn = new SixcnParser(); videos = parserSixcn.Parse(new string[] { evid, password }, delegates.Proxy); //下载视频 //确定视频共有几个段落 _partCount = videos.Length; //分段落下载 for (int i = 0; i < _partCount; i++) { _currentPart = i + 1; //提示更换新Part delegates.NewPart(new ParaNewPart(this.TaskId, i + 1)); //取得文件后缀名 string ext = Tools.GetExtension(videos[i]); //设置当前DownloadParameter if (_partCount == 1) //如果只有一段 { currentParameter = new DownloadParameter() { //文件名 例: c:\123(1).flv FilePath = Path.Combine(SaveDirectory.ToString(), _title + "." + ext), //文件URL Url = videos[i] }; } else //如果分段有多段 { currentParameter = new DownloadParameter() { //文件名 例: c:\123(1).flv FilePath = Path.Combine(SaveDirectory.ToString(), _title + "(" + (i + 1).ToString() + ")" + "." + ext), //文件URL Url = videos[i] }; } //添加文件路径到List<>中 _filePath.Add(currentParameter.FilePath); //下载文件 bool success; //添加断点续传段 if (File.Exists(currentParameter.FilePath)) { //取得文件长度 int len = int.Parse(new FileInfo(currentParameter.FilePath).Length.ToString()); //设置RangeStart属性 currentParameter.RangeStart = len; } //下载视频文件 success = Network.DownloadFile(currentParameter); //未出现错误即用户手动停止 if (!success) { _status = DownloadStatus.已经停止; delegates.Finish(new ParaFinish(this.TaskId, false)); return; } } } catch (Exception ex) //出现错误即下载失败 { _status = DownloadStatus.出现错误; delegates.Error(new ParaError(this.TaskId, ex)); return; } //下载成功完成 _status = DownloadStatus.载完成; delegates.Finish(new ParaFinish(this.TaskId, true)); }
//下载视频 public void Download() { //开始下载 delegates.Start(new ParaStart(this.TaskId)); delegates.TipText(new ParaTipText(this.TaskId, "正在分析视频地址")); _status = DownloadStatus.正在下载; try { //获取密码 string password = ""; if (Url.EndsWith("密码")) password = ToolForm.CreatePasswordForm(true, "", ""); //取得网页源文件 string src = Network.GetHtmlSource(Url.Replace("密码", ""), Encoding.UTF8, delegates.Proxy); //分析视频evid string evid = ""; //取得evid Regex r1 = new Regex(@"evid = '(?<evid>.+)'"); Match m1 = r1.Match(src); evid = m1.Groups["evid"].ToString(); //取得视频标题 Regex rTitle = new Regex(@"<h(1|2) class=$(vt|pvt)$>(?<title>.+?)<".Replace("$","\"")); Match mTitle = rTitle.Match(src); string title = mTitle.Groups["title"].Value; //过滤非法字符 title = Tools.InvalidCharacterFilter(title, ""); _title = title; //视频地址数组 string[] videos = null; //清空地址 _filePath.Clear(); //调用内建的土豆视频解析器 SixcnParser parserSixcn = new SixcnParser(); videos = parserSixcn.Parse(new string[] { evid, password }, delegates.Proxy); //下载视频 //确定视频共有几个段落 _partCount = videos.Length; //分段落下载 for (int i = 0; i < _partCount; i++) { _currentPart = i + 1; //提示更换新Part delegates.NewPart(new ParaNewPart(this.TaskId, i + 1)); //取得文件后缀名 string ext = Tools.GetExtension(videos[i]); //设置当前DownloadParameter if (_partCount == 1) //如果只有一段 { currentParameter = new DownloadParameter() { //文件名 例: c:\123(1).flv FilePath = Path.Combine(SaveDirectory.ToString(), _title + "." + ext), //文件URL Url = videos[i] }; } else //如果分段有多段 { currentParameter = new DownloadParameter() { //文件名 例: c:\123(1).flv FilePath = Path.Combine(SaveDirectory.ToString(), _title + "(" + (i + 1).ToString() + ")" + "." + ext), //文件URL Url = videos[i] }; } //添加文件路径到List<>中 _filePath.Add(currentParameter.FilePath); //下载文件 bool success; //添加断点续传段 if (File.Exists(currentParameter.FilePath)) { //取得文件长度 int len = int.Parse(new FileInfo(currentParameter.FilePath).Length.ToString()); //设置RangeStart属性 currentParameter.RangeStart = len; } //下载视频文件 success = Network.DownloadFile(currentParameter); //未出现错误即用户手动停止 if (!success) { _status = DownloadStatus.已经停止; delegates.Finish(new ParaFinish(this.TaskId, false)); return; } } } catch (Exception ex) //出现错误即下载失败 { _status = DownloadStatus.出现错误; delegates.Error(new ParaError(this.TaskId, ex)); return; } //下载成功完成 _status = DownloadStatus.下载完成; delegates.Finish(new ParaFinish(this.TaskId, true)); }