Example #1
0
        //下载视频
        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));
        }
Example #2
0
        //下载视频
        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));
        }