/// <summary> /// 書き込み履歴を書き込みます /// </summary> /// <param name="r">書き込むレス</param> /// <param name="td">書き込むスレッドの情報</param> /// <param name="ss">設定データを表します</param> public void Write(Chron.ThreadOrResData.Res r, Chron.ThreadOrResData.ThreadData td, Setting.SettingSerial ss) { if (!ss.IsSaveWriteRecord) { return; } VIPBrowserLibrary.Common.BBSType bt; VIPBrowserLibrary.Common.Type t; VIPBrowserLibrary.Common.TypeJudgment.AllJudg(td.ThreadAddress, out bt, out t); string readUrl = String.Empty; if (t == VIPBrowserLibrary.Common.Type.thread) { readUrl = VIPBrowserLibrary.Common.URLParse.DatToReadcgi(td.ThreadAddress, bt); } else { readUrl = td.ThreadAddress; } StringBuilder sb = new StringBuilder(); sb.AppendLine("--------------------------------------------"); sb.Append("Date\t:").AppendLine(DateTime.Now.ToString("yy/MM/dd HH:mm:ss")); sb.Append("Subject\t:").AppendLine(td.ThreadName); sb.Append("URL\t:").AppendLine(readUrl); sb.Append("FROM\t:").AppendLine(r.Name); sb.Append("MAIL\t:").AppendLine(r.Mail); sb.AppendLine(); sb.AppendLine(r.Sentence).AppendLine().AppendLine(); Utility.TextUtility.Write(gs.CurrentDirectory + "\\kakikomi.txt", sb.ToString(), true); }
/// <summary> /// Dictionary形式のレスデータをRes構造体に変換します /// </summary> /// <param name="data">変換するデータ</param> /// <param name="bt">変換元の板の帰属元</param> /// <returns>変換したRes構造体</returns> public Chron.ThreadOrResData.Res ParseDictionaryToRes(Dictionary <string, string> data, VIPBrowserLibrary.Common.BBSType bt) { Chron.ThreadOrResData.Res r; switch (bt) { case VIPBrowserLibrary.Common.BBSType._2ch: { r = new Chron.ThreadOrResData.Res(1, data["FROM"], data["mail"], data["MESSAGE"], "SampleID", "2013/11/16 21:47:59.02", "BE", true); } break; case VIPBrowserLibrary.Common.BBSType.jbbs: { r = new Chron.ThreadOrResData.Res(1, data["NAME"], data["MAIL"], data["MESSAGE"], "SampleKey", "2013/11/16 21:47:59.02", "BE", true); } break; case VIPBrowserLibrary.Common.BBSType.machibbs: { throw new NotSupportedException(); //r = new Chron.ThreadOrResData.Res(0, data[""], data[""], data[""], data[""], data[""], data[""], true); } default: throw new ArgumentException(); } return(r); }
private string GetResponses(Regex re) { resCount++; Console.WriteLine("Start Response Analysis"); if (Url == null) { throw new ArgumentNullException("取得先のURLが指定されていません"); } if (Url == String.Empty) { throw new ArgumentException("取得先のURLは無効です"); } //strb.Clear(); id.Clear(); VIPBrowserLibrary.BBS.Common.HttpClient hc = new Common.HttpClient(Url); string getData = GetData = hc.GetStringSync(); if (!System.IO.Directory.Exists(gs.DatFilePath + "\\" + DatFolder)) { System.IO.Directory.CreateDirectory(gs.DatFilePath + "\\" + DatFolder); } Utility.TextUtility.Write(gs.DatFilePath + "\\" + DatFolder + "\\" + DatKey + ".dat", getData, false); //Utility.TextUtility.Write(gs.DatFilePath + "\\" + datFolder + "\\" + datKey + ".idx", getData, false); getData = Regex.Replace(getData, @"[<]a href.{1,100}\starget=""_blank""[>]", "", RegexOptions.Compiled).Replace("</a>", ""); MatchCollection mc = re.Matches(getData); StringBuilder sb = new StringBuilder("<html><head></head><body><font face=\"MS Pゴシック\">\n<dl>\n"); foreach (Match ids in mc) { string idData = ids.Groups["ID"].Value; if (id[idData] == null) { id.Add(idData, new int[] { 0, 1 }); } else { ((int[])id[idData])[1] = ((int[])id[idData])[1] + 1; } } threadName = mc[0].Groups["threadName"].Value; r = new Chron.ThreadOrResData.Res[mc.Count]; foreach (Match m in mc) { string idData = m.Groups["ID"].Value; ((int[])id[idData])[0] = ((int[])id[idData])[0] + 1; string idString; string data = ((int[])id[idData])[0] + "/" + ((int[])id[idData])[1]; if (((int[])id[idData])[1] > 1) { //idString = "<span style='color:#00F; text-decoration:underline;'>" + idData + "</span>" + " [" + ((int[])id[idData])[0] + "/" + ((int[])id[idData])[1] + "]"; idString = String.Format(@"<a href=""method:Extract($3,{0})"" style=""color:black;"" target=""_blank"">{0}</a>({1})", idData, data); } else if (((int[])id[idData])[1] > 3) { // idString = "<span style='color:#F00; text-decoration:underline;'>" + idData + "</span>" + " [" + ((int[])id[idData])[0] + "/" + ((int[])id[idData])[1] + "]"; idString = String.Format(@"<a href=""method:Extract($3,{0})"" style=""color:black;"" target=""_blank"">{0}</a>({1})", idData, data); } else if (((int[])id[idData])[1] == 1) { // idString = "<span style='color:#000; text-decoration:underline;'>" + idData + "</span>" + " [" + ((int[])id[idData])[0] + "/" + ((int[])id[idData])[1] + "]"; idString = String.Format(@"<a href=""method:Extract($3,{0})"" style=""color:black;"" target=""_blank"">{0}</a>({1})", idData, data); } else { idString = "<span style='color:#000; text-decoration:underline;'>" + idData + "</span>"; } //if (idData.Length <= 8) //{ // idString = "<span style='color:#000; text-decoration:underline;'>" + idData + "</span>"; //} string mail; Match mmm = new Regex(@"(?<date>.*)", RegexOptions.Compiled).Match(m.Groups["mail"].Value); if (mmm.Success) { mail = mmm.Groups["date"].Value; mail = mail.Replace("sage", "↓"); } else { mail = m.Groups["mail"].Value; } string sentenceData = m.Groups["sentence"].Value; sentenceData = Regex.Replace(sentenceData, @">>(?<res>\d+)", (d) => { return("<a href=\"#\">>>" + d.Groups["res"].Value + "</a>"); }); r[resCount - 1] = new Chron.ThreadOrResData.Res(resCount, m.Groups["name"].Value, m.Groups["mail"].Value, m.Groups["sentence"].Value, m.Groups["ID"].Value.Replace("ID:", "").Replace("発信元", ""), m.Groups["date"].Value, String.Empty, true); sb.Append("<dt id=\"s").Append(resCount).Append("\" class=\"\">"); sb.Append("<indices id=\"").Append(resCount).Append("\"></indices>"); sb.AppendFormat(@"<b><a href=""menu:{0}"" name=""{0}"" target=""_blank"">{0}</a></b>", resCount); sb.AppendFormat(@" 名前:<font color=""green""><b>{0}</b></font>", m.Groups["name"].Value); sb.AppendFormat(@" [{0}] ", mail); sb.AppendFormat(@"投稿日:{0} ", m.Groups["date"].Value); sb.Append(/*@"<a href=""method:Extract($3,{0})"" style=""color:black;"" target=""_blank"">{1}</a>", idData, */ idString); sb.AppendFormat(@" <a href=""method:Extract($5,)"" style=""color:black;"" target=""_blank""></a> </dt><dd>{0}<br><br></dd>", sentenceData); sb.AppendLine(); resCount++; } sb.Append("</html>"); resCount = 0; string datFile = sb.ToString(); sb.Clear(); Console.WriteLine("End the Res Analysis"); return(datFile); }