Ejemplo n.º 1
0
        /// <summary>
        /// Проверит список раздач рутора и вернуть новые
        /// </summary>
        /// <returns></returns>
        public async Task <IList <RutorListItem> > CheckList(RutorCheckListInput param)
        {
            IList <RutorListItem> items = await GetListItems(param);

            if (items != null)
            {
                if (_context.RutorListItems.Count() == 0)
                {
                    await _context.RutorListItems.AddRangeAsync(items);

                    await _context.SaveChangesAsync();

                    return(items);
                }
                IList <RutorListItem> oldItems =
                    _context
                    .RutorListItems
                    .OrderByDescending(d => d.AddedDate)
                    .Take(200)
                    .ToList();
                IList <RutorListItem> onlyNew =
                    items.Except(oldItems, new RutorListItemComparer())
                    .ToList();

                await _context.RutorListItems.AddRangeAsync(onlyNew);

                await _context.SaveChangesAsync();

                items = onlyNew;
                return(items);
            }
            _logger.LogError("При получении полного списка раздач вернулось null");
            return(null);
        }
Ejemplo n.º 2
0
        public async Task <ActionResult <IList <RutorListItem> > > CheckList([FromBody] RutorCheckListInput rutorCheckList)
        {
            IList <RutorListItem> result = await _rutorService.CheckList(rutorCheckList);

            if (result != null)
            {
                return(Ok(result));
            }
            return(BadRequest("При проверке списка раздач произошла ошибка"));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Возвращает список найденных раздач на странице со списком
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        async Task <IList <RutorListItem> > GetListItems(RutorCheckListInput param)
        {
            string page = await GetPage(param.UriList,
                                        param.ProxySocks5Addr,
                                        param.ProxySocks5Port,
                                        param.ProxyActive);

            if (page != null)
            {
                var htmlDocument = new HtmlDocument();
                htmlDocument.LoadHtml(page);
                HtmlNodeCollection nodesDate       = htmlDocument.DocumentNode.SelectNodes(param.XPathExprItemDate);
                HtmlNodeCollection nodesUniqNumber = htmlDocument.DocumentNode.SelectNodes(param.XPathExprItemUniqNumber);
                HtmlNodeCollection nodesName       = htmlDocument.DocumentNode.SelectNodes(param.XPathExprItemName);

                if (nodesDate != null &&
                    nodesUniqNumber != null &&
                    nodesName != null)
                {
                    var ruCultutre = new CultureInfo("RU-ru");
                    var postQuery  =
                        from date in nodesDate
                        join number in nodesUniqNumber on date.Line equals number.Line
                        join name in nodesName on date.Line equals name.Line - 1
                        select new RutorListItem
                    {
                        Created   = DateTime.Now,
                        AddedDate = DateTime.ParseExact(HttpUtility.HtmlDecode(date.InnerText),
                                                        "dd MMM yy",
                                                        ruCultutre,
                                                        DateTimeStyles.AllowInnerWhite),
                        HrefNumber =
                            number.GetAttributeValue("href", null).
                            Split(param.XPathParamSplitSeparator)[param.XPathParamSplitIndex],
                        Name = HttpUtility.HtmlDecode(name.InnerText),
                    };
                    return(postQuery.ToList());
                }
                _logger.LogError("XPath выражение вернуло null");
                return(null);
            }
            _logger.LogError("При получении веб страницы вернулось null");
            return(null);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Запуск пакетного парсинга Rutor
        /// </summary>
        /// <param name="dayFromError"></param>
        /// <returns></returns>
        async Task <bool> ManagerRutor(int dayFromError)
        {
            IList <RutorListItem> errorList =
                _context
                .RutorListItems
                .FromSqlInterpolated($"RutorListItemsError {DateTime.Now.AddDays(-dayFromError)}")
                .ToList();

            if (errorList.Count > 0)
            {
                bool resTails = await FlowRutor(errorList);

                if (!resTails)
                {
                    _logger.LogError("Ошибка пакетной публикации хвостов");
                    return(false);
                }
            }

            RutorCheckListInput rutorCheckListInput =
                _context
                .RutorCheckListInputs
                .Single(el => el.Active);
            IList <RutorListItem> rutorListItem = await _rutorService.CheckList(rutorCheckListInput);

            if (rutorListItem == null)
            {
                _logger.LogError("Ошибка проверки новых презентаций. RutorCheckListInput.Id = " + rutorCheckListInput.Id);
                return(false);
            }

            bool res = await FlowRutor(rutorListItem);

            if (!res)
            {
                _logger.LogError("Ошибка пакетной публикации рогов");
                return(false);
            }
            return(true);
        }