/// <summary> /// GetRss /// </summary> /// <returns></returns> private static bool GetRss() { try { #region インスタンス等設定 var req = WebRequest.Create(Constants.RssURL) as HttpWebRequest; req.UserAgent = Constants.UserAgent; req.Accept = Constants.Accept; req.CookieContainer = new CookieContainer(); req.CookieContainer .Add((new CookieContainer()) .GetCookies(req.RequestUri)); #endregion #region 取得し、ファイルに仮保存する using (var res = (HttpWebResponse)req.GetResponse()) using (var resSt = res.GetResponseStream()) using (var sr = new StreamReader(resSt, Encoding.UTF8)) { if (File.Exists(Constants.WorkRssFileName) == false) { try { File.AppendAllText( path: Constants.WorkRssFileName, contents: sr.ReadToEnd(), encoding: Encoding.UTF8); } catch (Exception ex) { var ew = new ErrorWriter(); ew.Write(ex); ew.Message(); } } } #endregion req = null; return(true); } catch (Exception ex) { var ew = new ErrorWriter(); ew.Write(ex); ew.Message(); return(false); } }
/// <summary> /// btnDetail_Click /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDetail_Click(object sender, RoutedEventArgs e) { try { int count = int.Parse(Convert.ToString(((Button)sender).Tag)); var row = dataSource[count]; System.Diagnostics.Process.Start(@"chrome.exe", row.Link); } catch (Exception ex) { var ew = new ErrorWriter(); ew.Write(ex); ew.Message(); } }
/// <summary> /// ProcessRss /// </summary> /// <returns></returns> private bool CheckAndProcessRss() { #region ファイル存在チェック if (File.Exists(Constants.RssFileName) == false) { var ew = new ErrorWriter(); ew.Write(new Exception(Constants.SystemMessageNotExistFileError)); ew.Message(); return(false); } #endregion #region 数宣言&チェック var originData = XElement.Load(Constants.RssFileName); var elementChannel = originData.Element(Constants.RssElementChannel) .Elements(Constants.RssElementItem); #region 更新の是非チェック //#region MyRegion ////var ptData = ((sv.Content) as DockPanel); //if (DataSource != null) //{ // if (DataSource.Count() != 0 // && DateTime.Parse(DataSource.FirstOrDefault().PubDate.Replace(" JST", "")) // .CompareTo(DateTime.Parse(elementChannel // .LastOrDefault() // .Element(Constants.RssElementPubDate) // .Value.Replace(" JST", ""))) != -1) // { // return false; // } //} //#endregion #endregion 更新の是非チェック RssDetail work = null; //int getAmount = DataSource == null ? Constants.DefaultRowCount int getAmount = DataSource == null ? maxRowCount : DataSource.Count; DataSource = new ObservableCollection <RssDetail>(); #endregion 数宣言&チェック #region クラス化 foreach (var item in elementChannel .Reverse() .Skip(nowBlock) .Take(getAmount) ) { try { work = new RssDetail(); #region check&save #region ID { { var result = item.Element(Constants.RssElementPubDate); if (result != null && result.IsEmpty == false) { DateTime id = DateTime.Parse(item.Element(Constants.RssElementPubDate).Value.Replace(" JST", string.Empty)); work.ID = string.Concat(id.Year.ToString("0000") , id.Month.ToString("00") , id.Day.ToString("00") , id.Hour.ToString("00") , id.Minute.ToString("00") , id.Second.ToString("00")); } } } #endregion #region Title { var result = item.Element(Constants.RssElementTitle); if (result != null && result.IsEmpty == false) { work.Title = item.Element(Constants.RssElementTitle).Value; } } #endregion #region PubDate { var result = item.Element(Constants.RssElementPubDate); if (result != null && result.IsEmpty == false) { work.PubDate = item.Element(Constants.RssElementPubDate).Value; } } #endregion #region categories { var result = item.Elements(Constants.RssElementCategories); if (result != null && result.Count() > 0) { foreach (var nowCategories in result) { if (nowCategories.IsEmpty == false) { work.categories.Add(nowCategories.Value); } } } } #endregion #region Description { var result = item.Element(Constants.RssElementDescription); if (result != null && result.IsEmpty == false) { work.Description = item.Element(Constants.RssElementDescription).Value; if (this.newLine == true) { work.Description = work.Description .Replace(Environment.NewLine, string.Empty) .Replace("\r", string.Empty) .Replace("\n", string.Empty); } } } #endregion #region Link { var result = item.Element(Constants.RssElementLink); if (result != null && result.IsEmpty == false) { work.Link = item.Element(Constants.RssElementLink).Value; } } #endregion #endregion check&save DataSource.Add(work); } catch (Exception ex) { var ew = new ErrorWriter(); ew.Write(ex); ew.Message(); } } #endregion クラス化 #region 成否判定 //失敗用クラスを作ってもいいかもしれない if (DataSource == null || DataSource.Count == 0) { return(false); } return(true); #endregion }
/// <summary> /// UpdateRssData /// <para>This method Update XMLData.</para> /// <para>UserAgentを指定し、確実に情報を取得する</para> /// </summary> /// <returns></returns> private bool UpdateRssData() { #region Get Rss if (GetRss() == false) { return(false); } #endregion Get Rss #region 本番データが無い場合、最も高い可能性は初回の実行と推測される if (File.Exists(Constants.RssFileName) == false) { try { File.Move(Constants.WorkRssFileName, Constants.RssFileName); } catch (Exception ex) { var ew = new ErrorWriter(); ew.Write(ex); ew.Message(); return(false); } return(true); } #endregion 本番データが無い場合で最も高い可能性は初回の実行と推測される #region Check&Save try { #region Load及びItem取得 var workData = XElement.Load(Constants.WorkRssFileName); var workElementChannel = workData.Element(Constants.RssElementChannel); var originData = XElement.Load(Constants.RssFileName); var originElementChannel = originData.Element(Constants.RssElementChannel); #endregion Load及びItem取得 #region 最新日比較 //仮じゃないファイル最新Itemの日付と、仮ファイルの最新日を見ていく。 var workDataItems = workElementChannel .Elements(Constants.RssElementItem) .OrderBy(x => DateTime.Parse(x.Element(Constants.RssElementPubDate).Value.Replace(" JST", string.Empty))); var originDataFirst = originElementChannel .Elements(Constants.RssElementItem) .OrderByDescending(x => DateTime.Parse(x.Element(Constants.RssElementPubDate).Value.Replace(" JST", string.Empty))) .FirstOrDefault(); { DateTime?work = null; DateTime?origin = DateTime.Parse(originDataFirst.Element(Constants.RssElementPubDate).Value.Replace(" JST", string.Empty)); try { foreach (var nowItem in workDataItems) { work = DateTime.Parse(nowItem.Element(Constants.RssElementPubDate).Value.Replace(" JST", string.Empty)); switch (work.Value.CompareTo(origin)) { case -1: case 0: default: continue; case 1: originElementChannel.Add(nowItem); break; } } } catch (Exception ex) { var ew = new ErrorWriter(); ew.Write(ex); ew.Message(); } } #endregion 最新日比較 #region 保存と削除 originData.Save(Constants.RssFileName, SaveOptions.OmitDuplicateNamespaces); if (File.Exists(Constants.WorkRssFileName) == true) { try { File.Delete(Constants.WorkRssFileName); } catch (Exception ex) { var ew = new ErrorWriter(); ew.Write(ex); ew.Message(); return(false); } return(true); } #endregion 保存と削除 return(true); } catch (Exception ex) { var ew = new ErrorWriter(); ew.Write(ex); ew.Message(); return(false); } #endregion Check&Save }