Ejemplo n.º 1
0
        static public string LoadFeed(int ChID)
        {
        dataContext db = new dataContext();  // конектимся к базе 
            int countLoad = 0;//счилает кол-во обработаных записей
            int countRec = 0;// переменная считает кол-во добавленных
            Chanel Chanel = db.Chanel.Find(ChID); // выбираем канал
            try
            {
                string Url = Chanel.link;            // поучаем адресс канала

                // string Url = "http://lenta.ru/rss";  // пробная строка если аза не работает

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);  // получение xml файла с RSS лентой
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader RssStream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);


                XmlDocument TempXml = new XmlDocument(); // загружаем поток 
                TempXml.Load(RssStream);
                RssStream.Close(); //закрываем поток

                List<News> NewsList = new List<News>();//создаем список новостей

                List<Category> Category = new List<Category>();// создаем список категорий
                
                XmlNodeList List = TempXml.GetElementsByTagName("item");// создаем список элечентов из XML файла

                
                foreach (XmlNode Item in List) //обрабатываем каждый элемент
                {
                    countLoad++;
                    NewsList = db.News.ToList();
                    Category = db.Category.ToList();
                    News TempNews = new News();// создаем место для хранения записей

                    TempNews.category = "Новости";       // любая запись изначально будет иметь категорию новости т.к. бывают пустые категории
                    TempNews.ChanelID = Chanel.ChanelID;
                    TempNews.CategoryID = 1;
                    foreach (XmlElement element in Item)
                    {
                        switch (element.Name)
                        {
                            case "title":
                                TempNews.title = element.InnerText;
                                continue;
                            case "link":
                                TempNews.link = element.InnerText;
                                continue;
                            case "description":
                                TempNews.Description = element.InnerText;
                                continue;
                            case "pubDate":
                                TempNews.pubDate = DateTime.Parse(element.InnerText);
                                continue;
                            case "category":
                                {
                                    if ((element.InnerText == "") || (element.InnerText == " "))
                                    {
                                    }
                                    else
                                    {
                                        bool Chek = true;// маркер существования категории записи
                                        foreach (Category cat in Category)
                                        {
                                            if (cat.category == element.InnerText)//если такая категория существует устанавливаем ID этой категории и меняем маркер
                                            {
                                                TempNews.CategoryID = cat.CategoryID;
                                                Chek = false;
                                                continue;
                                            }
                                        }
                                        if (Chek) //если маркер не изменился записываем категорию 
                                        {
                                            db.Category.Add(new Category { category = element.InnerText });
                                            db.SaveChanges();
                                            TempNews.CategoryID = db.Category.Count();
                                        }
                                        TempNews.category = element.InnerText;
                                        
                                    }
                                    continue;
                                }
                        }
                    }
                   
                    

                    bool Check = true; // устанавливаем маркер добавления записи 

                        foreach (News node in NewsList) //проверка существования такой новости в базе 
                        {
                            if (node.title == TempNews.title)// проверяем новости по заголовку
                            {
                                if (node.Description == TempNews.Description)// проверяем соответствие содержания
                                {
                                    Check = false;// устанавливаем маркер
                                    continue; // покидаем цикл проверки
                                }
                                db.News.Remove(node); // если текст новости не совпадает удаляем старую запись
                                db.News.Add(TempNews);   //добавляем новую
                                db.SaveChanges();
                                Check = false; // устанавливаем маркер
                                continue; // покидаем цикл проверки
                            }
                        }


                    if (Check)// проверяем маркер если условие верно добавляем запись
                    {
                        countRec++; // счетчик добавленных записей
                        db.News.Add(TempNews);
                        db.SaveChanges();
                    }
                       


                

                      
                }
            }

            catch (Exception)
            {
                
                return "Failed"; // возвращаем при получении любой ошибки

            }
            
           
            String Mess = "From "+Chanel.name+" chanel "+countLoad+" was processed, "+countRec+" new records was added.";
            return Mess;    
            
                
        }
