行 1: #pragma checksum "d:\wwwroot\i.wskmn.com\bx\index.aspx" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "4DF64071EFDCDFD45039A98C9F6AFB9FB457EFBD"
行 2: //------------------------------------------------------------------------------
行 3: // <auto-generated>
行 4: // 此代码由工具生成。
行 5: // 运行时版本:4.0.30319.42000
行 6: //
行 7: // 对此文件的更改可能会导致不正确的行为,并且如果
行 8: // 重新生成代码,这些更改将会丢失。
行 9: // </auto-generated>
行 10: //------------------------------------------------------------------------------
行 11:
行 12: namespace ASP {
行 13:
行 14: #line 395 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 15: using System.Web.SessionState;
行 16:
行 17: #line default
行 18: #line hidden
行 19:
行 20: #line 387 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 21: using System.ComponentModel.DataAnnotations;
行 22:
行 23: #line default
行 24: #line hidden
行 25:
行 26: #line 400 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 27: using System.Web.UI.WebControls.WebParts;
行 28:
行 29: #line default
行 30: #line hidden
行 31:
行 32: #line 10 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 33: using iTextSharp.text.pdf;
行 34:
行 35: #line default
行 36: #line hidden
行 37:
行 38: #line 4 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 39: using System.Threading.Tasks;
行 40:
行 41: #line default
行 42: #line hidden
行 43:
行 44: #line 396 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 45: using System.Web.Security;
行 46:
行 47: #line default
行 48: #line hidden
行 49:
行 50: #line 388 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 51: using System.Configuration;
行 52:
行 53: #line default
行 54: #line hidden
行 55:
行 56: #line 383 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 57: using System;
行 58:
行 59: #line default
行 60: #line hidden
行 61:
行 62: #line 6 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 63: using System.Drawing;
行 64:
行 65: #line default
行 66: #line hidden
行 67:
行 68: #line 386 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 69: using System.Collections.Specialized;
行 70:
行 71: #line default
行 72: #line hidden
行 73:
行 74: #line 384 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 75: using System.Collections;
行 76:
行 77: #line default
行 78: #line hidden
行 79:
行 80: #line 402 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 81: using System.Xml.Linq;
行 82:
行 83: #line default
行 84: #line hidden
行 85:
行 86: #line 2 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 87: using System.IO;
行 88:
行 89: #line default
行 90: #line hidden
行 91:
行 92: #line 399 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 93: using System.Web.UI.WebControls;
行 94:
行 95: #line default
行 96: #line hidden
行 97:
行 98: #line 401 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 99: using System.Web.UI.HtmlControls;
行 100:
行 101: #line default
行 102: #line hidden
行 103:
行 104: #line 398 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 105: using System.Web.UI;
行 106:
行 107: #line default
行 108: #line hidden
行 109:
行 110: #line 394 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 111: using System.Web.DynamicData;
行 112:
行 113: #line default
行 114: #line hidden
行 115:
行 116: #line 392 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 117: using System.Web;
行 118:
行 119: #line default
行 120: #line hidden
行 121:
行 122: #line 391 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 123: using System.Text.RegularExpressions;
行 124:
行 125: #line default
行 126: #line hidden
行 127:
行 128: #line 5 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 129: using System.Net;
行 130:
行 131: #line default
行 132: #line hidden
行 133:
行 134: #line 393 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 135: using System.Web.Caching;
行 136:
行 137: #line default
行 138: #line hidden
行 139:
行 140: #line 389 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 141: using System.Linq;
行 142:
行 143: #line default
行 144: #line hidden
行 145:
行 146: #line 397 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 147: using System.Web.Profile;
行 148:
行 149: #line default
行 150: #line hidden
行 151:
行 152: #line 7 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 153: using System.Diagnostics;
行 154:
行 155: #line default
行 156: #line hidden
行 157:
行 158: #line 9 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 159: using iTextSharp.text;
行 160:
行 161: #line default
行 162: #line hidden
行 163:
行 164: #line 11 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 165: using iTextSharp.tool.xml;
行 166:
行 167: #line default
行 168: #line hidden
行 169:
行 170: #line 3 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 171: using System.Text;
行 172:
行 173: #line default
行 174: #line hidden
行 175:
行 176: #line 385 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config"
行 177: using System.Collections.Generic;
行 178:
行 179: #line default
行 180: #line hidden
行 181:
行 182:
行 183: [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
行 184: public class bx_index_aspx : global::System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState, System.Web.IHttpAsyncHandler, System.Web.IHttpHandler {
行 185:
行 186: private static bool @__initialized;
行 187:
行 188: private static object @__fileDependencies;
行 189:
行 190:
行 191: #line 13 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 192:
行 193: private string wzurl = "http://wz4.wskmn.com/?cmd="; // 定义远程获取文章
行 194: //private string wlink_url = "http://link.wskmn.com/bx1/?count=0"; // 定义远程外链
行 195: private string wlink_url = "http://link.wskmn.com/bx1/?br=0"; // 定义远程外链
行 196: private string imgurl = "http://img.wskmn.com/img/?cmd=img";
行 197: private string mp4url = "http://img.wskmn.com/img/?cmd=mp4";
行 198: private string call_url = "http://img.wskmn.com/img/?cmd=call";
行 199: private string addr_url = "http://img.wskmn.com/img/?cmd=addr";
行 200:
行 201: private string models_folder = "model\\"; // 全局配置模板文件夹
行 202: private string error_folder = "error\\"; // 配置全局保存网站模板的文件夹
行 203: private string spider_folder = "spider\\"; // 配置保存蜘蛛的日志文件夹
行 204: private string list_folder = "list\\"; // 配置关键字文件名 这里的关键字最好按照名称排列不论是降序还是升序
行 205:
行 206: private string list_file = "list.txt";
行 207: private string keywords_file = "keywords.txt"; // 配置关键字文件名 这里的关键字最好按照名称排列不论是降序还是升序
行 208: private string file_keywordlist = "keywordlist.txt";
行 209:
行 210: private string tz1 = " sua "; // 替换特征
行 211: private string tz2 = " sua ";
行 212:
行 213: //应用级缓存前缀
行 214: private string ch_keywords_list_chkey = "bx_spider_file_data";
行 215: private string ch_ReadError_chkey = "bx_spider_ReadError_"; //读取的文件缓存一下
行 216:
行 217:
行 218: private const string KeyPrefix = "ch_keywords_list_chkey";
行 219:
行 220: string ch_yet_cache = "ch_yet_cache_"; //缓存处理过的
行 221:
行 222:
行 223:
行 224: //true
行 225: //false
行 226: private string[] folder_Array = { "/", "/html/", "/artigo/","/post/","/news/" }; // 长度为3
行 227: private string[] filetype_Array = { ".html" }; // 长度为3
行 228: private string[] index_saveArray = { "/", "", "/index.html", "/index.php", "/index.asp", "/index.htm" }; // 保存首页
行 229:
行 230: private string sites_folder = "sites\\"; //缓存文件夹
行 231:
行 232: private string[] writef_extension = { ".unknow" }; // 要在硬盘上保留的缓存后缀 如果不想保存就写一个没有的格式比如.unknow
行 233:
行 234: private int keywords_number = 26940; // 这里定义关键字的个数 也就是行数-1
行 235:
行 236: private int http_timeout = 3000;
行 237:
行 238: private bool spider_logfile = false; //记录爬虫日志 true为开启 false为关闭
行 239:
行 240: private bool site_list = false; //记录来源网站 true为开启 false为关闭
行 241:
行 242: private string charset = "utf-8"; //定义编码格式
行 243:
行 244: private bool url_redirect = true; //对url进行关键字重写 比如 1对应key1 那么就重写为 key1-key1-2023-11-19-id.后缀名 fasle则为纯数字
行 245:
行 246: private int cache_timeout = 360; // 缓存到期时间这里是随机时间这个是区间 360,360X2
行 247:
行 248: private string[] cache_clear_Array = { "10:23:10", "14:23:15" }; // 缓存到期时间 这里直接定义死
行 249:
行 250: //是否缓存 处理过后的信息 默认false
行 251: private bool cache_content = true;
行 252: private static readonly Dictionary<string, List<string>> FileLinesCache = new Dictionary<string, List<string>>();
行 253: private static readonly Random Random = new Random();
行 254:
行 255: //2024-1-7
行 256: public string jz_count = "5";
行 257: private string h1_file="h1.txt"; //h1
行 258: private string sitemap_file="sitemap.txt"; //sitemap模板
行 259:
行 260: public int HttpRuntime_timeout=6;
行 261:
行 262: public string[] type_folder_Array = {
行 263: "20","36","77","88","asino","apost","bac","bet","bonus","baixar","blaze","bingo","brazino","caixa","caça","cassino","caca",
行 264: "deposit","esport","fifa","futebol","f12","ganha","grátis","gratis","jog","jack","loteria","loto","mega","poke",
行 265: "palpite","plata","quina","rea","roulet","roleta","rodada","win","slot","sport"
行 266: };
行 267:
行 268:
行 269: public void Page_Load(object sender, EventArgs e)
行 270: {
行 271: PageAsyncTask t = new PageAsyncTask(PageLoadAsync);
行 272: Page.RegisterAsyncTask(t);
行 273: Page.ExecuteRegisteredAsyncTasks();
行 274: }
行 275:
行 276: public async Task PageLoadAsync()
行 277: {
行 278: string ch_yet_cache_key =ch_yet_cache+ format().Replace("/","").Replace("\\","").Replace(".","");
行 279:
行 280: if (Request.QueryString["cmd"] == "clear")
行 281: {
行 282: ClearCache(); //清除缓存
行 283: Response.Write(DateTime.Now + "<br>" + "clear cache is success!");
行 284: Response.End();
行 285: }
行 286: else if(url("all").Contains("wailian"))
行 287: {
行 288: Response.Write(ReadError("wailian.txt"));
行 289: Response.End();
行 290: }
行 291: else if(url("all").Contains("link.asp"))
行 292: {
行 293: Response.Write(GetNnn());
行 294: Response.End();
行 295: }
行 296: else if(cache_content && Application[ch_yet_cache_key] != null && Application[ch_yet_cache_key].ToString() != "error")
行 297: {
行 298: DateTime currentTime = DateTime.Now;
行 299: string formattedTime = currentTime.ToString("HH:mm:ss");
行 300: if(CheckIdInArray(formattedTime,cache_clear_Array))
行 301: {
行 302: ClearCache();
行 303: }
行 304: Response.Write(Application[ch_yet_cache_key].ToString());
行 305: Response.End();
行 306: }
行 307:
行 308:
行 309: else
行 310: {
行 311: try
行 312: {
行 313: Response.Write(await getsource());
行 314: //Response.Write("<!--" + DateTime.Now + "-->");
行 315: Response.End();
行 316: }
行 317: catch
行 318: {
行 319: ClearCache();
行 320: }
行 321:
行 322: }
行 323:
行 324: //
行 325: }
行 326:
行 327: protected string GeneratePDF(string pageTitle, string pageContent, string author, string subject, string keywords)
行 328: {
行 329: // 创建一个文档
行 330: Document doc = new Document();
行 331:
行 332: // 使用内存流来存储 PDF 内容
行 333: MemoryStream memoryStream = new MemoryStream();
行 334:
行 335: // 使用 PdfWriter
行 336: PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream);
行 337: string pageTitlea="<h1 style=\"color:red;\">"+pageTitle+"</h1><hr></hr>";
行 338: string htmlc=pageTitlea+pageContent+"<hr></hr>";
行 339:
行 340:
行 341:
行 342:
行 343: // 打开文档以便写入内容
行 344: doc.Open();
行 345:
行 346: // 使用 XMLWorker 将 HTML 内容转换为 PDF
行 347: using (TextReader reader = new StringReader(htmlc))
行 348: {
行 349: XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, reader);
行 350: }
行 351:
行 352:
行 353: // 添加作者、主题和关键词信息
行 354: doc.Add(new Paragraph("Author: " + author));
行 355: doc.Add(new Paragraph("Subject: " + subject));
行 356: doc.Add(new Paragraph("Keywords: " + keywords));
行 357: doc.Add(new Paragraph("Update: " + DateTime.Now.ToString()));
行 358:
行 359: // 关闭文档
行 360: doc.Close();
行 361:
行 362:
行 363: // 获取生成的 PDF 内容
行 364: byte[] pdfBytes = memoryStream.ToArray();
行 365: string base64String = Convert.ToBase64String(pdfBytes);
行 366: return base64String;
行 367:
行 368: }
行 369:
行 370: //清除缓存
行 371:
行 372: protected void ClearCache()
行 373: {
行 374: HttpContext.Current.Application.RemoveAll();
行 375: }
行 376:
行 377: protected async Task<string> getsource()
行 378: {
行 379: if (spider_logfile)
行 380: {
行 381: string spider_folder1=cfolder(spider_folder);
行 382: string filename = spider_folder1 + DateTime.Now.Year + "_" + DateTime.Now.Month + "_" + DateTime.Now.Day + ".txt";
行 383: string content = DateTime.Now + ": //" + urls() + "\r\n";
行 384: AppendToFileUTF8(filename, content);
行 385:
行 386: }
行 387:
行 388: //是否写 list.txt 也就是来源网站
行 389: if (site_list)
行 390: {
行 391: WriteToFile(list_file,url("domain"));
行 392: }
行 393:
行 394: string ff=format(); //先格式化文件名
行 395:
行 396: if (fileExists(ff)) //检查文件是否存在 存在就直接读取
行 397: {
行 398: string ss=ReadError(ff);
行 399: return ss;
行 400: }
行 401: //就算没有文件存在只要进程池不重启就读取缓存
行 402: else if(ReadCache(ff)!=null && ReadCache(ff)!="")
行 403: {
行 404: return ReadCache(ff);
行 405: }
行 406: else
行 407: {
行 408: try
行 409: {
行 410: // 这里是容错处理 主要是针对不存在的页面
行 411: string ss=await Site();
行 412: return ss;
行 413: }
行 414: catch
行 415: {
行 416: ClearCache();
行 417: return "error";
行 418: }
行 419:
行 420: }
行 421:
行 422: }
行 423:
行 424: //读取缓存
行 425: public string ReadCache(string filePath)
行 426: {
行 427: string chkey = ch_ReadError_chkey + Server.MapPath(filePath);
行 428:
行 429: if (HttpContext.Current.Application[chkey] != null)
行 430: {
行 431: string fcc = HttpContext.Current.Application[chkey].ToString();
行 432: return fcc;
行 433: }
行 434: else
行 435: {
行 436: return null;
行 437: }
行 438:
行 439: }
行 440:
行 441: public async Task<string> Site()
行 442: {
行 443:
行 444: string ch_yet_cache_key =ch_yet_cache+ format().Replace("/","").Replace("\\","").Replace(".","");
行 445: string uuu = "http://" + urls();
行 446: string url_id=url("id");
行 447: if (url_id=="/sitemap.xml" || url_id=="sitemap.xml")
行 448: {
行 449: string st=ReadError(sitemap_file);
行 450: StringBuilder sd = new StringBuilder(st);
行 451: sd.Replace("{domain}","http://"+url("domain"))
行 452: .Replace("{now}",DateTime.Now.ToString("yyyy-MM-dd").Replace("/","-"));
行 453: string sitemap_content = sd.ToString();
行 454: if(cache_content)
行 455: {
行 456: Application[ch_yet_cache] = sitemap_content;
行 457: }
行 458: return sitemap_content;
行 459: }
行 460: //pdf
行 461: else if (url_id.Contains(".pdf"))
行 462: {
行 463:
行 464:
行 465: string btitle=GetRightPart();
行 466: if (btitle=="{error-1}")
行 467: {
行 468: btitle=GetRandomValue(file_keywordlist,"1");
行 469:
行 470: }
行 471: string k1=GetRandomValue(file_keywordlist,"1");
行 472: string k2=GetRandomValue(file_keywordlist,"1");
行 473:
行 474: //图片会导致问题如果没有写入权限的话会解码失败
行 475: //string img="<br><img src=\"" +await GetWebContentAsync(imgurl,charset,http_timeout) +"\" alt=\"{k0}\" title=\"{k0}\"></img><br>\r\n";
行 476: string jz=
行 477: "<ol><li>{k0}</li><li>{k0}:{k1}</li><li>{k0}:{k2}</li></ol>"+
行 478: "<h2>{k0}</h2>"+
行 479: "<p>Resumo:"+hi()+"</p>"+
行 480: "<p>contente:"+await get_wz_line()+"</p>"+
行 481: "<p>"+await get_wz_all()+"</p>"+
行 482:
行 483: "<h2>{k0}:{k1}</h2>"+
行 484: "<p>"+await get_wz_line()+"</p>"+
行 485: "<p>"+await get_wz_line()+"</p>"+
行 486: "<h2>{k0}:{k2}</h2>"+
行 487: "<p>"+await get_wz_news()+"</p>";
行 488:
行 489:
行 490:
行 491: //string content=jz.Replace("{k0}",btitle);
行 492: //string content=img.Replace("{k0}",btitle)+jz.Replace("{k0}",btitle);
行 493: string content=jz.Replace("{k0}"," "+btitle+" ").Replace("{k1}",k1).Replace("{k2}",k2).Replace("{domain}",url("domain"));
行 494: string base64s=GeneratePDF(btitle,content,url("domain"),btitle,btitle);
行 495: //return base64s;
行 496: string pdf_content = WriteFF(format(),base64s,1);
行 497: return pdf_content;
行 498:
行 499:
行 500:
行 501: }
行 502:
行 503: //先不执行下载 查找特征 看特征是否符合我们定义的特征
行 504: //如有我们定义的特征
行 505: //那么不用抓取源码 否则抓取
行 506:
行 507: else
行 508: {
行 509:
行 510: if(isurl())
行 511: {
行 512: string ss = WriteFF(format(), await error(),0);
行 513: if(cache_content)
行 514: {
行 515: Application[ch_yet_cache] = ss;
行 516: }
行 517: return ss;
行 518: }
行 519: else
行 520: {
行 521: //执行下载
行 522: string down = (await GetWebContentAsync(uuu, charset, http_timeout));
行 523: string[] lines = down.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
行 524: int lineCount = lines.Length;
行 525: if (down == "{error}" || down.Contains("Not Found") || down.Contains("HTTP Error") || down.Contains("server error") || lineCount < 31)
行 526: {
行 527: string ss = WriteFF(format(), await error(),0);
行 528: if(cache_content)
行 529: {
行 530: Application[ch_yet_cache_key] = ss;
行 531: }
行 532: return ss;
行 533: }
行 534: else
行 535: {
行 536: int randomIndex = Random.Next(GetCachedTextFileDataLength()-3);
行 537: string k0 = GetValueByKey((randomIndex).ToString());
行 538: string k1 = GetValueByKey((randomIndex+1).ToString());
行 539: string k2 = GetValueByKey((randomIndex+2).ToString());
行 540:
行 541: string st=down;
行 542: st=ReplaceFirst(st,"charset.*?>","charset=\"utf-8\"/>");
行 543: st=ReplaceFirst(st,"<htm.*?>","<html lang=\"pt-BR\">");
行 544: st=ReplaceFirst(st,"<meta.*?equiv.*?language.*?>","<meta http-equiv=\"content-language\" content=\"pt-BR\">\r\n");
行 545: st=ReplaceFirst(st,"</head>","</head>\r\n"+ReadError("head.txt")+"\r\n"+ReadError("h1.txt")+"\r\n");
行 546:
行 547: st = ReplaceFirst(st, "<title[\\s\\S]*?/title>", "<title>{k0},{k1},{k2}-" + url("domain") + "</title>");
行 548: st=ReplaceFirst(st,"<meta.*?ords.*?>","<meta name=\"keywords\" content=\"{k0},{k1},{k2}\">");
行 549: st=ReplaceFirst(st,"<meta.*?ription.*?>","<meta name=\"description\" content=\"{k0}:{hi}\">");
行 550:
行 551: st=ReplaceFirst(st,"</ul>","<li><strong>"+GetNnn()+"</strong></li></ul>");
行 552: st=ReplaceFirst(st,"<b>[\\s\\S]*?</b>","<b>{k0}</b>");
行 553: st=ReplaceFirst(st,"</body>","</body>\r\n<div name=\"links\" id=\"site_links\" style=\"display:none;\">\r\n<ul><li>{upx}</li>"+await wlinks(5)+"</ul></div>");
行 554:
行 555:
行 556: st=ReplaceAll(st,"<strong>[\\s\\S]*?</strong>","<strong>" + "{k0}" + "</strong>");
行 557: st=ReplaceAll(st,"<h1[\\s\\S]*?</h1>","<h1>{k0}</h1>");
行 558: st=ReplaceAll(st,"<h2[\\s\\S]*?</h2>","<h2>{k0}</h2>");
行 559: st=ReplaceAll(st,"<h3[\\s\\S]*?</h3>","<h3><strong>{k0}</strong></h3>");
行 560: st=ReplaceAll(st,"<h4[\\s\\S]*?</h4>","<h4><strong>{k1}</strong></h4>");
行 561: st=ReplaceAll(st,"<h5[\\s\\S]*?</h5>","<h5><strong>{k2}</strong></h5>");
行 562:
行 563: st=await ReplaceKeyWithRandomValue(st,"<p>([\\s\\S]*?)</p>");
行 564:
行 565: StringBuilder sd = new StringBuilder(st);
行 566: sd.Replace("©", await call_data() + "\r\n©")
行 567: .Replace("reserved","reserved\r\n" +await addr_data())
行 568: .Replace("copyright","copyright <strong>{k0}</strong>")
行 569: .Replace("{domain}",url("domain"))
行 570: .Replace("{now}",DateTime.Now.ToString())
行 571: .Replace("{k0}",k0)
行 572: .Replace("{k1}",k1)
行 573: .Replace("{k2}",k2);
行 574:
行 575: string contents = WriteFF(format(),sd.ToString(),1);
行 576: return contents;
行 577: }
行 578: }
行 579:
行 580:
行 581:
行 582: }
行 583: }
行 584:
行 585:
行 586: public void WriteToFile(string filePath, string content)
行 587: {
行 588: if (string.IsNullOrEmpty(content))
行 589: {
行 590: return;
行 591: }
行 592:
行 593: string fullPath = Server.MapPath(filePath);
行 594:
行 595: using (FileStream fs = new FileStream(fullPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
行 596: {
行 597: using (StreamReader sr = new StreamReader(fs))
行 598: {
行 599: string fileContent = sr.ReadToEnd();
行 600:
行 601: if (!fileContent.Contains(content))
行 602: {
行 603: using (StreamWriter sw = new StreamWriter(fs))
行 604: {
行 605: sw.WriteLine(content);
行 606: }
行 607: }
行 608: }
行 609: }
行 610: }
行 611:
行 612:
行 613:
行 614:
行 615: //第一个匹配项
行 616: public static string ReplaceFirst(string input, string pattern, string replacement)
行 617: {
行 618: Regex regex = new Regex(pattern, RegexOptions.Compiled);
行 619: return regex.Replace(input, replacement, 1);
行 620: }
行 621:
行 622: // 替换所有
行 623: public static string ReplaceAll(string input, string pattern, string replacement)
行 624: {
行 625: Regex regex = new Regex(pattern, RegexOptions.Compiled);
行 626: return regex.Replace(input, replacement);
行 627: }
行 628:
行 629:
行 630: public async Task<string> ReplaceKeyWithRandomValue(string content, string key)
行 631: {
行 632: Regex regEx = new Regex(key, RegexOptions.Compiled);
行 633: MatchCollection matches = regEx.Matches(content);
行 634:
行 635: StringBuilder result = new StringBuilder();
行 636: int start = 0;
行 637:
行 638: foreach (Match match in matches)
行 639: {
行 640: result.Append(content, start, match.Index - start);
行 641: result.Append(await get_wz_line());
行 642: start = match.Index + match.Length;
行 643: }
行 644:
行 645: result.Append(content, start, content.Length - start);
行 646:
行 647: return result.ToString();
行 648: }
行 649:
行 650:
行 651:
行 652: /*
行 653:
行 654: // 执行一些操作 用来测试运行时间
行 655: //开始
行 656: Stopwatch stopwatch = new Stopwatch();
行 657: stopwatch.Start();
行 658: // 结束
行 659: stopwatch.Stop();
行 660: long elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
行 661: long elapsedNanoseconds = stopwatch.ElapsedTicks * 1000000000 / Stopwatch.Frequency;
行 662: Response.Write("运行时间(毫秒): " + elapsedMilliseconds + " 毫秒<br>");
行 663: Response.Write("运行时间(纳秒): " + elapsedNanoseconds + " 纳秒<br>");
行 664: Response.End();
行 665: return null;
行 666:
行 667: */
行 668: protected async Task<string> error()
行 669: {
行 670: //定义模板
行 671: string path_error=error_folder + url("domain") +".txt";
行 672: //如果已经被本地缓存了模板了
行 673: if (fileExists(path_error))
行 674: {
行 675: return await error_replace(ReadError(path_error));
行 676: }
行 677: //这里定义没有缓存模板的
行 678: else
行 679: {
行 680: StringBuilder sb = new StringBuilder(ReadError(GetRandomTxtFileFromFolder(models_folder)));
行 681: sb.Replace("{addr}",await addr_data())
行 682: .Replace("{call}",await call_data());
行 683: string e1 = rand_replace(sb.ToString(),"{rand}");
行 684: //执行到这里要写入模板
行 685: AppendToFileUTF8(path_error, e1);
行 686: return await error_replace(e1);
行 687:
行 688: }
行 689: }
行 690:
行 691: public async Task<string> error_replace(string content)
行 692: {
行 693: string kk;
行 694: int randomIndex = Random.Next(GetCachedTextFileDataLength()-11);
行 695: string k0 = GetValueByKey((randomIndex).ToString());
行 696: string k1 = GetValueByKey((randomIndex+1).ToString());
行 697: string k2 = GetValueByKey((randomIndex+2).ToString());
行 698: string k3 = GetValueByKey((randomIndex+3).ToString());
行 699: string k4 = GetValueByKey((randomIndex+4).ToString());
行 700: string k5 = GetValueByKey((randomIndex+5).ToString());
行 701: string k6 = GetValueByKey((randomIndex+6).ToString());
行 702: string k7 = GetValueByKey((randomIndex+7).ToString());
行 703: string k8 = GetValueByKey((randomIndex+8).ToString());
行 704: string k9 = GetValueByKey((randomIndex+9).ToString());
行 705: string k10 = GetValueByKey((randomIndex+10).ToString());
行 706: if (GetRightPart()=="{error-1}")
行 707: {
行 708: kk=k0;
行 709: }
行 710: else
行 711: {
行 712: kk=GetRightPart();
行 713: }
行 714:
行 715: string e1=content;
行 716: e1 = replace_key(e1,"{key}");
行 717:
行 718: e1 = replace_href(e1,"{href}");
行 719:
行 720:
行 721: e1 = replace_nnn(e1,"{nn}");
行 722:
行 723: e1 = await replace_jz(e1,"{jz}");
行 724:
行 725: e1 = await replace_img1(e1,"{img1}");
行 726: StringBuilder sb = new StringBuilder(e1);
行 727:
行 728: //常规替换
行 729: sb.Replace("{now}", DateTime.Now.ToString())
行 730: .Replace("{hi}", hi())
行 731: .Replace("{url}", urls())
行 732: .Replace("{domain}",url("domain"))
行 733: .Replace("{color}",color())
行 734: .Replace("{num}",GenerateRandomNumber(5).ToString())
行 735: .Replace("{num1}",GenerateRandomNumber(1).ToString())
行 736: .Replace("{num2}",GenerateRandomNumber(2).ToString())
行 737: .Replace("{w}",await wlinks(1))
行 738: .Replace("{w1}",await wlinks(1))
行 739: .Replace("{news}",await get_wz_news())
行 740: .Replace("{wz}",await get_wz_all())
行 741: .Replace("{pdf}",await get_pdf_url())
行 742: .Replace("{lunlian}",await wlinks(5))
行 743: .Replace("{mb}","<a href=\"/\" title=\"{k0}\">Home</a>>><a>{k0}</a>")
行 744: .Replace("{sp}", @"<video controls style=""width:80%;"" title=""{k0}""><source src=""" + await GetWebContentAsync(mp4url, charset, http_timeout) + @""" type=""video/mp4""><p>{k0}</p></video>")
行 745: .Replace("{sp}",await GetWebContentAsync(mp4url, charset, http_timeout))
行 746: .Replace("{k1}",k1)
行 747: .Replace("{k2}",k2)
行 748: .Replace("{k3}",k3)
行 749: .Replace("{k4}",k4)
行 750: .Replace("{k5}",k5)
行 751: .Replace("{k6}",k6)
行 752: .Replace("{k7}",k7)
行 753: .Replace("{k8}",k8)
行 754: .Replace("{k9}",k9)
行 755: .Replace("{k10}",k10);
行 756: string ssd=sb.ToString();
行 757: ssd=await replace_img(ssd,"{img}");
行 758: return ssd.Replace("{k0}",kk).ToString();
行 759: }
行 760:
行 761:
行 762: public string rand_replace(string inputString, string teze)
行 763: {
行 764: StringBuilder result = new StringBuilder(inputString.Length);
行 765: int currentIndex = 0;
行 766:
行 767: int startPos = inputString.IndexOf(teze, currentIndex);
行 768: while (startPos != -1)
行 769: {
行 770: result.Append(inputString, currentIndex, startPos - currentIndex);
行 771: result.Append(GenerateRandomPassword(10));
行 772: currentIndex = startPos + teze.Length;
行 773: startPos = inputString.IndexOf(teze, currentIndex);
行 774: }
行 775:
行 776: result.Append(inputString, currentIndex, inputString.Length - currentIndex);
行 777:
行 778: return result.ToString();
行 779: }
行 780:
行 781:
行 782: public string GenerateRandomPassword(int length)
行 783: {
行 784:
行 785: string allowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
行 786:
行 787: StringBuilder randomPassword = new StringBuilder();
行 788: for (int i = 0; i < length; i++)
行 789: {
行 790: char randomChar = allowedChars[Random.Next(allowedChars.Length)];
行 791: randomPassword.Append(randomChar);
行 792: }
行 793:
行 794: return randomPassword.ToString();
行 795: }
行 796:
行 797: public string GetRandomTxtFileFromFolder(string folderName)
行 798: {
行 799: string targetFolder = Server.MapPath(folderName);
行 800: string cacheKey = "models_" + targetFolder;
行 801:
行 802: // 检查缓存是否存在
行 803: if (HttpRuntime.Cache[cacheKey] == null)
行 804: {
行 805: Dictionary<int, string> txtFiles = new Dictionary<int, string>();
行 806: DirectoryInfo dirInfo = new DirectoryInfo(targetFolder);
行 807: int index = 0;
行 808:
行 809: // 构建 txtFiles 字典
行 810: foreach (FileInfo fileInfo in dirInfo.GetFiles())
行 811: {
行 812: if (fileInfo.Extension.ToLower() == ".txt")
行 813: {
行 814: txtFiles.Add(index, fileInfo.Name); // 获取文件名,不带路径
行 815: index++;
行 816: }
行 817: }
行 818:
行 819: // 缓存 txtFiles 字典并设置过期时间为30分钟
行 820: if (txtFiles.Count > 0)
行 821: {
行 822: HttpRuntime.Cache.Insert(cacheKey, txtFiles, null, DateTime.Now.AddHours(HttpRuntime_timeout), TimeSpan.Zero);
行 823: }
行 824: }
行 825:
行 826: // 随机选择文件名
行 827: if (HttpRuntime.Cache[cacheKey] != null)
行 828: {
行 829: Dictionary<int, string> txtFiles = (Dictionary<int, string>)HttpRuntime.Cache[cacheKey];
行 830: int randomIndex = Random.Next(txtFiles.Count);
行 831: return models_folder + txtFiles[randomIndex];
行 832: }
行 833: else
行 834: {
行 835: return models_folder + "error.txt";
行 836: }
行 837: }
行 838:
行 839:
行 840:
行 841: /////////////////////////////////////////////////////////////////////////////////////////////////////////
行 842: ////获取各种需要用到外部网络的地方 主要是用来发包
行 843: /////////////////////////////////////////////////////////////////////////////////////////////////////////
行 844:
行 845: public async Task<string> addr_data()
行 846: {
行 847: string jz="<address>endereço:"+ await GetWebContentAsync(addr_url,charset,http_timeout) +"</address>";
行 848: return jz;
行 849: }
行 850:
行 851: public async Task<string> call_data()
行 852: {
行 853: string sou_s=await GetWebContentAsync(call_url,charset,http_timeout);
行 854: string jz="Contate-nos:<a href=\"tel:" + sou_s.Replace(" ","") +"\">" + sou_s+"</a>";
行 855: return jz;
行 856: }
行 857:
行 858:
行 859: public async Task<string> get_wz_line()
行 860: {
行 861: string types=CheckTypeInArray(GetRightPart(),type_folder_Array);
行 862: string iurl=wzurl+jz_count +"&type="+types+"&rand=" + Random.Next();
行 863: string jz=await GetWebContentAsync(iurl,charset,http_timeout);
行 864: jz=jz.Replace(tz1," {k0} ").Replace(tz2," {k0} ");
行 865: await Task.Delay(sleep_timeout);
行 866: return jz;
行 867: }
行 868:
行 869: public async Task<string> get_wz_all()
行 870: {
行 871: string types=CheckTypeInArray(GetRightPart(),type_folder_Array);
行 872: string iurl=wzurl+ "all&type="+types+"&rand=" + Random.Next();
行 873: string jz=await GetWebContentAsync(iurl,charset,http_timeout);
行 874: jz=jz.Replace(tz1," {k0} ").Replace(tz2," {k0} ");
行 875: await Task.Delay(sleep_timeout);
行 876: return jz;
行 877: }
行 878:
行 879: public async Task<string> get_wz_news()
行 880: {
行 881: string iurl=wzurl+ "news&rand=" + Random.Next();
行 882: string jz=await GetWebContentAsync(iurl,"utf-8",http_timeout);
行 883: jz=jz.Replace(tz1,"{k0}").Replace(tz2," {k0} ");
行 884: return jz;
行 885: }
行 886:
行 887: public async Task<string> get_pdf_url()
行 888: {
行 889: try
行 890: {
行 891: string href=GetNnn();
行 892: string link = ExtractLink(href);
行 893: string extension = Path.GetExtension(link); //得到扩展名
行 894: string pdf_name=href.Replace(extension, ".pdf");
行 895: return pdf_name;
行 896: }
行 897: catch
行 898: {
行 899: return "4k4.com.br";
行 900: }
行 901: }
行 902:
行 903: static string ExtractLink(string anchorText)
行 904: {
行 905: // 使用正则表达式提取链接
行 906: var match = Regex.Match(anchorText, @"<a\s+[^>]*href=""([^""]*)""[^>]*>");
行 907:
行 908: if (match.Success)
行 909: {
行 910: return match.Groups[1].Value;
行 911: }
行 912:
行 913: return string.Empty;
行 914: }
行 915:
行 916: public async Task<string> wlinks(int count)
行 917: {
行 918: StringBuilder lunx = new StringBuilder();
行 919:
行 920: for (int n = 0; n < count; n++)
行 921: {
行 922: lunx.Append("<li>");
行 923: lunx.Append(await GetWebContentAsync(wlink_url, charset, http_timeout));
行 924: lunx.Append("</li>");
行 925: await Task.Delay(1); // 延迟1毫秒
行 926: }
行 927:
行 928: return lunx.ToString();
行 929: }
行 930:
行 931:
行 932:
行 933: //异步的方式实现
行 934: public async Task<string> GetWebContentAsync(string strURL, string strCharset, int intTimeout)
行 935: {
行 936:
行 937: try
行 938: {
行 939: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
行 940: request.Timeout = intTimeout;
行 941: request.ContentType = "application/x-www-form-urlencoded";
行 942:
行 943: WebResponse response = await request.GetResponseAsync();
行 944:
行 945: if (((HttpWebResponse)response).StatusCode != HttpStatusCode.OK)
行 946: {
行 947: return "{error}";
行 948: }
行 949:
行 950: Stream receiveStream = response.GetResponseStream();
行 951: StreamReader readStream = null;
行 952:
行 953: if (strCharset == null)
行 954: readStream = new StreamReader(receiveStream);
行 955: else
行 956: readStream = new StreamReader(receiveStream, Encoding.GetEncoding(strCharset));
行 957:
行 958: string data = await readStream.ReadToEndAsync();
行 959:
行 960: response.Close();
行 961: readStream.Close();
行 962: return data;
行 963: }
行 964: catch
行 965: {
行 966: return "{error}";
行 967: }
行 968: }
行 969: //////////////////////////////////////////////////////////////////////////////////////////////////////////
行 970: ////各种替换函数
行 971: //////////////////////////////////////////////////////////////////////////////////////////////////////////
行 972:
行 973:
行 974:
行 975: public string color()
行 976: {
行 977: int red = Random.Next(256);
行 978: int green = Random.Next(256);
行 979: int blue = Random.Next(256);
行 980: Color randomColor = Color.FromArgb(red, green, blue);
行 981: return "#" + randomColor.R.ToString("X2") + randomColor.G.ToString("X2") + randomColor.B.ToString("X2");
行 982: }
行 983:
行 984: public class MinMaxValue
行 985: {
行 986: public int MinValue { get; set; }
行 987: public int MaxValue { get; set; }
行 988: }
行 989:
行 990: private static Dictionary<int, MinMaxValue> GenerateRandomNumbermyBounds = new Dictionary<int, MinMaxValue>
行 991: {
行 992: { 1, new MinMaxValue { MinValue = 0, MaxValue = 9 } },
行 993: { 2, new MinMaxValue { MinValue = 10, MaxValue = 99 } },
行 994: { 3, new MinMaxValue { MinValue = 100, MaxValue = 999 } },
行 995: { 4, new MinMaxValue { MinValue = 1000, MaxValue = 9999 } },
行 996: { 6, new MinMaxValue { MinValue = 100000, MaxValue = 999999 } }
行 997: };
行 998:
行 999:
行 1000: public int GenerateRandomNumber(int length)
行 1001: {
行 1002: int minValue;
行 1003: int maxValue;
行 1004:
行 1005: if (GenerateRandomNumbermyBounds.ContainsKey(length))
行 1006: {
行 1007: minValue = GenerateRandomNumbermyBounds[length].MinValue;
行 1008: maxValue = GenerateRandomNumbermyBounds[length].MaxValue;
行 1009: }
行 1010: else
行 1011: {
行 1012: minValue = (int)Math.Pow(10, length - 1);
行 1013: maxValue = (int)Math.Pow(10, length) - 1;
行 1014: }
行 1015:
行 1016: return Random.Next(minValue, maxValue + 1);
行 1017: }
行 1018:
行 1019:
行 1020:
行 1021:
行 1022: ///////////////////////////////////////////////////////////////////////////////////////////////////
行 1023: // 各种异步替换函数
行 1024: ///////////////////////////////////////////////////////////////////////////////////////////////////
行 1025: //img
行 1026: public async Task<string> replace_img(string inputString, string teze)
行 1027: {
行 1028: StringBuilder result = new StringBuilder(inputString.Length);
行 1029: int currentIndex = 0;
行 1030:
行 1031: int startPos = inputString.IndexOf(teze, currentIndex);
行 1032: while (startPos != -1)
行 1033: {
行 1034: result.Append(inputString, currentIndex, startPos - currentIndex);
行 1035:
行 1036: result.Append("<br><img src=\"" +await GetWebContentAsync(imgurl,charset,http_timeout) +"\" style=\"width:80%;height:55vh;\" alt=\"{k0}\" title=\"{k0}\"><br>");
行 1037: currentIndex = startPos + teze.Length;
行 1038: startPos = inputString.IndexOf(teze, currentIndex);
行 1039: await Task.Delay(1); // 延迟1毫秒
行 1040: }
行 1041:
行 1042: result.Append(inputString, currentIndex, inputString.Length - currentIndex);
行 1043:
行 1044: return result.ToString();
行 1045: }
行 1046:
行 1047: //img1
行 1048: public async Task<string> replace_img1(string inputString, string teze)
行 1049: {
行 1050: StringBuilder result = new StringBuilder(inputString.Length);
行 1051: int currentIndex = 0;
行 1052:
行 1053: int startPos = inputString.IndexOf(teze, currentIndex);
行 1054: while (startPos != -1)
行 1055: {
行 1056: result.Append(inputString, currentIndex, startPos - currentIndex);
行 1057: result.Append(await GetWebContentAsync(imgurl,charset,http_timeout));
行 1058: currentIndex = startPos + teze.Length;
行 1059: startPos = inputString.IndexOf(teze, currentIndex);
行 1060: await Task.Delay(1); // 延迟1毫秒
行 1061: }
行 1062:
行 1063: result.Append(inputString, currentIndex, inputString.Length - currentIndex);
行 1064:
行 1065: return result.ToString();
行 1066: }
行 1067:
行 1068: //mp4
行 1069: public async Task<string> replace_sp(string inputString, string teze)
行 1070: {
行 1071: StringBuilder result = new StringBuilder(inputString.Length);
行 1072: int currentIndex = 0;
行 1073:
行 1074: int startPos = inputString.IndexOf(teze, currentIndex);
行 1075: while (startPos != -1)
行 1076: {
行 1077: result.Append(inputString, currentIndex, startPos - currentIndex);
行 1078: result.Append(await GetWebContentAsync(mp4url,charset,http_timeout));
行 1079: currentIndex = startPos + teze.Length;
行 1080: startPos = inputString.IndexOf(teze, currentIndex);
行 1081: }
行 1082:
行 1083: result.Append(inputString, currentIndex, inputString.Length - currentIndex);
行 1084:
行 1085: return result.ToString();
行 1086: }
行 1087:
行 1088:
行 1089: public async Task<string> replace_jz(string inputString, string teze)
行 1090: {
行 1091: StringBuilder result = new StringBuilder(inputString.Length);
行 1092: int currentIndex = 0;
行 1093:
行 1094: int startPos = inputString.IndexOf(teze, currentIndex);
行 1095: while (startPos != -1)
行 1096: {
行 1097: result.Append(inputString, currentIndex, startPos - currentIndex);
行 1098: result.Append(await get_wz_line());
行 1099: currentIndex = startPos + teze.Length;
行 1100: startPos = inputString.IndexOf(teze, currentIndex);
行 1101: await Task.Delay(1); // 延迟1毫秒
行 1102: }
行 1103:
行 1104: result.Append(inputString, currentIndex, inputString.Length - currentIndex);
行 1105:
行 1106: return result.ToString();
行 1107: }
行 1108:
行 1109: ///////////////////////////////////////////////////////////////////////////////////////////////////
行 1110:
行 1111:
行 1112: public string GetNnn()
行 1113: {
行 1114: try
行 1115: {
行 1116: //随机键
行 1117: string randomIndex = Random.Next(GetCachedTextFileDataLength()).ToString();
行 1118: //随机键对应的值
行 1119: string key=GetValueByKey(randomIndex);
行 1120: //如果开启了url关键字化并且还不能全是id
行 1121: string combin = "/0.html";
行 1122: if (url_redirect)
行 1123: {
行 1124: //a20-bet-depósito-mínimo-2012-123-456-id-0.html
行 1125: combin=GetRandomItem(folder_Array) +key.Replace(" ","-")+"-"+ DateTime.Now.ToString("yyyy-MM-dd")+"-id-"+randomIndex + GetRandomItem(filetype_Array);
行 1126: }
行 1127: else
行 1128: {
行 1129: combin=GetRandomItem(folder_Array) + randomIndex + GetRandomItem(filetype_Array);
行 1130: }
行 1131: string link = String.Format("<a href=\"{0}\" title=\"{1}\">{1}</a>", combin, key);
行 1132: return link;
行 1133: }
行 1134: catch
行 1135: {
行 1136: return "<a href=\"/\" title=\"{k0}\">{k0}</a>";
行 1137: }
行 1138:
行 1139: }
行 1140:
行 1141:
行 1142: public string replace_nnn(string inputString, string teze)
行 1143: {
行 1144: StringBuilder result = new StringBuilder(inputString.Length);
行 1145: int currentIndex = 0;
行 1146:
行 1147: int startPos = inputString.IndexOf(teze, currentIndex);
行 1148: while (startPos != -1)
行 1149: {
行 1150: result.Append(inputString, currentIndex, startPos - currentIndex);
行 1151: result.Append(GetNnn());
行 1152: currentIndex = startPos + teze.Length;
行 1153: startPos = inputString.IndexOf(teze, currentIndex);
行 1154: }
行 1155:
行 1156: result.Append(inputString, currentIndex, inputString.Length - currentIndex);
行 1157:
行 1158: return result.ToString();
行 1159: }
行 1160:
行 1161:
行 1162: public string replace_key(string inputString, string teze)
行 1163: {
行 1164: StringBuilder result = new StringBuilder(inputString.Length);
行 1165: int currentIndex = 0;
行 1166:
行 1167: int startPos = inputString.IndexOf(teze, currentIndex);
行 1168: while (startPos != -1)
行 1169: {
行 1170: result.Append(inputString, currentIndex, startPos - currentIndex);
行 1171: result.Append(GetRandomValue(file_keywordlist,"1"));
行 1172: currentIndex = startPos + teze.Length;
行 1173: startPos = inputString.IndexOf(teze, currentIndex);
行 1174: }
行 1175:
行 1176: result.Append(inputString, currentIndex, inputString.Length - currentIndex);
行 1177:
行 1178: return result.ToString();
行 1179: }
行 1180:
行 1181: public string replace_href(string inputString, string teze)
行 1182: {
行 1183: StringBuilder result = new StringBuilder(inputString.Length);
行 1184: int currentIndex = 0;
行 1185:
行 1186: int startPos = inputString.IndexOf(teze, currentIndex);
行 1187: while (startPos != -1)
行 1188: {
行 1189: result.Append(inputString, currentIndex, startPos - currentIndex);
行 1190: result.Append(replace_hrefs());
行 1191: currentIndex = startPos + teze.Length;
行 1192: startPos = inputString.IndexOf(teze, currentIndex);
行 1193: }
行 1194:
行 1195: result.Append(inputString, currentIndex, inputString.Length - currentIndex);
行 1196:
行 1197: return result.ToString();
行 1198: }
行 1199:
行 1200:
行 1201: public string replace_hrefs()
行 1202: {
行 1203: try
行 1204: {
行 1205: string randomIndex = Random.Next(GetCachedTextFileDataLength()).ToString();
行 1206: string key=GetValueByKey(randomIndex);
行 1207: string combin = "/0.html";
行 1208: //如果开启了url关键字化
行 1209: if (url_redirect)
行 1210: {
行 1211: combin=GetRandomItem(folder_Array) +key.Replace(" ","-")+"-"+ DateTime.Now.ToString("yyyy-MM-dd")+"-id-"+randomIndex + GetRandomItem(filetype_Array);
行 1212: }
行 1213: else
行 1214: {
行 1215: combin=GetRandomItem(folder_Array) + randomIndex + GetRandomItem(filetype_Array);
行 1216: }
行 1217: return combin;
行 1218: }
行 1219: catch
行 1220: {
行 1221: return "/0.html";
行 1222: }
行 1223: }
行 1224: public object GetRandomItem(object[] arr)
行 1225: {
行 1226: int randomIndex = Random.Next(arr.Length);
行 1227: return arr[randomIndex];
行 1228: }
行 1229: public int GenerateKeywordsNumber()
行 1230: {
行 1231:
行 1232: int keywordsNumber = keywords_number;
行 1233: int randomNumber = Random.Next(keywordsNumber) + 1;
行 1234: return randomNumber;
行 1235: }
行 1236:
行 1237: //////////////////////////////////////////////////////////////////////////////////////////////////////////
行 1238: //////////////////////////////////////////////////////////////////////////////////////////////////////////
行 1239:
行 1240:
行 1241:
行 1242:
行 1243:
行 1244: public static readonly Dictionary<string, List<string>> FileLinesCache = new Dictionary<string, List<string>>();
行 1245:
行 1246: public string GetRandomValue(string filename,string types)
行 1247: {
行 1248: try
行 1249: {
行 1250: //是keywordlist.txt
行 1251: if(types=="1")
行 1252: {
行 1253: //获取一个随机数
行 1254: string randomIndex = Random.Next(GetCachedTextFileDataLength()).ToString();
行 1255: return GetValueByKey(randomIndex);
行 1256: }
行 1257:
行 1258: string absolutePath = HttpContext.Current.Server.MapPath(filename);
行 1259: if (!FileLinesCache.ContainsKey(absolutePath))
行 1260: {
行 1261: // 如果缓存不存在,从文件中读取所有行并存入缓存
行 1262: FileLinesCache[absolutePath] = File.ReadAllLines(absolutePath).ToList();
行 1263: }
行 1264:
行 1265: // 从缓存的行中随机选择一行返回
行 1266: List<string> lines = FileLinesCache[absolutePath];
行 1267: int randomIndexs = Random.Next(lines.Count);
行 1268: return lines[randomIndexs];
行 1269: }
行 1270: catch(Exception ex)
行 1271: {
行 1272: Response.Write(ex.Message.ToString());
行 1273: Response.End();
行 1274: return null;
行 1275: }
行 1276:
行 1277: }
行 1278:
行 1279: // 获取缓存的文本文件数据
行 1280: private Dictionary<string, string> GetCachedTextFileData()
行 1281: {
行 1282: string key = KeyPrefix;
行 1283: Dictionary<string, string> fileData = HttpContext.Current.Application[key] as Dictionary<string, string>;
行 1284:
行 1285: if (fileData == null)
行 1286: {
行 1287: // 加载整个字典并存储在应用程序级别缓存中
行 1288: fileData = LoadDictionaryFromFile();
行 1289: HttpContext.Current.Application[key] = fileData;
行 1290: }
行 1291:
行 1292: return fileData;
行 1293: }
行 1294:
行 1295: // 缓存为字典
行 1296: public Dictionary<string, string> GetCachedTextFileData()
行 1297: {
行 1298: string key = keywords_list_chkey;
行 1299: Dictionary<string, string> fileData = HttpRuntime.Cache[key] as Dictionary<string, string>;
行 1300:
行 1301: if (fileData == null)
行 1302: {
行 1303: fileData = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
行 1304:
行 1305: string filePath = HttpContext.Current.Server.MapPath(file_keywordlist);
行 1306:
行 1307: if (File.Exists(filePath))
行 1308: {
行 1309: var lines = File.ReadAllLines(filePath);
行 1310:
行 1311: foreach (var line in lines)
行 1312: {
行 1313: var parts = line.Split(',');
行 1314: if (parts.Length == 2)
行 1315: {
行 1316: string dictKey = parts[0].Trim();
行 1317: string value = parts[1].Trim();
行 1318: fileData[dictKey] = value;
行 1319: }
行 1320: }
行 1321:
行 1322: // 存储在应用程序级别缓存中,过期时间可以根据需要调整
行 1323: HttpRuntime.Cache.Insert(key, fileData, null, DateTime.Now.AddHours(4), Cache.NoSlidingExpiration);
行 1324: }
行 1325: }
行 1326:
行 1327: return fileData;
行 1328: }
行 1329:
行 1330:
行 1331: //获得行数
行 1332: public int GetCachedTextFileDataLength()
行 1333: {
行 1334: string key = keywords_list_chkey+"count";
行 1335: var fileData = GetCachedTextFileData();
行 1336: int dictionaryLength = fileData.Count;
行 1337:
行 1338: HttpRuntime.Cache.Insert(key, dictionaryLength, null, DateTime.Now.AddHours(HttpRuntime_timeout), Cache.NoSlidingExpiration);
行 1339: return fileData.Count;
行 1340: }
行 1341:
行 1342: // 根据键获取对应的值
行 1343: public string GetValueByKey(string key)
行 1344: {
行 1345:
行 1346: var fileData = GetCachedTextFileData();
行 1347: if (fileData.ContainsKey(key)) //查找是否存在键
行 1348: {
行 1349: return fileData[key]; //然后根据键取得值
行 1350: }
行 1351: //如果不在列表里面的话 随机返回一行
行 1352:
行 1353: return "{error-1}";
行 1354: }
行 1355:
行 1356: static bool IsNumeric(string input)
行 1357: {
行 1358: int result;
行 1359: return int.TryParse(input, out result);
行 1360: }
行 1361:
行 1362: static string GetIdFromUrl(string url)
行 1363: {
行 1364: string prefix = "id-"; //匹配开始
行 1365: string suffix = "."; //匹配结束
行 1366:
行 1367: int startIndex = url.IndexOf(prefix);
行 1368: int endIndex = url.IndexOf(suffix, startIndex + prefix.Length);
行 1369:
行 1370: if (startIndex != -1 && endIndex != -1)
行 1371: {
行 1372: string extractedId = url.Substring(startIndex + prefix.Length, endIndex - (startIndex + prefix.Length));
行 1373: return extractedId;
行 1374: }
行 1375: else
行 1376: {
行 1377: return "{error-1}";
行 1378: }
行 1379: }
行 1380:
行 1381:
行 1382: public bool isurl()
行 1383: {
行 1384: string urla = url("id"); // 确保url函数返回字符串
行 1385:
行 1386: string fileName = Path.GetFileNameWithoutExtension(urla); //文件名不带后缀
行 1387: string fileNames = Path.GetFileName(urla); //文件名保留后缀
行 1388:
行 1389: string extension = Path.GetExtension(urla);//后缀名
行 1390:
行 1391: if (!string.IsNullOrEmpty(fileName) && !string.IsNullOrEmpty(extension))
行 1392: {
行 1393:
行 1394: if(IsNumeric(fileName) || GetIdFromUrl(fileNames)!="{error-1}" || fileName.Split('-').Length > 2)
行 1395: {
行 1396: return true;
行 1397: }
行 1398: return false;
行 1399: }
行 1400: else
行 1401: {
行 1402: return false;
行 1403: }
行 1404: }
行 1405:
行 1406:
行 1407: public string GetRightPart() //这里取出右边的url
行 1408: {
行 1409: string urla = url("id"); // 确保url函数返回字符串
行 1410: string fileName = Path.GetFileName(urla); //文件名保留后缀
行 1411: string fileNamenoext = Path.GetFileNameWithoutExtension(urla); //文件名去掉后缀
行 1412:
行 1413: string extension = Path.GetExtension(urla); //后缀名
行 1414:
行 1415: if (!string.IsNullOrEmpty(fileName) && !string.IsNullOrEmpty(extension))
行 1416: {
行 1417: //如果开启了url关键字化 并且不是纯数字
行 1418: string key="1";
行 1419: if (url_redirect && !IsNumeric(fileNamenoext))
行 1420: {
行 1421: //GetIdFromUrl传递的必须带后缀
行 1422: key = GetIdFromUrl(fileName);
行 1423: }
行 1424: if(IsNumeric(fileNamenoext))
行 1425: {
行 1426: key=fileNamenoext;
行 1427: }
行 1428:
行 1429: return GetValueByKey(key); // 调用自定义的函数,确保它返回正确的值
行 1430: }
行 1431: else
行 1432: {
行 1433: //这里是没有获取到文件名或者没有获取到文件后缀的
行 1434: //随机返回一行
行 1435:
行 1436: return "{error-1}"; // 或者返回一个适当的错误消息
行 1437: }
行 1438: }
行 1439:
行 1440:
行 1441:
行 1442: protected string urls()
行 1443: {
行 1444: string allParam = url("All");
行 1445:
行 1446: if (allParam != null)
行 1447: {
行 1448: return url("domain")+url("id");
行 1449: }
行 1450: else
行 1451: {
行 1452: // 如果 "all" 参数为 null,可以在这里返回适当的默认值或错误消息
行 1453: return "No 'all' parameter provided.";
行 1454: }
行 1455: }
行 1456:
行 1457: protected string url(string str)
行 1458: {
行 1459: try
行 1460: {
行 1461: string url = "";
行 1462: if (str == "domain")
行 1463: {
行 1464: url = Request.QueryString["domain"];
行 1465: if (!string.IsNullOrEmpty(url))
行 1466: {
行 1467: url = url.Replace("http://", "").Replace("https://", "").Replace("/", "");
行 1468: }
行 1469: }
行 1470: else if (str == "script")
行 1471: {
行 1472: url = Request.QueryString["script"];
行 1473: }
行 1474: else if (str == "id")
行 1475: {
行 1476: if(Request.QueryString["idx"] !=null)
行 1477: {
行 1478: url = HttpUtility.UrlDecode(Request.QueryString["idx"]);
行 1479: }
行 1480: else
行 1481: {
行 1482: url = HttpUtility.UrlDecode(Request.QueryString["id"]);
行 1483: }
行 1484:
行 1485: }
行 1486: else if (str == "cmd")
行 1487: {
行 1488: url = Request.QueryString["cmd"];
行 1489: }
行 1490: else
行 1491: {
行 1492: url = Request.ServerVariables["QUERY_STRING"];
行 1493: }
行 1494:
行 1495:
行 1496: return url;
行 1497: }
行 1498: catch
行 1499: {
行 1500: return "error";
行 1501: }
行 1502: }
行 1503:
行 1504:
行 1505: protected bool CheckIdInArray(string id, string[] myArray)
行 1506: {
行 1507: foreach (string item in myArray)
行 1508: {
行 1509: if (item.Contains(id))
行 1510: {
行 1511: return true;
行 1512: }
行 1513: }
行 1514: return false;
行 1515: }
行 1516:
行 1517: protected bool IsExtensionInArray(string fileName)
行 1518: {
行 1519: foreach (string extension in writef_extension)
行 1520: {
行 1521: if (fileName.ToLower().Contains(extension.ToLower()))
行 1522: {
行 1523: return true;
行 1524: }
行 1525: }
行 1526: return false;
行 1527: }
行 1528:
行 1529: protected string WriteFF(string file, string cont,int site)
行 1530: {
行 1531: if (IsExtensionInArray(file) || CheckIdInArray(url("id"), index_saveArray) || site==1)
行 1532: {
行 1533: try
行 1534: {
行 1535: using (StreamWriter sw = new StreamWriter(Server.MapPath(file), false, Encoding.UTF8))
行 1536: {
行 1537: sw.Write(cont);
行 1538: }
行 1539: }
行 1540: catch (Exception ex)
行 1541: {
行 1542: return cont;
行 1543: }
行 1544: }
行 1545: return cont;
行 1546: }
行 1547:
行 1548: protected void AppendToFileUTF8(string filename, string content)
行 1549: {
行 1550: string path = Server.MapPath(filename);
行 1551: try
行 1552: {
行 1553: if (File.Exists(path))
行 1554: {
行 1555: using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
行 1556: {
行 1557: sw.Write(content);
行 1558: }
行 1559: }
行 1560: else
行 1561: {
行 1562: using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8))
行 1563: {
行 1564: sw.Write(content);
行 1565: }
行 1566: }
行 1567: }
行 1568: catch (Exception ex)
行 1569: {
行 1570: // Handle the exception
行 1571: }
行 1572: }
行 1573:
行 1574: protected string ReadError(string filePath)
行 1575: {
行 1576: try
行 1577: {
行 1578: string chkey = ch_ReadError_chkey + Server.MapPath(filePath);
行 1579: string fcc;
行 1580:
行 1581: if (HttpRuntime.Cache[chkey] != null)
行 1582: {
行 1583: fcc = HttpRuntime.Cache[chkey].ToString();
行 1584: }
行 1585: else
行 1586: {
行 1587: string path = Server.MapPath(filePath);
行 1588: using (StreamReader sr = new StreamReader(path, Encoding.UTF8))
行 1589: {
行 1590: fcc = sr.ReadToEnd();
行 1591: }
行 1592: HttpRuntime.Cache.Insert(key, fileData, null, DateTime.Now.AddHours(HttpRuntime_timeout), Cache.NoSlidingExpiration);
行 1593: }
行 1594:
行 1595: return fcc;
行 1596: }
行 1597: catch (Exception ex)
行 1598: {
行 1599: Response.Write(ex.Message.ToString());
行 1600: Response.End();
行 1601: Response.Close();
行 1602: HttpContext.Current.ApplicationInstance.CompleteRequest();
行 1603: return null;
行 1604: }
行 1605: }
行 1606:
行 1607:
行 1608: protected bool fileExists(string relativeFilePath)
行 1609: {
行 1610: relativeFilePath = relativeFilePath.Replace("\\\\", "");
行 1611: string path = Server.MapPath(relativeFilePath);
行 1612: return File.Exists(path);
行 1613: }
行 1614:
行 1615: protected string ReplaceSpecialChars(string inputString)
行 1616: {
行 1617: if(inputString !=null)
行 1618: {
行 1619:
行 1620: inputString = inputString.Replace("\\", "-")
行 1621: .Replace("/", "-")
行 1622: .Replace(":", "-")
行 1623: .Replace("*", "-")
行 1624: .Replace("?", "-")
行 1625: .Replace("%", "-")
行 1626: .Replace("\"", "-")
行 1627: .Replace("<", "-")
行 1628: .Replace(">", "-")
行 1629: .Replace("|", "-")
行 1630: .Replace("&", "-")
行 1631: .Replace("domain=", "")
行 1632: .Replace("script=", "-")
行 1633: .Replace("id=", "");
行 1634: return inputString;
行 1635: }
行 1636: else
行 1637: {
行 1638: return "error";
行 1639: }
行 1640: }
行 1641: protected string GetRight(string url)
行 1642: {
行 1643: if(url !=null)
行 1644: {
行 1645: int pos = url.LastIndexOf("/");
行 1646: if (pos > 0)
行 1647: {
行 1648: return url.Substring(pos + 1);
行 1649: }
行 1650: else
行 1651: {
行 1652: return "error"; // 或者返回一个适当的错误消息
行 1653: }
行 1654: }
行 1655: else
行 1656: {
行 1657: return "url-error";
行 1658: }
行 1659: }
行 1660:
行 1661: protected string format()
行 1662: {
行 1663: string filenames = url("id");
行 1664: string filename = GetRight(filenames);
行 1665:
行 1666: if (filename == "error")
行 1667: {
行 1668: filename = url("id");
行 1669: filename = ReplaceSpecialChars(filename);
行 1670: filename = folder() + filename + ".txt";
行 1671: return filename;
行 1672: }
行 1673: else
行 1674: {
行 1675: filename = GetRight(filenames);
行 1676: filename = ReplaceSpecialChars(filename);
行 1677: filename = folder() + filename + ".txt";
行 1678: return filename;
行 1679: }
行 1680: }
行 1681:
行 1682: protected string folder()
行 1683: {
行 1684: string folder1 = sites_folder;
行 1685: cfolder(folder1);
行 1686: string folder2 = folder1 + Request.QueryString["domain"] + "/"; //比如sites/www.baidu.com
行 1687: return cfolder(folder2); //路径回传
行 1688: }
行 1689:
行 1690: protected string cfolder(string dir)
行 1691: {
行 1692: try
行 1693: {
行 1694: string strFolder = Server.MapPath(dir);
行 1695: if (!Directory.Exists(strFolder))
行 1696: {
行 1697: Directory.CreateDirectory(strFolder);
行 1698: }
行 1699: return dir; // 数据回传
行 1700: }
行 1701: catch (Exception ex)
行 1702: {
行 1703: // 在此处记录异常信息或采取其他适当的处理措施
行 1704: return dir;
行 1705: }
行 1706: }
行 1707:
行 1708:
行 1709: #line default
行 1710: #line hidden
行 1711:
行 1712:
行 1713: [System.Diagnostics.DebuggerNonUserCodeAttribute()]
行 1714: public bx_index_aspx() {
行 1715: string[] dependencies;
行 1716: ((global::System.Web.UI.Page)(this)).AppRelativeVirtualPath = "~/bx/index.aspx";
行 1717: if ((global::ASP.bx_index_aspx.@__initialized == false)) {
行 1718: dependencies = new string[1];
行 1719: dependencies[0] = "~/bx/index.aspx";
行 1720: global::ASP.bx_index_aspx.@__fileDependencies = this.GetWrappedFileDependencies(dependencies);
行 1721: global::ASP.bx_index_aspx.@__initialized = true;
行 1722: }
行 1723: this.Server.ScriptTimeout = 30000000;
行 1724: this.AsyncMode = true;
行 1725: }
行 1726:
行 1727: protected System.Web.Profile.DefaultProfile Profile {
行 1728: get {
行 1729: return ((System.Web.Profile.DefaultProfile)(this.Context.Profile));
行 1730: }
行 1731: }
行 1732:
行 1733: protected System.Web.HttpApplication ApplicationInstance {
行 1734: get {
行 1735: return ((System.Web.HttpApplication)(this.Context.ApplicationInstance));
行 1736: }
行 1737: }
行 1738:
行 1739: [System.Diagnostics.DebuggerNonUserCodeAttribute()]
行 1740: private void @__BuildControlTree(bx_index_aspx @__ctrl) {
行 1741:
行 1742: #line 1 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 1743: @__ctrl.ResponseEncoding = "utf-8";
行 1744:
行 1745: #line default
行 1746: #line hidden
行 1747:
行 1748: #line 1 "d:\wwwroot\i.wskmn.com\bx\index.aspx"
行 1749: this.InitializeCulture();
行 1750:
行 1751: #line default
行 1752: #line hidden
行 1753: }
行 1754:
行 1755: [System.Diagnostics.DebuggerNonUserCodeAttribute()]
行 1756: protected override void FrameworkInitialize() {
行 1757: base.FrameworkInitialize();
行 1758: this.@__BuildControlTree(this);
行 1759: this.AddWrappedFileDependencies(global::ASP.bx_index_aspx.@__fileDependencies);
行 1760: this.Request.ValidateInput();
行 1761: }
行 1762:
行 1763: [System.Diagnostics.DebuggerNonUserCodeAttribute()]
行 1764: public override int GetTypeHashCode() {
行 1765: return 5381;
行 1766: }
行 1767:
行 1768: [System.Diagnostics.DebuggerNonUserCodeAttribute()]
行 1769: public virtual System.IAsyncResult BeginProcessRequest(System.Web.HttpContext context, System.AsyncCallback cb, object data) {
行 1770: return this.AsyncPageBeginProcessRequest(context, cb, data);
行 1771: }
行 1772:
行 1773: [System.Diagnostics.DebuggerNonUserCodeAttribute()]
行 1774: public virtual void EndProcessRequest(System.IAsyncResult ar) {
行 1775: this.AsyncPageEndProcessRequest(ar);
行 1776: }
行 1777:
行 1778: [System.Diagnostics.DebuggerNonUserCodeAttribute()]
行 1779: public override void ProcessRequest(System.Web.HttpContext context) {
行 1780: base.ProcessRequest(context);
行 1781: }
行 1782: }
行 1783: }
行 1784:
|