/// <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); } } })); }
/// <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(); } } }
/// <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(); } } }
/// <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"); } }
/// <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"); } }
/// <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"); } } } }