static void Main(string[] args) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); string requestFileName = "lastrequest.req"; bool debug = false; bool noDelReq = false; string responseDir = Environment.CurrentDirectory; if (args.Length > 0) { foreach (string argItem in args) { if (argItem == "test") { SendMailRemind("TEST body sending mail", "[TEST] subj", MailRecipients); return; } else if (argItem.Contains("@") & argItem.Contains(".")) { if (argItem.IndexOf('@') > 0 & argItem.IndexOf('@') + 1 < argItem.IndexOf('.', argItem.IndexOf('@'))) { MailRecipients.Add(argItem); } } else if (argItem.Contains("request=")) { requestFileName = argItem.Substring(8); } else if (argItem.Contains("responsedir=")) { responseDir = argItem.Substring(12); } else if (argItem == "debug") { debug = true; noDelReq = true; } else if (argItem == "no-del-req") { noDelReq = true; } } } List <IRequest> myReqObjects = new List <IRequest>(); List <IResponse> myRespObjects = new List <IResponse>(); if (File.Exists(requestFileName)) { //myReqObjects.Add(FileIO.LoadMyRequestObjectXML(requestFileName)); // здесь надо загружать объекты запросов из xml. однако, это не работает для интерфейсов. //myReqObjects.Add(myRequestObject.LoadFromXML(requestFileName)); Console.WriteLine("Processing with REQUEST files is not realized yet! Please, remove ARG: \"request=\" or remove FILE \"lastrequest.req\" from DIR: \"" + responseDir + "\""); } else { if (Directory.Exists(responseDir)) { if (debug) { Console.WriteLine("Resp.dir: " + responseDir); } foreach (string item in Directory.GetFiles(responseDir, "*.resp")) { if (debug) { Console.WriteLine("Resp.found: " + item); } IResponse curResp = SFileIO.LoadMyResponse(item); if (curResp != null) { myRespObjects.Add(curResp); if (debug) { Console.WriteLine("Resp.load: " + item); } } else { if (debug) { Console.WriteLine("Resp. NOT load: " + item); } } } foreach (string item in Directory.GetFiles(responseDir, "*.req")) { if (debug) { Console.WriteLine("Req.found: " + item); } IRequest curReq = null; string checkType = ""; using (StreamReader sr = new StreamReader(item)) { sr.ReadLine(); //читаем первую строку "<?xml version="1.0"?>" checkType = sr.ReadLine(); checkType = checkType.Substring(1, checkType.IndexOf(' ') - 1); } //IRequest curReq = myRequestObject.LoadFromXML(item); // здесь надо загружать объекты запросов из xml. однако, это не работает для интерфейсов. //IRequest curReq = FileIO.LoadMyRequestObjectXML(item); //object deserObj = SFileIO.LoadMyRequestObjectXML(item, checkType); switch (checkType) { case "TorgASVRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new TorgiASV.TorgASVRequest(), item); break; case "CenterrRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new CenterRu.CenterrRequest(), item); break; case "ASVorgRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new ASVorgRU.ASVorgRequest(), item); break; case "SberbankAstRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new SberbankAST.SberbankAstRequest(), item); break; case "B2BRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new B2B.B2BRequest(), item); break; case "GPBRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new ETP_GPB.GPBRequest(), item); break; case "UTenderRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new UTender.UTenderRequest(), item); break; case "ZakupkiGovRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new ZakupkiGov.ZakupkiGovRequest(), item); break; case "TekTorgRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new TekTorg.TekTorgRequest(), item); break; case "RosElTorgRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new RosElTorg.RosElTorgRequest(), item); break; case "RTSTenderRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new RTSTender.RTSTenderRequest(), item); break; case "ArrestedLotOnlineRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.ArrestedLotOnlineRequest(), item); break; case "ConfiscateLotOnlineRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.ConfiscateLotOnlineRequest(), item); break; case "FishLotOnlineRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.FishLotOnlineRequest(), item); break; case "LeaseLotOnlineRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.LeaseLotOnlineRequest(), item); break; case "PrivatizationLotOnlineRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.PrivatizationLotOnlineRequest(), item); break; case "RadLotOnlineRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.RadLotOnlineRequest(), item); break; case "TradeLotOnlineRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.TradeLotOnlineRequest(), item); break; case "ZalogLotOnlineRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.ZalogLotOnlineRequest(), item); break; case "LotOnlineGzRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.Gz.LotOnlineGzRequest(), item); break; case "LotOnlineSalesRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.Sales.LotOnlineSalesRequest(), item); break; case "LotOnlineTenderRequest": curReq = ATorgRequest.LoadMyRequestObjectXML(new LotOnline.Tender.LotOnlineTenderRequest(), item); break; default: Console.WriteLine("Unknown request type: " + checkType + " of file: " + item + ". Check necessary DLLs!"); break; } if (curReq != null) { if (debug) { Console.WriteLine("Req.load: " + item); } Console.Write(checkType + " found! Get result.."); myReqObjects.Add(curReq); IResponse newResp = curReq.MakeResponse(); //IResponse newResp = curReq.GetResponse; Console.WriteLine(" SUCCESS"); //newResp.SaveToXml((newResp.SiteName + "_" + newResp.MyRequest.SearchString).Replace(" ", "") + ".resp"); if (!SFileIO.SaveMyResponse(newResp, responseDir + "\\" + (newResp.SiteName + "_" + newResp.MyRequest.SearchString).Replace(" ", "") + ".resp")) { Console.WriteLine("WARNING! Can't save response object"); } if (newResp.ListResponse != null) { if (newResp.ListResponse.Count() > 0) { SendMailRemind(newResp.NewRecordsOutput(null, true), "[" + newResp.SiteName + "] Предложения по новым запросам!", MailRecipients); } else // ответ есть, но пустой { SendMailRemind("Ответ получен, но не содержит результатов! Возможно, по Вашему запросу теперь ничего не найдено. Если на сайте \"" + newResp.SiteName + "(" + newResp.MyRequest.GetSearchUrl() + ")" + "\" по запросу \"" + newResp.MyRequest.AllParametersInString("_") + "\" есть результаты, тогда обратитесь к разработчику!" + Environment.NewLine + "Сообщение об ошибке: " + Environment.NewLine + "WARNING! \"" + newResp.SiteName + "\"", "[" + newResp.SiteName + "] ВНИМАНИЕ! Результаты для НОВОГО запроса не найдены.", MailRecipients); } } else // ответ поломан { string msg = "ERROR! \"" + newResp.SiteName + "\""; if (newResp.LastError() != null) { msg += " : " + newResp.LastError().Message; } if (newResp.MyRequest.LastError() != null) { msg += " : " + newResp.MyRequest.LastError().Message; } Console.WriteLine(msg); SendMailRemind("Ошибка получения результатов НОВОГО запроса!" + Environment.NewLine + "Если на сайте " + newResp.SiteName + "(" + newResp.MyRequest.GetSearchUrl() + ")" + " выдаются результаты по запросу " + newResp.MyRequest.AllParametersInString("_") + ", тогда обратитесь к разработчику!" + Environment.NewLine + "Сообщение об ошибке: " + Environment.NewLine + msg, "[" + newResp.SiteName + "] ОШИБКА!", MailRecipients); } if (!noDelReq) { try { File.Delete(item); } catch (Exception e) { //throw; Console.WriteLine("ERROR: Couldn't delete unused request file: " + item); } } } else { if (debug) { Console.WriteLine("Req. NOT load: " + item); } } } } } if ((myReqObjects.Count == 0) & (myRespObjects.Count == 0)) { Console.WriteLine("I can't work without any Requests or Responses! Bye.."); return; } //AREA requests check { foreach (IRequest item in myReqObjects) { } } // AREA responses re-check { foreach (IResponse oldItem in myRespObjects) //foreach (ATorgResponse oldItem in myRespObjects) { if (debug) { Console.WriteLine("Checking " + oldItem.SiteName + ".."); } IResponse newResp = oldItem.MakeFreshResponse; //ATorgResponse newResp = oldItem.MakeFreshResponse; if (newResp.ListResponse == null) { string msg = "ERROR! \"" + newResp.SiteName + "\""; if (newResp.LastError() != null) { msg += " : " + newResp.LastError().Message; } if (newResp.MyRequest.LastError() != null) { msg += " : " + newResp.MyRequest.LastError().Message; } Console.WriteLine(msg); // здесь надо сохранять ошибку, чтобы на случай повтора ошибки не забивать почту уведомлениями // если ошибка была ранее, то не отправлять уведомление // в случае получения нормального ответа в другом месте удалять файл-флаг ошибки string myExMessage = "Произошла новая ошибка"; if (File.Exists(newResp.SiteName + ".err")) { MyException prevExc = MyException.LoadFromFile(newResp.SiteName + ".err"); if (prevExc != null) { if (prevExc.InnerException.Message == newResp.MyRequest.LastError().Message) { continue; } myExMessage = "Произошла другая ошибка"; } } MyException myExc = new MyException(newResp, myExMessage, newResp.MyRequest.LastError()); myExc.SaveToFile(newResp.SiteName + ".err", true); SendMailRemind("Ошибка получения результатов запроса от площадки! Возможно, сайт недоступен." + Environment.NewLine + "Если на сайте \"" + newResp.SiteName + "(" + newResp.MyRequest.GetSearchUrl() + ")" + "\" по запросу \"" + newResp.MyRequest.AllParametersInString("_") + "\" есть результаты, тогда обратитесь к разработчику!" + Environment.NewLine + "Сообщение об ошибке: " + Environment.NewLine + msg, "[" + newResp.SiteName + "] ОШИБКА!", MailRecipients); } /* * else if (newResp.ListResponse.Count() < 1) * { * string msg = "WARNING! \"" + newResp.SiteName + "\""; * if (newResp.LastError() != null) * msg += " : " + newResp.LastError().Message; * if (newResp.MyRequest.LastError() != null) * msg += " : " + newResp.MyRequest.LastError().Message; * Console.WriteLine(msg); * SendMailRemind("Ответ получен, но не содержит результатов! Возможно, по Вашему запросу теперь ничего не найдено. Если на сайте \"" + newResp.SiteName + "\" по запросу \"" + newResp.MyRequest.AllParametersInString("_") + "\" есть результаты, тогда обратитесь к разработчику!" + Environment.NewLine + "Сообщение об ошибке: " + Environment.NewLine + msg, "[" + newResp.SiteName + "] ВНИМАНИЕ! Получен пустой ответ.", MailRecipients); + } */ else if (newResp.HaveNewRecords(oldItem)) { if (File.Exists(newResp.SiteName + ".err")) { try { File.Delete(newResp.SiteName + ".err"); } catch (Exception e) { Console.WriteLine("WARNING! Couldn't delete file \"" + newResp.SiteName + ".err ! Error message: " + e.Message); //throw; } } Console.WriteLine("Found changes for \"" + newResp.SiteName + "\"!"); newResp.SaveToXml(responseDir + "\\" + (newResp.SiteName + "_" + newResp.MyRequest.SearchString).Replace(" ", "") + ".resp", true); if (newResp.ListResponse.Count() < 1) { // исчезли старые записи SendMailRemind("Ответ получен, но не содержит результатов! Возможно, по Вашему запросу теперь ничего не найдено. Если на сайте \"" + newResp.SiteName + "(" + newResp.MyRequest.GetSearchUrl() + ")" + "\" по запросу \"" + newResp.MyRequest.AllParametersInString("_") + "\" есть результаты, тогда обратитесь к разработчику!" + Environment.NewLine + "Сообщение об ошибке: " + Environment.NewLine + "WARNING! \"" + newResp.SiteName + "\"", "[" + newResp.SiteName + "] ВНИМАНИЕ! Получен пустой ответ.", MailRecipients); } else { // появились новые записи SendMailRemind(newResp.NewRecordsOutput(oldItem, true), "[" + newResp.SiteName + "] Произошли изменения!", MailRecipients); } } else { if (File.Exists(newResp.SiteName + ".err")) { try { File.Delete(newResp.SiteName + ".err"); } catch (Exception e) { Console.WriteLine("WARNING! Couldn't delete file \"" + newResp.SiteName + ".err ! Error message: " + e.Message); //throw; } SendMailRemind("Работа сайта \"" + newResp.SiteName + "\" восстановлена." + Environment.NewLine + "Однако, \" по запросу \"" + newResp.MyRequest.AllParametersInString("_") + "\" новых результатов не обнаружено!" + Environment.NewLine + "В случае появления новых результатов, Вы получите уведомление в обычном режиме.", "[" + newResp.SiteName + "] РАБОТА ВОЗОБНОВЛЕНА", MailRecipients); } if (debug) { Console.WriteLine("Recieved " + newResp.ListResponse.Count() + " items"); } Console.WriteLine(newResp.SiteName + ": Nothing new.."); } } } Console.WriteLine("Well done!"); }
public override IResponse LoadFromXml(string fileName = "lastrequest.req") { return(SFileIO.LoadMyResponse(fileName)); }
static void Main(string[] args) { string requestFileName = "lastrequest.req"; string responseDir = Environment.CurrentDirectory; if (args.Length > 0) { foreach (string argItem in args) { if (argItem == "test") { SendMailRemind("TEST body sending mail", "[TEST] subj", MailRecipients); return; } else if (argItem.Contains("@") & argItem.Contains(".") & argItem.IndexOf('@') > 0 & argItem.IndexOf('@') + 1 < argItem.IndexOf('.', argItem.IndexOf('@'))) { MailRecipients.Add(argItem); } else if (argItem.Contains("request=")) { requestFileName = argItem.Substring(7); } else if (argItem.Contains("responsedir=")) { responseDir = argItem.Substring(11); } } } List <IRequest> myReqObjects = new List <IRequest>(); List <IResponse> myRespObjects = new List <IResponse>(); //string checkDate; if (File.Exists(requestFileName)) { //myReqObjects.Add(FileIO.LoadMyRequestObjectXML(requestFileName)); // здесь надо загружать объекты запросов из xml. однако, это не работает для интерфейсов. //myReqObjects.Add(myRequestObject.LoadFromXML(requestFileName)); } else { if (Directory.Exists(responseDir)) { foreach (string item in Directory.GetFiles(responseDir, "*.resp")) { IResponse curResp = SFileIO.LoadMyResponse(item); if (curResp != null) { myRespObjects.Add(curResp); } } foreach (string item in Directory.GetFiles(responseDir, "*.req")) { IRequest curReq = null; //IRequest curReq = myRequestObject.LoadFromXML(item); // здесь надо загружать объекты запросов из xml. однако, это не работает для интерфейсов. //IRequest curReq = FileIO.LoadMyRequestObjectXML(item); if (curReq != null) { myReqObjects.Add(curReq); } } } // need looking for saved last responses } if (myRespObjects.Count == 0) { if (myReqObjects.Count == 0) { Console.WriteLine("I can't work without any Requests or Responses! Bye.."); return; } else { foreach (IRequest item in myReqObjects) { IResponse newResp = item.MakeResponse(); newResp.SaveToXml(newResp.SiteName.Replace(" ", "") + ".resp"); SendMailRemind(newResp.NewRecordsOutput(null, true), "[" + newResp.SiteName + "] Появились новые предложения!", MailRecipients); } } } else { foreach (IResponse oldItem in myRespObjects) { IResponse newResp = oldItem.MakeFreshResponse; if (newResp.HaveNewRecords(oldItem)) { newResp.SaveToXml(newResp.SiteName.Replace(" ", "") + ".resp"); SendMailRemind(newResp.NewRecordsOutput(oldItem, true), "[" + newResp.SiteName + "] Появились новые предложения!", MailRecipients); } } } /* * // Сделать новый запрос по умолчанию, или сообщить об отсутствии запроса и выйти. * myRequestObject = new CenterrRequest(); * //Запрос АСВ по имуществу ПРБ в отношении ПИРИТ * myRequestObject.ResetParameters(); * myRequestObject.MyParameters["Party_contactName"] = "асв"; * myRequestObject.MyParameters["vPurchaseLot_fullTitle"] = ""; * myRequestObject.MyParameters["vPurchaseLot_lotTitle"] = ""; * //myRequestObject.SaveToXml(myRequestObject.CreateFileName(true)); * myRequestObject.SaveToXml(myRequestObject.ToString() + ".req"); */ //SaveMyRequestObjectXML(myRequestObject, "lastrequest.req"); /* * myRequestObject.SaveToXml("lastrequest.req"); * * IResponse curData; * IResponse checkData = null;// = LoadMyCenterrObject(GenerateFileName(myRequestObj)); * if (File.Exists(myRequestObject.ToString() + ".obj")) * checkData = checkData.LoadFromXml(myRequestObject.ToString() + ".obj"); * * if (checkData is CenterrResponse) * curData = new CenterrResponse((CenterrRequest)myRequestObject); * else if (checkData is ASVResponse) * curData = new ASVResponse((ASVRequest)myRequestObject); * else * curData = null; * * if (curData != null) * if (curData.HaveNewRecords(checkData)) * SendMailRemind(curData.NewRecordsOutput(checkData, true), "[curData.SiteName] Появились новый предложения!"); */ Console.WriteLine("Well done!"); //Console.ReadKey(); }