Ejemplo n.º 2
0
        static public void UpdateNews() // обновляет новости?
        {
            dataContext db = new dataContext();
            foreach (Chanel Chanel in db.Chanel.ToList())
            {
                int countLoad = 0;//счилает кол-во обработаных записей
                int countRecords = 0;// переменная считает кол-во добавленных новостей
                int countCategories = 0;// переменная считает кол-во добавленных категорий
                string Url = Chanel.link;            // поучаем адресс канала
                try
                {

                    // string Url = "http://lenta.ru/rss";  // пробная строка если аза не работает

                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);  // получение xml файла с RSS лентой
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    StreamReader RssStream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);


                    XmlDocument TempXml = new XmlDocument(); // загружаем поток 
                    TempXml.Load(RssStream);
                    RssStream.Close(); //закрываем поток


                    List<News> NewsList = new List<News>();//создаем список новостей
                    List<Category> Category = new List<Category>();// создаем список категорий

                    XmlNodeList List = TempXml.GetElementsByTagName("item");// создаем список элечентов из XML файла


                    foreach (XmlNode Item in List) //обрабатываем каждый элемент
                    {
                        countLoad++;
                        NewsList = db.News.ToList();//при прохождении каждой новости перезаполняем списки
                        Category = db.Category.ToList();
                        News TempNews = new News();// создаем место для хранения записей

                        TempNews.ChanelID = Chanel.ChanelID;
                        TempNews.title = Item.SelectSingleNode("title").InnerText;
                        TempNews.link = Item.SelectSingleNode("link").InnerText;
                        TempNews.Description = Item.SelectSingleNode("description").InnerText;
                        TempNews.pubDate = DateTime.Parse(Item.SelectSingleNode("pubDate").InnerText);
                        try
                        {
                            if (!((Item.SelectSingleNode("category").InnerText == "") || (Item.SelectSingleNode("category").InnerText == " ")))
                            {
                                bool Chek = true;// маркер существования категории записи
                                foreach (Category cat in Category)
                                {
                                    if (cat.category == Item.SelectSingleNode("category").InnerText)//если такая категория существует устанавливаем ID этой категории и меняем маркер
                                    {
                                        TempNews.CategoryID = cat.CategoryID;
                                        Chek = false;
                                        continue;
                                    }
                                }
                                if (Chek) //если маркер не изменился записываем категорию 
                                {
                                    db.Category.Add(new Category { category = Item.SelectSingleNode("category").InnerText });
                                    db.SaveChanges();
                                    countCategories++;
                                    TempNews.CategoryID = db.Category.ToList().Last().CategoryID;
                                }
                            }
                        }
                        catch (Exception)
                        {
                            TempNews.CategoryID = 1;       // любая запись без категории будет иметь категорию новости т.к. бывают пустые категории
                        }

                        bool Check = true; // устанавливаем маркер добавления записи 

                        foreach (News news in NewsList) //проверка существования такой новости в базе 
                        {
                            if (news.title == TempNews.title)// проверяем новости по заголовку
                            {
                                if (news.Description == TempNews.Description)// проверяем соответствие содержания
                                {
                                    Check = false;// устанавливаем маркер
                                    continue; // покидаем цикл проверки
                                }
                                db.News.Find(news.NewsID).Description = TempNews.Description;
                                //db.News.Remove(news); // если текст новости не совпадает удаляем старую запись
                                //db.News.Add(TempNews);   //добавляем новую
                                db.SaveChanges();
                                Check = false; // устанавливаем маркер
                                continue; // покидаем цикл проверки
                            }
                        }

                        if (Check)// проверяем маркер если условие верно добавляем запись
                        {
                            countRecords++; // счетчик добавленных записей
                            db.News.Add(TempNews);
                            db.SaveChanges();
                        }
                    }
                }
                catch (OutOfMemoryException)
                {

                    return; // возвращаем при получении любой ошибки

                }
                //ведется лог обновлений
                String Mess = DateTime.Now + " from " + Chanel.name + " chanel " + countLoad + " items was processed, " + countRecords + " new records was added, " + countCategories + "categories was added.\n";
                System.IO.File.AppendAllText("../NewsLog.txt", Mess);

            }

            return;


        }