private string[] downloadOne(CsdnResouce cdrs) { string[] status = { "模拟下载", "成功/失败", "无验证码", "状态信息", "无附加信息" }; //if (code != "") //{ // status[3] = "验证码:" + code; //} status[0] = "模拟下载"; status[1] = ""; status[2] = ""; status[3] = ""; status[4] = ""; //Logscomsole(status); string url = cdrs.Tag.ToString().Replace("detail", "download"); string res = new HttpHelpers().GetHtml(new HttpItems() { URL = url , Container = cc }).Html; string taskName = ""; string regexCode = "<meta name=\"description\" content=\"(.*?)\" />"; Regex reg = new Regex(regexCode); taskName = reg.Match(res).Groups[1].Value; regexCode = "action=\"(http://download.csdn.net/index.php/source/do_download/(.*?))\""; reg = new Regex(regexCode); if (reg.IsMatch(res)) { string durl = reg.Match(res).Groups[1].Value; // cdrs .Durl = durl;//下载地址 bool first = true; hr_down = new HttpHelpers().GetHtml(new HttpItems() { URL = durl, Referer = url, Method = "Post", Container = cc, Allowautoredirect = true, Postdata = "ds=&validate_code=&basic%5Breal_name%5D=&basic%5Bmobile%5D=&basic%5Bemail%5D=&basic%5Bjob%5D=&basic%5Bcompany%5D=&basic%5Bprovince%5D=&basic%5Bcity%5D=&basic%5Bindustry%5D=" }); res = hr_down.Html; TRUEDOWNLOAD: if (res.Contains("您因违反")) { status[0] = "模拟下载"; status[1] = "失败"; status[2] = res ; status[3] = ""; status[4] = ""; Logscomsole(status ); this.Clear(); return status; } if (res != "<script>document.domain='csdn.net';parent.show_validate_pop();</script>") { //模拟点击下载 if (saveFile && !string.IsNullOrEmpty(savePath)) { if (!Directory.Exists(SavePath)) { Directory.CreateDirectory(SavePath); } //href='http://dldx.csdn.net/fd.php?i=391492108198497&s=c936639a4ad2171ef2bee9ae9e706700'; try { hr_down = new HttpHelpers().GetHtml(new HttpItems() { URL = res.Substring(res.IndexOf("http"), res.LastIndexOf('\'') - res.IndexOf("http")), Referer = durl, Container = cc, ResultType = ResultType.Byte, Allowautoredirect = true }); //hr.ResultByte; 真实文件内容 byte[] bty = hr_down.ResultByte; string a = hr_down.Header.Get("Content-Disposition"); a = a.Substring(a.LastIndexOf('\'') + 1); a = HttpUtility.UrlDecode(a, Encoding.UTF8); //a = Encoding.Default.GetString(Encoding.UTF8.GetBytes (a)); //a = Encoding.UTF8.GetString(Encoding .UTF8 .GetBytes (a) ); cdrs.Log = a; cdrs.Msg = "已保存"; File.WriteAllBytes(SavePath + @"\" + a, bty); } catch (Exception ex) { cdrs.Msg = "保存失败:" + ex.Message; } } status[0] = "模拟下载"; status[1] = "成功"; status[3] = string.IsNullOrEmpty (cdrs.Name )?"":cdrs .Name ; status[2] = first ?"无验证码":"已智能识别验证码"; status[4] = ""; //cdrs.Rel = "成功"; //cdrs.Msg = res==""?"":"验证码:"+res ; //Logscomsole("", "", "", cdrs); return status ; } else { if (first && getImgVcode != null) { res = getdownVcodeUrl(durl, url); first = false; goto TRUEDOWNLOAD; } status[0] = "模拟下载"; status[1] = "失败"; status[2] = "多次识别错误或者验证码识别接口出错"; status[3] = ""; status[4] = ""; } } else { status[0] = "模拟下载"; status[1] = "失败"; status[2] = "获取下载地址失败"; status[3] = ""; status[4] = ""; //Logscomsole(status); //cdrs.Rel = "失败"; //cdrs.Msg = "获取下载抵制失败"; } //Logscomsole("", "", "", cdrs); return status ; }
private string[] commandOne(CsdnResouce item, string code = "") { string[] status = { "模拟评分", "成功/失败", "无验证码", "状态信息", "无附加信息" }; if (code != "") { status[2] = "验证码:"+code ; } hr_com = new HttpHelpers().GetHtml(new HttpItems() { URL = "http://download.csdn.net/index.php/comment/get_comment_data/" + item.Id + @"/1?jsonpcallback=jsonp1448000002880&&t=1448000436379", Container = cc, Referer = item.Url } ); string rehtml = hr_com.Html.Replace("\\r\\n", "").Replace("\\n", "").Replace("\\t", "").Replace(" ", ""); rehtml = Decode(rehtml); Regex regcont=new Regex (@"user_name\\"">(.*?)<\\\/a><\\\/dt><dd>(.*?)<"); MatchCollection mccont = regcont.Matches(rehtml); rehtml = ""; foreach (Match m in mccont ) { if (rehtml.Length < m.Groups[2].Value.Length) { rehtml = m.Groups[2].Value; } } //getCommandList(); long epochS = (DateTime.Now.AddSeconds(-5).ToUniversalTime().Ticks - 621355968000000000) / 10000; long epochE = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000; //Get评论 int index = ran.Next(comMsg.Length); string commentcon=comMsg [index ]+","+rehtml ; string url; if ("".Equals(code)) { url = string.Format("http://download.csdn.net/index.php/comment/post_comment?jsonpcallback=jsonp{0}&sourceid={1}&content={2}&rating={3}&t={4}", epochS, item.Id, new XJHTTP().UrlEncoding(item.Name + commentcon ), new Random().Next(3, 6), epochE); } else { url = string.Format("http://download.csdn.net/index.php/comment/post_comment?jsonpcallback=jsonp{0}&sourceid={1}&content={2}&txt_validcode={3}&rating={4}&t={5}", epochS, item.Id, new XJHTTP().UrlEncoding(item.Name + commentcon), code, new Random().Next(3, 6), epochE); } string html = new HttpHelpers().GetHtml(new HttpItems() { URL =url , Container =cc }).Html; //评论成功完成 if (html.Contains("\"succ\":1")) { JfCount++; status[1] = "成功"; status[3] = "当前积分:" + JfCount.ToString(); status[4] = item.Name + comMsg[index]; } else { status[1] = "失败"; status[3] = "当前积分:" + JfCount.ToString(); Regex reg = new Regex("msg\":\"(.+?)\""); string msg = new XJHTTP().FromUnicodeString(html); MatchCollection mc = reg.Matches(msg); if (mc.Count > 0) { status[4] = mc[0].Groups[1].Value; //item.Msg = mc[0].Groups[1].Value; } else { status[4] = msg; //item.Msg = msg; } if ((status[4].Contains("请填写验证码") || status[4].Contains("验证码错误")) && getImgVcode != null) { string vcode = getcomVcode("http://download.csdn.net/index.php"); if (vcode != "") { return commandOne(item, vcode); } } else if(msg .Contains ("您因违反")) { status[4] = msg; Logscomsole(status ); this.Clear(); return status; } } return status; }
private void threadForScan(object param) { int s, e; var p = (Tuple<int[], EventWaitHandle>)param; s = p.Item1[0]; e = p.Item1[1]; if (s > e) { Console.WriteLine("线程结束在:"+e.ToString ()); p.Item2.Set(); return; } List<CsdnResouce> tmplist = new List<CsdnResouce>(); HttpResults tmpHr = new HttpHelpers ().GetHtml(new HttpItems() { URL = "http://download.csdn.net/my/downloads/" + s, Container = cc }); string Down2Html = tmpHr.Html.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", ""); string result2 = Regex.Replace(Down2Html, @"<!--(.+?)-->", ""); //SetList(result2); //获取资源列表 Regex reg = new Regex("<dt><divclass=\"icon\"><imgsrc=\"(.+?)\"title=\"(.+?)\"></div><divclass=\"btns\">(.+?)</div><h3><ahref=\"(.+?)\">(.+?)</a><spanclass=\"points\">(.+?)</span></h3></dt>"); MatchCollection mc = reg.Matches(result2); if (mc.Count > 0) { foreach (Match item in mc) { CsdnResouce cdsr = new CsdnResouce(); Regex regCState = new Regex("<(.+?)>(.+?)</(.+?)>"); MatchCollection mcCState = regCState.Matches(item.Groups[3].Value); string sta = mcCState[0].Groups[2].Value; if (sta.Contains("已评价") || sta.Contains("资源已删除")) { continue; } if (!sta.Contains("立即评价")) { PreComCount++; continue; } CanComCount++; String strt = item.Groups[4].Value; cdsr.Url = "http://download.csdn.net" + strt.Substring(0, strt.IndexOf("\"")); cdsr.Name = item.Groups[5].Value; cdsr.Point = item.Groups[6].Value; string[] ids = cdsr.Url.Split('/'); cdsr.Id = ids[ids.Length - 1]; tmplist.Add(cdsr); } } if (tmplist.Count > 0) { lock (LockObject) { listConSource.AddRange(tmplist ); } } s++; new Thread(new ParameterizedThreadStart(threadForScan)) .Start(new Tuple<int[], EventWaitHandle>(new int[] { s, e }, p .Item2 )); }
private void getUploadRs() { // Logscomsole(status); HttpHelpers helper_up = new HttpHelpers(); HttpItems items_up = new HttpItems(); HttpResults hr_up = new HttpResults(); string url; string rehtml; url =string.Format ("http://download.csdn.net/my"); items_up = new HttpItems() { URL = url, Container = cc }; hr_up = helper_up.GetHtml(items_up); string DownHtml = hr_up.Html.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", ""); string result = Regex.Replace(DownHtml, @"<!--(.+?)-->", ""); //获取下载资源数量 Regex regDown = new Regex("上传资源:<spanclass=\"red\">(.+?)</span>"); MatchCollection mcDown = regDown.Matches(result); double upCount = 0; if (mcDown.Count > 0) { upCount = Convert.ToDouble(mcDown[0].Groups[1].Value); } //Regex reg = new Regex("<dt><divclass=\"icon\"><imgsrc=\"(.+?)\"title=\"(.+?)\"></div><divclass=\"btns\"></div><h3><ahref=\"(.+?)\"(.*?)\">(.+?)</a><spanclass=\"points\">(.+?)</span></h3></dt>"); Regex reg = new Regex("<dt><divclass=\"icon\"><imgsrc=\"(.+?)\"title=\"(.+?)\"></div><divclass=\"btns\">(<ahref=(.*?)删除</a>)?</div><h3><ahref=\"(.+?)\"(.*?)\">(.+?)</a><spanclass=\"points\">(.+?)</span></h3></dt>"); MatchCollection mc = reg.Matches(result); if (mc.Count > 0) { foreach (Match item in mc) { CsdnResouce cdsr = new CsdnResouce(); if (item.Groups.Count == 9) { cdsr.Url = item.Groups[5].Value; cdsr.Name = item.Groups[7].Value; cdsr.Point = item.Groups[8].Value; } else { cdsr.Url = item.Groups[3].Value; cdsr.Name = item.Groups[5].Value; cdsr.Point = item.Groups[6].Value; } //CsdnResouce cdsr = new CsdnResouce(tmp1[6], tmp1[4]); cdsr.Tag = String.Format("http://download.csdn.net{0}", cdsr.Url); uploadedRS.Add(cdsr ); } } Logscomsole(new string[] { "获取上传资源", "结束", "共 " + upCount.ToString() + " 个资源", "", "" }); }
private string[] getdownlist() { getInfo(); string[] status = { "操作", "成功/失败", "状态信息", "无验证码", "无附加信息" }; status[0] = "获取下载列表"; status[1] = "开始"; status[2] = "随机扫描数据"; status[3] = ""; status[4] = ""; Logscomsole (status ); String szReg_res_url = ("<li><atitle=\"共(.+?)个资源\"href=\"(.+?)\">(.+?)</a></li>"); String szReg_res_url_pagecount = ("下一页</a> <aclass=\"pageliststy\"href=\"(.+?)\">尾页</a>"); String szReg_res_down_url = ("<dt><ahref=\"(.+?)\">(.+?)</a><spanclass=\"marks\">(.+?)</span></dt>"); // String szReg_res_down_forfree_url = ("<dt><ahref=\"(.+?)\">(.+?)</a><spanclass=\"marks\">0</span></dt>"); //String szReg_res_down_per_url = ("action=\"(http://download.csdn.net/index.php/source/do_download/(.*?))\""); string result = new HttpHelpers().GetHtml(new HttpItems() { URL = "http://download.csdn.net/" }).Html; result = result.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", ""); Regex reg = new Regex(szReg_res_url); MatchCollection mc = reg.Matches(result); List<string> strList = new List<string>(); foreach (Match item in mc) { //<li><atitle="共685219个资源"href="/c-16006">Java</a></li> string tmp = item.Value; string[] tmps = tmp.Split(new char[] { '/' }); tmp = tmp.Substring(tmp.LastIndexOf("=") + 2, tmp.LastIndexOf(@""">") - tmp.LastIndexOf("=") - 2); strList.Add(tmp); } int a = new Random().Next(strList.Count); result = new HttpHelpers().GetHtml(new HttpItems() { URL = string.Format("http://download.csdn.net{0}", strList[a]) }).Html; result = result.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", ""); reg = new Regex(szReg_res_url_pagecount); Match mat = reg.Match(result); string durl = mat .Groups[1].Value; string[] ss = durl.Split(new char[] { '/', '\"' }).Where <string >((o)=>{ return !string.IsNullOrEmpty(o); }).ToArray (); int pageCount; int.TryParse(ss[1], out pageCount); ListPreTDown = new List<CsdnResouce>(); for (int j = 0; j < pageCount; j++) { result = new HttpHelpers().GetHtml(new HttpItems() { URL = String.Format("http://download.csdn.net{0}/{1}", strList[a], j + 1) }).Html; result = result.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", ""); reg = new Regex(szReg_res_down_url); mc = reg.Matches(result); // List<string> downstr = new List<string>(); foreach (Match m in mc) { //<dt><ahref="/detail/u014554531/9313813"target="_blank">TakeColor优秀屏幕取色工具</a><spanclass="marks">1</span></dt> string regforhref = "<dt><ahref=\"(.*?)\"target=\"_blank\">(.*?)</a><spanclass=\"marks\">(.*?)</span></dt>"; Match mcforhref = new Regex(regforhref).Match(m.Value); string href =mcforhref.Groups[1].Value; string namefor = mcforhref.Groups[2].Value; string co = mcforhref.Groups[3].Value; //string[] tmp1 = m.Value.Split(new char[] { '\"', '>', '<' }); if (co == "0") { CsdnResouce cdsr = new CsdnResouce(namefor ,href ); cdsr.Tag = String.Format("http://download.csdn.net{0}", cdsr.Url); ListPreTDown.Add(cdsr); } } } End: //string[] status = { "操作", "成功/失败", "状态信息", "无验证码", "无附加信息" }; //status[0] = "获取下载列表"; status[1] = "结束"; status[2] = "可下载数据:" + ListPreTDown.Count.ToString() + " 条"; //status[3] = ""; //status[4] = ""; //Logscomsole(); return status; }
private string[] getCommandList() { listConSource = new List<CsdnResouce>(); string[] status = { "获取评分列表", "成功/失败", "状态信息", "无验证码", "无附加信息" }; //status[1] = "结束"; status[2] = "执行完毕"; status[3] = ""; status[4] = ""; // Logscomsole(status); PreComCount = 0; CanComCount = 0; //我的下载资源页的资源列表 hr_com = new HttpHelpers().GetHtml(new HttpItems() { URL = "http://download.csdn.net/my/downloads", Container = cc }); string DownHtml = hr_com.Html.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", ""); string result = Regex.Replace(DownHtml, @"<!--(.+?)-->", ""); //获取下载资源数量 Regex regDown = new Regex("下载资源:<spanclass=\"red\">(.+?)</span>"); MatchCollection mcDown = regDown.Matches(result); DowCount = 0; if (mcDown.Count > 0) { DowCount = Convert.ToDouble(mcDown[0].Groups[1].Value); } status[1] = "成功"; status[2] = "下载数:"+DowCount .ToString (); //获取剩余积分 Regex regJf = new Regex("<em>积分:(.+?)</em>"); MatchCollection mcJf = regJf.Matches(result); if (mcJf.Count > 0) { int.TryParse(mcJf[0].Groups[1].Value, out jfCount); } status[3] = "积分数:"+jfCount .ToString (); //加载数据,Csdn是6个一页 double Ys = Math.Ceiling(DowCount / 6); //10页以上用多线程 if (Ys > 50) { //LoadList(DowCount, Ys); int threadCount = 5; int cnum = (int)Ys / (threadCount - 1); //int ynum = (int)Ys % (threadCount - 1); var waits = new List<EventWaitHandle>(); for (int i = 0; i < threadCount-1; i++) { int s = 1 + i * cnum; int e = cnum + cnum * i; if (e > Ys) { e = (int)Ys; } //int e=(((cnum +cnum *i)> DowCount )? (int )DowCount:(cnum +cnum *i)) ; var handler = new ManualResetEvent(false); waits.Add(handler); new Thread(new ParameterizedThreadStart(threadForScan)) .Start(new Tuple<int[], EventWaitHandle>(new int[] { s, e }, handler)); } WaitHandle.WaitAll(waits.ToArray()); status[2] = "下载数:" + DowCount.ToString(); status[3] = "积分数:" + jfCount.ToString(); status[4] = "共 " + CanComCount.ToString() + " 条可评分记录," + PreComCount.ToString() + " 条10分钟以内记录"; return status; } else { for (int i = 1; i <= Ys; i++) { hr_com = new HttpHelpers().GetHtml(new HttpItems() { URL = "http://download.csdn.net/my/downloads/" + i, Container = cc }); string Down2Html = hr_com.Html.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", ""); string result2 = Regex.Replace(Down2Html, @"<!--(.+?)-->", ""); //SetList(result2); //获取资源列表 Regex reg = new Regex("<dt><divclass=\"icon\"><imgsrc=\"(.+?)\"title=\"(.+?)\"></div><divclass=\"btns\">(.+?)</div><h3><ahref=\"(.+?)\">(.+?)</a><spanclass=\"points\">(.+?)</span></h3></dt>"); MatchCollection mc = reg.Matches(result2); if (mc.Count > 0) { foreach (Match item in mc) { CsdnResouce cdsr = new CsdnResouce(); Regex regCState = new Regex("<(.+?)>(.+?)</(.+?)>"); MatchCollection mcCState = regCState.Matches(item.Groups[3].Value); string sta = mcCState[0].Groups[2].Value; if (sta.Contains("已评价") || sta.Contains("资源已删除")) { continue; } if (!sta.Contains("立即评价")) { PreComCount++; continue; } CanComCount++; String strt = item.Groups[4].Value; cdsr.Url = strt.Substring(0, strt.IndexOf("\"")); cdsr.Name = item.Groups[5].Value; cdsr.Point = item.Groups[6].Value; string[] ids = cdsr.Url.Split('/'); cdsr.Id = ids[ids.Length - 1]; listConSource.Add(cdsr); } } //status[1] = "结束"; //status[2] = "执行完毕"; //status[3] = ""; status[2] = "已完成扫描 " + i.ToString() + "/" + Ys.ToString(); status[3] = ""; //Logscomsole(status); } status[2] = "下载数:" + DowCount.ToString(); status[3] = "积分数:" + jfCount.ToString(); status[4] = "共 " + CanComCount.ToString() + " 条可评分记录," + PreComCount.ToString() + " 条10分钟以内记录"; return status; } //Logscomsole("获取可评分列表", "结束", "获取到 " + CanComCount.ToString() + " 条可评分记录, " + PreComCount.ToString() + " 条10分钟以内记录"); }