예제 #1
0
        public void OneWeekBeforeTest()
        {
            var result = AvitoParser.GetDateValue(
                "1 неделя назад",
                new DateTime(2020, 2, 9, 18, 0, 0),
                new DateTime(2020, 2, 9, 18, 1, 2));

            result.Should().Be(new DateTime(2020, 2, 2, 18, 1, 2));
        }
예제 #2
0
        public void TwoDaysBeforeTest()
        {
            var result = AvitoParser.GetDateValue(
                "2 дня назад",
                new DateTime(2020, 2, 9, 18, 0, 0),
                new DateTime(2020, 2, 9, 18, 1, 2));

            result.Should().Be(new DateTime(2020, 2, 7, 18, 1, 2));
        }
예제 #3
0
        public void FiveDaysBeforeTest()
        {
            var result = AvitoParser.GetDateValue(
                "5 дней назад",
                new DateTime(2020, 2, 9, 18, 0, 0),
                new DateTime(2020, 2, 9, 18, 1, 2));

            result.Should().Be(new DateTime(2020, 2, 4, 18, 1, 2));
        }
예제 #4
0
        public void OneHourBeforeTest()
        {
            var result = AvitoParser.GetDateValue(
                "1 час назад",
                new DateTime(2020, 2, 9, 18, 0, 0),
                new DateTime(2020, 2, 9, 18, 1, 2));

            result.Should().Be(new DateTime(2020, 2, 9, 17, 1, 2));
        }
예제 #5
0
        public void TwentyHoursBeforeTest()
        {
            var result = AvitoParser.GetDateValue(
                "20 часов назад",
                new DateTime(2020, 2, 9, 18, 0, 0),
                new DateTime(2020, 2, 9, 18, 1, 2));

            result.Should().Be(new DateTime(2020, 2, 8, 22, 1, 2));
        }
예제 #6
0
        public void DateTest()
        {
            var result = AvitoParser.GetDateValue(
                "6 февраля 19:34",
                new DateTime(2020, 2, 9, 18, 0, 0),
                new DateTime(2020, 2, 9, 18, 1, 2));

            result.Should().Be(new DateTime(2020, 2, 6, 19, 34, 0));
        }
예제 #7
0
        public void TodayTest()
        {
            var result = AvitoParser.GetDateValue(
                "Сегодня 19:34",
                new DateTime(2020, 2, 9, 18, 0, 0),
                new DateTime(2020, 2, 9, 18, 1, 2));

            result.Should().Be(new DateTime(2020, 2, 9, 19, 34, 0));
        }
예제 #8
0
        public void FiveWeeksBeforeTest()
        {
            var result = AvitoParser.GetDateValue(
                "5 недель назад",
                new DateTime(2020, 2, 9, 18, 0, 0),
                new DateTime(2020, 2, 9, 18, 1, 2));

            result.Should().Be(new DateTime(2020, 1, 5, 18, 1, 2));
        }
예제 #9
0
        static void Main(string[] args)
        {
            var settings = new AvitoRequestSettings {
                Districts  = District.Central | District.Sovetskiy,
                Materials  = Material.Block | Material.Kirpich | Material.Monolit,
                IsNotLast  = true,
                FirstFloor = 2,
                HouseFloor = 5,
                PayMax     = 3500000,
                PayMin     = 3000000,
                MaxSquare  = 80,
                MinSquare  = 60
            };

            var result = new AvitoParser().Get(settings).Result;
        }
예제 #10
0
        public void ParseFind(object o)
        {
            var data = ((Filters, PanelAds))o;

            apartments.Clear();

            IParser cianParser     = new CianParser();
            IParser avitoParser    = new AvitoParser();
            IParser domofondParser = new DomofondParser();

            Console.WriteLine("1 парсер");
            try { apartments.AddRange(cianParser.Parse(data.Item1, PAGES, data.Item2)); } catch (Exception) { }
            Console.WriteLine("2 парсер");
            try { apartments.AddRange(avitoParser.Parse(data.Item1, PAGES, data.Item2)); } catch (Exception) { }
            Console.WriteLine("3 парсер");
            try { apartments.AddRange(domofondParser.Parse(data.Item1, PAGES, data.Item2)); } catch (Exception) { }

            apartments.Sort((a, b) => int.Parse(a.Price) - int.Parse(b.Price));
        }
