public void SetNewsFileName(string fileName) { if (string.IsNullOrEmpty(fileName)) { return; } robotNews = RobotNews.LoadFromFile(fileName); AddPendingMessage(string.Format("Прочитано новостей: {0} из {1}", robotNews.Count, fileName)); }
private void SaveNewsButtonClick(object sender, EventArgs e) { var saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Текстовый файл (*.txt)|*.txt"; if (saveFileDialog.ShowDialog(MainForm.Instance) == DialogResult.Cancel) { return; } RobotNews.SaveToFile(saveFileDialog.FileName, robotNews); }
public static List<RobotNews> GrabNews(DateTime dateTime, out List<string> error) { var result = new List<RobotNews>(); error = new List<string>(); var startdt = DateTime.Parse("01/01/1970"); var requestDate = dateTime.Date; var span = requestDate.Subtract(startdt); var secs = span.TotalSeconds; var myWebRequest = WebRequest.Create("http://www.alpari.ru/ru/analytics/calendar/data/list/?lang=ru&timeZone=4&time=" + secs); var myWebResponse = myWebRequest.GetResponse(); if (myWebResponse == null) { error.Add(DateTime.Now + ": server not responding (WebRequest.GetResponse() = null)"); return result; } var stream = myWebResponse.GetResponseStream(); if (stream == null) { error.Add(DateTime.Now + ": internal error (WebResponse.GetResponseStream() = null)"); return result; } string srcStr; using (var sr = new StreamReader(stream, Encoding.UTF8)) srcStr = sr.ReadToEnd(); stream.Close(); var rowPos = 0; while (true) { var row = GetTagData(srcStr, "tr", ref rowPos); if (row == null) break; var news = new RobotNews(); var addNews = true; var cellPos = 0; for (var column = 0; column < 7; column++) { var cell = GetTagData(row, "td", ref cellPos); if (cell == null) { error.Add(string.Format("news parse error at {0}: incomplete data ({1})", requestDate, news)); addNews = false; break; } cellPos += cell.Length; var internalPos = 0; var txt = GetTagData(cell, "div", ref internalPos); if (txt != null) cell = txt; internalPos = 0; txt = GetTagData(cell, "strong", ref internalPos); if (txt != null) { cell = txt; news.Valuable = true; } var completeText = GetTagText(cell).Trim(); double? value; if (completeText == "") // skip empty cells { addNews = false; continue; } switch (column) { case 0: if (completeText.Contains("–")) // skip date period addNews = false; else try { news.Time = requestDate + TimeSpan.Parse(completeText); } catch // (Exception e) { //Console.WriteLine("{0}\n{1}\n{2}", e, completeText, cell); error.Add(string.Format("news parse error at {0}: bad date format ({1}, {2})", requestDate, completeText, news)); addNews = false; continue; } break; case 1: news.CountryCode = completeText; break; case 2: news.Title = completeText; break; case 5: if (completeText == "—") addNews = false; else { value = GetFirstWordAsDouble(completeText); if (value == null) { error.Add(string.Format("news parse error at {0}: bad number format ({1}, {2})", requestDate, completeText, news)); addNews = false; } else news.ProjectedValue = value.Value; } break; case 6: if (completeText == "—") addNews = false; else { value = GetFirstWordAsDouble(completeText); if (value == null) { error.Add(string.Format("news parse error at {0}: bad number format ({1}, {2})", requestDate, completeText, news)); addNews = false; } else news.Value = value.Value; } break; } } if (addNews) result.Add(news); rowPos += row.Length; } return result; }