예제 #1
0
        private static void SaveNotExistSource(string source, string url)
        {
            RSSContext db           = new RSSContext();
            var        addingSource = db.RSSSources.FirstOrDefault(s => s.Name == source);

            if (addingSource == null)
            {
                db.RSSSources.Add(new RSSSource()
                {
                    Name = source,
                    URL  = url
                });
                db.SaveChanges();
            }
        }
예제 #2
0
        private static List <RSSFeed> GetFeed(string url, string sourceName)
        {
            SaveNotExistSource(sourceName, url);
            RSSContext db     = new RSSContext();
            var        result = new List <RSSFeed>();

            XmlReader       xmlReader;
            var             webRequest = HttpWebRequest.Create(url) as HttpWebRequest;
            SyndicationFeed feed;

            using (var response = (HttpWebResponse)webRequest.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    var stream = new MemoryStream();
                    var writer = new StreamWriter(stream);
                    writer.Write(reader.ReadToEnd().TrimStart('\n'));
                    writer.Flush();
                    stream.Position = 0;
                    xmlReader       = XmlReader.Create(stream);
                    feed            = SyndicationFeed.Load(xmlReader);
                    xmlReader.Close();
                    stream.Close();
                }
            }

            foreach (var item in feed.Items)
            {
                result.Add(new RSSFeed()
                {
                    Name        = item.Title.Text,
                    PublishDate = item.PublishDate.DateTime,
                    Description = Regex.Replace(item.Summary.Text, @"<[^>]*>", String.Empty),
                    URL         = item.Id,
                    RSSSourceId = db.RSSSources.FirstOrDefault(f => f.Name == sourceName).Id
                });
            }
            return(result);
        }
예제 #3
0
        private static void SaveNotExistFeeds(string url, string source)
        {
            var            readFeeds = GetFeed(url, source);
            List <RSSFeed> saveFeeds = null;
            RSSContext     db        = new RSSContext();

            try
            {
                saveFeeds = db.RSSFeeds.Where(f => f.RSSSource.Name == source).ToList();
                foreach (var feed in readFeeds)
                {
                    if (saveFeeds == null || saveFeeds.FirstOrDefault(f => f.Name == feed.Name && f.PublishDate == feed.PublishDate) == null)
                    {
                        db.RSSFeeds.Add(feed);
                    }
                }
                Console.WriteLine(string.Format("Прочитано {0} новостей из {1}, сохранено {2}", readFeeds.Count, source, db.SaveChanges()));
            }
            catch (Exception e)
            {
                Console.WriteLine(string.Format("Ошибка загрузки новостей из {0}", source));
            }
        }