예제 #11
0
        public void ParseSend(object o)
        {
            var data = (Filters)o;

            apartments.Clear();

            IParser cianParser     = new CianParser();
            IParser avitoParser    = new AvitoParser();
            IParser domofondParser = new DomofondParser();

            Console.WriteLine("1 парсер");
            try { apartments.AddRange(cianParser.Parse(data, PAGES)); } catch (Exception) { }
            Console.WriteLine("2 парсер");
            try { apartments.AddRange(avitoParser.Parse(data, PAGES)); } catch (Exception) { }
            Console.WriteLine("3 парсер");
            try { apartments.AddRange(domofondParser.Parse(data, PAGES)); } catch (Exception) { }

            apartments.Sort((a, b) => int.Parse(a.Price) - int.Parse(b.Price));

            Console.WriteLine("Создание и отправка таблицы");
            EmailSender.Send(user.Email, EmailSender.MessageType.Mailing, TableCreator.CreateTable(apartments));
        }
예제 #12
0
        private void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            _timer.Stop();

            _logger.Info("Сработал таймер сбора");

            try
            {
                List <Link> links = _advertsContext.Links.Where(l => l.IsActive).ToList();
                _logger.Info(string.Format("Количество профилей - {0}", links.Count));

                AvitoParser avitoParser = _scope.Resolve <AvitoParser>();

                foreach (Link link in links)
                {
                    List <Advert> advertsRaw = avitoParser.StartWork(link);
                    List <Advert> adverts    = _advertsErrorChecker.CheckList(advertsRaw);

                    int count = 0;

                    foreach (Advert advert in adverts)
                    {
                        if (_advertsContext.Adverts.Any(a => a.PublicId == advert.PublicId))
                        {
                            continue;
                        }

                        _advertsContext.Adverts.Add(advert);
                        _advertsContext.SaveChanges();

                        count++;
                    }

                    if (count > 0)
                    {
                        _logger.Info(string.Format("{0} -> {1}", link.Name, count));
                    }
                }

                if (links.Any(p => p.IsNew))
                {
                    foreach (Link link in links.Where(l => l.IsNew))
                    {
                        //_pushNotificationSender.Send(link.Channel, "Служебное сообщение",
                        //	"Сервис настроен. Теперь Вам будут приходить сообщения о новых объявлениях", "pushall.ru");

                        link.IsNew = false;
                        _advertsContext.Entry(link).State = EntityState.Modified;
                        _advertsContext.SaveChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error("Application.OnTimedEvent", ex);
            }

            _logger.Info("Обработка завершена");

            _timer.Interval = 45000;
            _timer.Start();
        }
예제 #13
0
        public ActionResult Index(string startId) //int startId, int finishId
        {
            HtmlAgilityPack.HtmlWeb web = new HtmlWeb();

            for (int i = 0; i < 11; i++)
            {
                HtmlAgilityPack.HtmlDocument doc = web.Load("https://www.avito.ru/moskva/kvartiry/prodam/1-komnatnye/vtorichka?p=" + i + "&user=1&view=list");


                //foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//div[@class='item item_list js-catalog-item-enum clearfix item-highlight cat_24']"))
                //foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//div[@class='item item_list js-catalog-item-enum clearfix c-b-0 cat_24']"))
                foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//div[contains(@class, 'js-catalog-item-enum') and contains(@class, 'clearfix')]"))

                {
                    // ссылка на подробную объяву
                    var link = row.SelectSingleNode("div[@class='title description-title']/h3[@class='h3 fader description-title-h3']/a").GetAttributeValue("href", "");
                    HtmlAgilityPack.HtmlDocument childDoc = web.Load("https://www.avito.ru" + link);

                    var opisanie = childDoc.DocumentNode.SelectSingleNode("//div[@class = 'item-description-text']/p").InnerHtml;

                    // id
                    var adId  = row.Id;
                    var sAdId = adId.Replace("i", "");

                    // цена
                    var price = row.SelectSingleNode("div[@class='price']/p").InnerText;

                    var bPrice = new StringBuilder();
                    foreach (var p in price)
                    {
                        if (p == '&')
                        {
                            break;
                        }

                        if (p == '0' | p == '1' | p == '2' | p == '3' | p == '4' | p == '5' | p == '6' | p == '7' | p == '8' | p == '9')
                        {
                            bPrice.Append(p);
                        }
                    }
                    var sPrice = int.Parse(bPrice.ToString());

                    // проверка существующей записи в базе
                    var infoAds = _context.InfoAds.FirstOrDefault(m => m.AdId == sAdId);

                    if (infoAds == null)
                    {
                        //получить номер телефона
                        var avitoParser = new AvitoParser();

                        var img = avitoParser.AvitoParserPhoneImage(link);

                        var recognizer = new PhoneRecognizer(System.Web.HttpContext.Current.Server.MapPath("~/Content/digits/"));

                        var sTel = recognizer.Recognize(img);

                        var tel = long.Parse(sTel.Replace("-", string.Empty));

                        // площадь
                        var area = row.SelectSingleNode("div[@class='params clearfix']/div[@class='param area']").InnerText;

                        var bArea = new StringBuilder();

                        foreach (var a in area)
                        {
                            if (a == ' ')
                            {
                                break;
                            }

                            if (a == '.')
                            {
                                bArea.Append(',');
                            }
                            else
                            {
                                bArea.Append(a);
                            }
                        }
                        var sArea = float.Parse(bArea.ToString());

                        // этаж и этажность
                        var floor = row.SelectSingleNode("div[@class='params clearfix']/div[@class='param floor']").InnerText;

                        // этажность
                        var bFloors          = new StringBuilder();
                        var indexFloor       = floor.IndexOf("/");
                        var floorToGetFloors = floor.Substring(indexFloor + 1);

                        foreach (var f in floorToGetFloors)
                        {
                            if (f == ' ')
                            {
                                break;
                            }

                            bFloors.Append(f);
                        }
                        var sFloors = int.Parse(bFloors.ToString());

                        // этаж
                        var bFloor = new StringBuilder();

                        foreach (var f in floor)
                        {
                            if (f == '/')
                            {
                                break;
                            }

                            if (f == '0' | f == '1' | f == '2' | f == '3' | f == '4' | f == '5' | f == '6' | f == '7' | f == '8' | f == '9')
                            {
                                bFloor.Append(f);
                            }
                        }
                        var sFloor = int.Parse(bFloor.ToString());


                        // адрес
                        var address = row.SelectSingleNode("div[@class='params clearfix']/div[@class='param address']/div[@class='fader']").InnerText;

                        var sAddress = address.Replace("\n ", "");

                        // ближайшее метро к адресу
                        var nearestMetro = row.SelectSingleNode("div[@class='params clearfix']" +
                                                                "/div[@class='param address']" +
                                                                "/div[@class='metro-info__wrap']" +
                                                                "/div[@class='metro-info__wrap-2']" +
                                                                "/div[@class='metro-name__wrap']" +
                                                                "/div[@class='metro-name__wrap-2']/span[@class='metro-name']")?.InnerText;

                        var sNearestMetro = "";
                        if (nearestMetro == null)
                        {
                            sNearestMetro = "Не указано";
                        }
                        else
                        {
                            sNearestMetro = nearestMetro.Replace("\n ", "").Trim();
                        }



                        // расстояние до ближайшего метро (в метрах)
                        var nearestMetroDistance = row.SelectSingleNode("div[@class='params clearfix']" +
                                                                        "/div[@class='param address']" +
                                                                        "/div[@class='metro-info__wrap']" +
                                                                        "/div[@class='metro-info__wrap-2']" +
                                                                        "/div[@class='metro-distance']")?.InnerText;

                        var sNearestMetroDistance = 0;

                        if (nearestMetroDistance == null)
                        {
                            sNearestMetroDistance = 0;
                        }
                        else
                        {
                            var bNearestMetroDistance = new StringBuilder();
                            foreach (var n in nearestMetroDistance)
                            {
                                if (n == 'к' || n == 'м' || n == ' ' || n == '+')
                                {
                                    continue;
                                }

                                bNearestMetroDistance.Append(n);
                            }

                            if (bNearestMetroDistance.Length == 1 | bNearestMetroDistance.Length == 2)
                            {
                                bNearestMetroDistance = bNearestMetroDistance.Append('0');
                                bNearestMetroDistance = bNearestMetroDistance.Append('0');
                                bNearestMetroDistance = bNearestMetroDistance.Append('0');
                            }



                            var distanceClean = bNearestMetroDistance.ToString();
                            var nearestMetroDistanceInMetres = "";

                            var indexNearestMetroDistance = distanceClean.IndexOf(".");


                            if (indexNearestMetroDistance == -1)
                            {
                                nearestMetroDistanceInMetres = distanceClean;
                            }
                            else
                            {
                                nearestMetroDistanceInMetres = distanceClean.Insert(indexNearestMetroDistance + 2, "00");
                            }

                            var finalResult = new StringBuilder();

                            foreach (var r in nearestMetroDistanceInMetres)
                            {
                                if (r == '.')
                                {
                                    continue;
                                }

                                finalResult.Append(r);
                            }



                            sNearestMetroDistance = int.Parse(finalResult.ToString());
                        }


                        var infoAd = new InfoAd()
                        {
                            AdId                 = sAdId,
                            Rooms                = "1",
                            Price                = sPrice,
                            Area                 = sArea,
                            Floor                = sFloor,
                            Floors               = sFloors,
                            Address              = sAddress,
                            NearestMetro         = sNearestMetro,
                            NearestMetroDistance = sNearestMetroDistance,
                            AdAdded              = DateTime.Now,
                            Description          = opisanie,
                            TelNumber            = tel
                        };

                        _context.InfoAds.Add(infoAd);
                        _context.SaveChanges();
                    }

                    Thread.Sleep(8000);
                }


                Thread.Sleep(5000);
            }


            return(View());
        }