예제 #1
0
        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();
            }
        }
예제 #2
0
        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();
        }
예제 #3
0
        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();
                }
            }
        }