Example #1
0
        /// <summary>
        /// 根据Type获取自己的收藏,只能由mainThread执行
        /// </summary>
        /// <param name="reParame"></param>
        /// <param name="type"></param>
        private void GetCollectionByType(RequestParameEntity reParame, string type, string url)
        {
            getType = type;

            var listUrl = url + type;

            EachListPage(listUrl, DownContentType.OwnCollection, new Action <string>(itemUrl =>
            {
                if (!mut.IsContinue)
                {
                    return;
                }

                itemUrl = HtmlHelp.NeedHost(listUrl, itemUrl);

                var ri = new RequestItemParameEntity()
                {
                    ItemUrl = itemUrl, SavePath = reParame.SavePath
                };

                if (isSingle)
                {
                    GetWorksItem(ri);
                }
                else
                {
                    while (!mut.DoDownAction(ri, GetWorksItem) && mut.IsContinue)
                    {
                        Thread.Sleep(1000);
                    }
                }
            }));
        }
Example #2
0
        /// <summary>
        /// 获取单个画师,只能由DoGetThread执行
        /// </summary>
        /// <param name="listUrl">画师作品列表页</param>
        public void GetSingle(object objParame)
        {
            try
            {
                if (!mut.IsContinue)
                {
                    return;
                }

                //因为循环里没有做修改,所有可以放外面
                var parame = (RequestParameEntity)objParame;

                form.BeginInvoke(new Action(() => { form.RtxtSuccess.Text = ""; }));

                if (isSingle)
                {
                    form.Invoke(new Action(() => { form.TxtSavePath.Text = parame.SavePath; }));
                }

                EachListPage(parame.ListUrl, DownContentType.SinglePainter, new Action <string>(itemUrl =>
                {
                    if (!mut.IsContinue)
                    {
                        return;
                    }

                    itemUrl = HtmlHelp.NeedHost(parame.ListUrl, itemUrl);

                    var ri = new RequestItemParameEntity()
                    {
                        ItemUrl = itemUrl, SavePath = parame.SavePath
                    };

                    if (isSingle)
                    {
                        GetWorksItem(ri);
                    }
                    else
                    {
                        while (!mut.DoDownAction(ri, GetWorksItem) && mut.IsContinue)
                        {
                            Thread.Sleep(1000);
                        }
                    }
                }));
            }
            catch (Exception ex)
            {
                AddErrorMsg(ex.Message + "\r\n");
                HtmlHelp.SaveStringToTxt(ex.Message + "\r\n" + ex.StackTrace + "\r\n\r\n", "Error.txt");
            }
            finally
            {
                if (!isSingle)
                {
                    mut.RemoveGThread();
                }
            }
        }
Example #3
0
        /// <summary>
        /// 下载搜索
        /// Url 必须是完整的地址,只能由mainThread执行
        /// </summary>
        /// <param name="objParame"></param>
        public void GetSearch(object objParame)
        {
            try
            {
                var parame = (RequestParameEntity)objParame;
                EachListPage(parame.ListUrl, DownContentType.GetSearch, new Action <string>(itemUrl =>
                {
                    if (!mut.IsContinue)
                    {
                        return;
                    }

                    itemUrl = "/member_illust.php?mode=medium&illust_id=" + itemUrl;
                    itemUrl = HtmlHelp.NeedHost(parame.ListUrl, itemUrl);

                    //都下载同一个地方,不用克隆
                    var ri = new RequestItemParameEntity()
                    {
                        ItemUrl = itemUrl, SavePath = parame.SavePath
                    };

                    if (isSingle)
                    {
                        GetWorksItem(ri);
                    }
                    else
                    {
                        while (!mut.DoDownAction(ri, GetWorksItem) && mut.IsContinue)
                        {
                            Thread.Sleep(1000);
                        }
                    }
                }));
            }
            catch (Exception ex)
            {
                AddErrorMsg(ex.Message + "\r\n");
                HtmlHelp.SaveStringToTxt(ex.Message + "\r\n" + ex.StackTrace + "\r\n\r\n", "Error.txt");
            }
            finally
            {
                if (mainThread != null && mainThread.IsAlive)
                {
                    mainThread.Abort();
                }
            }
        }
