public void Execute(IJobExecutionContext context) { using (RSSNewsContext db = new RSSNewsContext()) { SourcesXMLHandler xml = new SourcesXMLHandler(context.JobDetail.JobDataMap.GetString("XMLPath")); var approvedSources = xml.GetEntries(); if (approvedSources == null) { return; } // Delete sources not in XML var ToDel = db.Sources.ToList().Where(n => !approvedSources.Exists(a => a.Address == n.Address)); if (ToDel.Count() > 0) { db.Sources.RemoveRange(ToDel); db.SaveChanges(); } // Add sources and Modify categories if needed db.Sources.AddOrUpdate(p => p.Address, approvedSources.Select(n => new Source { Address = n.Address, Category = n.Category }).ToArray()); db.SaveChanges(); } }
public void AcquireNewsForSource(Source source) { XElement root = XElement.Load(source.Address); //http://www.komputerswiat.pl/rss-feeds/komputer-swiat-feed.aspx //http://www.tvn24.pl/najnowsze.xml var rssItems = root.Descendants("item").Select(n => new News { Title = n.Element("title").Value, Description = n.Element("description").Value, Category = n.Element("category")?.Value ?? "None", Link = n.Element("link").Value, PubDate = DateTime.Parse(n.Element("pubDate").Value, System.Globalization.CultureInfo.InvariantCulture), //, System.Globalization.CultureInfo.InvariantCulture Source = source //db.Sources.First(m => m.Address == source) }).OrderByDescending(n => n.PubDate).ToList(); var NewestRssItem = db.News.Where(n => n.Source.Address == source.Address).OrderByDescending(n => n.PubDate).FirstOrDefault(); if (NewestRssItem == null) { db.News.AddRange(rssItems); } else { int i = 0; while (i < rssItems.Count && NewestRssItem.PubDate < rssItems[i].PubDate) { db.News.Add(rssItems[i]); i++; } } //foreach (var item in rssItems) //{ // if (!db.News.Any(n => n.Title == item.Title)) // { // db.News.Add(item); // } //} db.SaveChanges(); }
public void Execute(IJobExecutionContext context) { using (RSSNewsContext db = new RSSNewsContext()) { DateTime maxDateOk = DateTime.UtcNow.AddDays(-(Int32.Parse(ConfigurationManager.AppSettings["DaysTillOldNews"]))); var ToDel = db.News.Where(n => n.PubDate < maxDateOk); if (ToDel.Count() > 0) { db.News.RemoveRange(ToDel); db.SaveChanges(); } List <News> Replaced = new List <News>(); foreach (var newsItem in db.News) { Replaced.AddRange(db.News.Where(n => n.Title == newsItem.Title && n.PubDate < newsItem.PubDate)); } if (Replaced.Count > 0) { db.News.RemoveRange(Replaced); db.SaveChanges(); } } }