Example #4
0
        /// <summary>
        /// 获取单个图片
        /// </summary>
        /// <param name="itemUrl"></param>
        /// <param name="html"></param>
        public void GetSigImage(string itemUrl, string html, string savePath)
        {
            var imgR = new Regex(RegexHelp.Other.GetSingleImage, RegexOptions.Singleline);
            var imgM = imgR.Match(html);

            if (imgM == null || imgM.Groups["Url"].Value == "")
            {
                AddErrorMsg(string.Format("获取URL:{0} 的图片失败!\r\n", itemUrl));
                return;
            }

            var imgUrl = HtmlHelp.NeedHost(itemUrl, imgM.Groups["Url"].Value);

            lock (Multithreading.ObjLockExistFile)
            {
                if (File.Exists(savePath + "/" + Path.GetFileName(imgUrl)))
                {
                    if (form.ChkNeglect.Checked)
                    {
                        AddErrorMsg(string.Format("跳过已存在的图片:{0}!\r\n", imgUrl));
                    }
                    return;
                }
            }

            AddSuccessMsg(string.Format("正在下载图片:{0} \r\n", imgUrl));

            var  filePath = savePath + "/" + Path.GetFileName(imgUrl);
            bool b        = DownHelp.DownImage(imgUrl, filePath, 1024, itemUrl, 5);

            if (b)
            {
                AddSuccessMsg(string.Format("下载图片:{0} 成功\r\n", imgUrl));
            }
            else
            {
                var txt = string.Format("下载图片:{0} 失败\r\n Url:{1}\r\n", imgUrl, itemUrl);
                AddErrorMsg(txt);
                HtmlHelp.SaveStringToTxt(txt, "FaildMsg.txt");
            }
        }
Example #5
0
        /// <summary>
        /// 遍历列表页面,获取所有子项目,并自动获取下一页
        /// </summary>
        /// <param name="listUrl"></param>
        /// <param name="type"></param>
        /// <param name="doWork"></param>
        private void EachListPage(string listUrl, DownContentType type, Action <string> doWork)
        {
            try
            {
                while (mut.IsContinue)
                {
                    if (isSingle)
                    {
                        form.Invoke(new Action(() => { form.RtxtSuccess.Text = ""; form.TxtCurrListUrl.Text = listUrl; }));
                    }

                    AddSuccessMsg(string.Format("正在获取URL:{0} 的html!\r\n", listUrl));

                    var html = DownHelp.GetHtmlString(listUrl, Encoding.UTF8, 5);
                    if (html == "")
                    {
                        AddErrorMsg(string.Format("获取URL:{0} 的html失败!\r\n", listUrl));
                        return;
                    }

                    AddSuccessMsg(string.Format("获取URL:{0} 的html成功!\r\n", listUrl));

                    Regex pReg = new Regex(RegexHelp.GetRegex(type, RegexType.ListParentRegex), RegexOptions.Singleline);
                    var   pm   = pReg.Match(html);
                    if (pm == null || pm.Value == "")
                    {
                        AddErrorMsg(string.Format("获取URL:{0} 的父容器失败!\r\n", listUrl));
                        return;
                    }

                    var pHtml = pm.Value;

                    Regex lReg = new Regex(RegexHelp.GetRegex(type, RegexType.ListRegex), RegexOptions.Singleline);
                    var   lms  = lReg.Matches(pHtml);
                    if (lms == null || lms.Count <= 0)
                    {
                        AddErrorMsg(string.Format("获取URL:{0} 子项目失败!\r\n", listUrl));
                        return;
                    }

                    foreach (Match item in lms)
                    {
                        if (!mut.IsContinue)
                        {
                            return;
                        }

                        var itemUrl = item.Groups["Url"].Value;

                        doWork(itemUrl);
                    }

                    if (!mut.IsContinue)
                    {
                        return;
                    }

                    Regex nReg = new Regex(RegexHelp.GetRegex(type, RegexType.NextListRegex), RegexOptions.Singleline);
                    var   nm   = nReg.Match(html);
                    if (nm == null || nm.Groups["Next"].Value == "")
                    {
                        AddErrorMsg(string.Format("没有在:{0} 中获取到下一页!\r\n", listUrl));
                        form.Invoke(new Action(() =>
                        {
                            if (form.RadAllFollow.Checked && type == DownContentType.AllFollow)
                            {
                                form.LblOtherText.Text = string.Format("关注的{0}公开的画师已没有一下页!", getType == "show" ? "" : "非");
                            }
                            else if (form.RadSingle.Checked && type == DownContentType.SinglePainter)
                            {
                                form.LblOtherText.Text = "当前画师作品已没有一下页!";
                            }
                            else if (form.RadCollection.Checked && type == DownContentType.OwnCollection)
                            {
                                if (getType == "show" || getType == "hide")
                                {
                                    form.LblOtherText.Text = string.Format("收藏的{0}公开的作品已没有一下页!", getType == "show" ? "" : "非");
                                }
                                else
                                {
                                    form.LblOtherText.Text = string.Format("画师{0}收藏的作品已没有一下页!", getType);
                                }
                            }
                            else if (form.RadCollection.Checked && type == DownContentType.GetSearch)
                            {
                                form.LblOtherText.Text = string.Format("搜索的内容已没有一下页!");
                            }
                        }));
                        return;
                    }

                    var nextUrl = HtmlHelp.NeedHost(listUrl, nm.Groups["Next"].Value);
                    //EachListPage(nextUrl, type, doWork);
                    listUrl = nextUrl;
                    AddSuccessMsg(string.Format("正在获取下一页:{0}!\r\n", listUrl));
                }
            }
            catch (Exception ex)
            {
                AddErrorMsg(ex.Message + "\r\n");
                HtmlHelp.SaveStringToTxt(ex.Message + "\r\n" + ex.StackTrace + "\r\n\r\n", "Error.txt");
            }
        }
Example #6
0
        /// <summary>
        /// 获取更多图片
        /// </summary>
        /// <param name="moreUrl">查看更多Url</param>
        public void GetMoreImage(string moreUrl, string savePath)
        {
            AddSuccessMsg(string.Format("正在获取URL:{0} 的html!\r\n", moreUrl));

            var html = DownHelp.GetHtmlString(moreUrl, Encoding.UTF8, 5);

            if (html == "")
            {
                AddErrorMsg(string.Format("获取URL:{0} 的html失败!\r\n", moreUrl));
                return;
            }

            AddSuccessMsg(string.Format("获取URL:{0} 的html成功!\r\n", moreUrl));


            //获取放大镜集合
            var mReg = new Regex(RegexHelp.Other.GetMaxButton, RegexOptions.Singleline);
            var mms  = mReg.Matches(html);

            if (mms != null && mms.Count > 0)
            {
                //获取放大后的图片
                foreach (Match m in mms)
                {
                    var mUrl = m.Groups["Url"].Value;
                    mUrl = HtmlHelp.NeedHost(moreUrl, mUrl);
                    var mHtml = DownHelp.GetHtmlString(mUrl, Encoding.UTF8, 5);

                    var mmReg = new Regex(RegexHelp.Other.GetImageWhenMax, RegexOptions.Singleline);
                    var mmm   = mmReg.Match(mHtml);
                    if (mmm == null || mmm.Groups["Url"].Value == "")
                    {
                        AddErrorMsg(string.Format("获取URL:{0} 的图片失败!\r\n", mUrl));
                        return;
                    }

                    var imgUrl = HtmlHelp.NeedHost(mUrl, mmm.Groups["Url"].Value);

                    lock (Multithreading.ObjLockExistFile)
                    {
                        if (File.Exists(savePath + "/" + Path.GetFileName(imgUrl)))
                        {
                            if (form.ChkNeglect.Checked)
                            {
                                AddErrorMsg(string.Format("跳过已存在的图片:{0}!\r\n", imgUrl));
                            }
                            continue;
                        }
                    }

                    AddSuccessMsg(string.Format("正在下载图片:{0} \r\n", imgUrl));
                    var  filePath = savePath + "/" + Path.GetFileName(imgUrl);
                    bool b        = DownHelp.DownImage(imgUrl, filePath, 1024, moreUrl, 5);

                    if (b)
                    {
                        AddSuccessMsg(string.Format("下载图片:{0} 成功\r\n", imgUrl));
                    }
                    else
                    {
                        var txt = string.Format("下载图片:{0} 失败\r\n Url:{1}\r\n", imgUrl, moreUrl);
                        AddErrorMsg(txt);
                        HtmlHelp.SaveStringToTxt(txt, "FaildMsg.txt");
                    }
                }
            }
            else
            {
                AddErrorMsg(string.Format("没有获取到放大镜集合:{0}!\r\n", moreUrl));
                return;

                //直接获取图片
                var msReg = new Regex(RegexHelp.Other.GetImageWhenNotMax, RegexOptions.Singleline);
                var imgMs = msReg.Matches(html);

                foreach (Match m in imgMs)
                {
                    var imgUrl = m.Groups["Url"].Value;
                    imgUrl = HtmlHelp.NeedHost(moreUrl, imgUrl);

                    lock (Multithreading.ObjLockExistFile)
                    {
                        if (File.Exists(savePath + "/" + Path.GetFileName(imgUrl)))
                        {
                            if (form.ChkNeglect.Checked)
                            {
                                AddErrorMsg(string.Format("跳过已存在的图片:{0}!\r\n", imgUrl));
                            }
                            continue;
                        }
                    }

                    AddSuccessMsg(string.Format("正在下载图片:{0} \r\n", imgUrl));

                    var  filePath = savePath + "/" + Path.GetFileName(imgUrl);
                    bool b        = DownHelp.DownImage(imgUrl, filePath, 1024, moreUrl, 5);

                    if (b)
                    {
                        AddSuccessMsg(string.Format("下载图片:{0} 成功\r\n", imgUrl));
                    }
                    else
                    {
                        var txt = string.Format("下载图片:{0} 失败\r\n Url:{1}\r\n", imgUrl, moreUrl);
                        AddErrorMsg(txt);
                        HtmlHelp.SaveStringToTxt(txt, "FaildMsg.txt");
                    }
                }
            }
        }