Esempio n. 1
0
        /// <summary>
        /// Проводит операции с полученным списком презентаций по публикации на сайте soft
        /// </summary>
        /// <param name="lst">Список презентаций, которые были получены с rutor</param>
        /// <returns>Если операция выполнена успешно - true, инчае false</returns>
        async Task <bool> FlowRutor(IList <RutorListItem> lst)
        {
            foreach (RutorListItem item in lst)
            {
                //Парсим
                RutorParseItemInput paramRutorItem =
                    _context.RutorParseItemInputs
                    .Single(el => el.Active);
                paramRutorItem.ListItemId = item.Id;
                RutorItem rutorItem = await _rutorService.ParseItem(paramRutorItem);

                if (rutorItem == null)
                {
                    _logger.LogError("Не удалось распарсить пост. ListItemId = " + item.Id);
                    return(false);
                }

                //Выкладываем
                PublishResult result = await Send(nameof(RutorItem), rutorItem.Id);

                if (result == PublishResult.Error)
                {
                    _logger.LogError("Ошибка при отправке поста");
                    return(false);
                }
                if (result == PublishResult.FileExist)
                {
                    _logger.LogError("Пост уже существует, переходим к следующему");
                    continue;
                }
            }
            return(true);
        }
        /// <summary>
        /// Парсит указанную раздачу и записывает ее в базу
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public async Task <RutorItem> ParseItem(RutorParseItemInput param)
        {
            RutorItem item = await ParsePageItem(param);

            if (item != null)
            {
                _context.RutorItems.Add(item);
                _context.SaveChanges();
                return(item);
            }
            _logger.LogError("Не удалось распрарсить раздачу");
            return(null);
        }
        /// <summary>
        /// Парсит указанную раздачу
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        async Task <RutorItem> ParsePageItem(RutorParseItemInput param)
        {
            RutorListItem listItem =
                _context
                .RutorListItems
                .SingleOrDefault(el => el.Id == param.ListItemId);

            if (listItem != null)
            {
                string page = await GetPage(param.UriItem + listItem.HrefNumber,
                                            param.ProxySocks5Addr,
                                            param.ProxySocks5Port,
                                            param.ProxyActive);

                if (page != null)
                {
                    var htmlDocument = new HtmlDocument();
                    htmlDocument.LoadHtml(page);

                    List <RutorItemSpoiler> listSpoiler = GetSpoilers(htmlDocument,
                                                                      param.XPathExprSpoiler);
                    List <RutorItemImg> listImgs = GetImgs(htmlDocument,
                                                           param.XPathExprImgs,
                                                           listSpoiler);
                    string description = GetDescription(htmlDocument,
                                                        param.XPathExprDescription,
                                                        param.XPathExprSpoiler);

                    if (description == null || listImgs == null)
                    {
                        _logger.LogError($"Не удалось получить описание презентации или ее изображения. RutorListItem.Id - {listItem.Id} / Href - {listItem.HrefNumber}");
                        return(null);
                    }

                    var result = new RutorItem
                    {
                        Created         = DateTime.Now,
                        Name            = listItem.Name,
                        Description     = description,
                        Spoilers        = listSpoiler,
                        Imgs            = listImgs,
                        RutorListItemId = param.ListItemId,
                    };
                    return(result);
                }
                _logger.LogError($"Не удалось получить веб страницу с презентацией. RutorListItem.Id - {listItem.Id} / Href - {listItem.HrefNumber}");
                return(null);
            }
            _logger.LogError("Не удалось найти в базе раздачу из списка с указнным Id");
            return(null);
        }
Esempio n. 4
0
        public async Task <ActionResult <RutorItem> > ParseItem([FromBody] RutorParseItemInput parseParam)
        {
            RutorItem item = await _rutorService.ParseItem(parseParam);

            if (item != null)
            {
                foreach (var img in item.Imgs)
                {
                    img.RutorItem = null;
                }
                foreach (var spl in item.Spoilers)
                {
                    spl.RutorItem = null;
                }
                item.RutorListItem = null;
                return(Ok(item));
            }
            return(BadRequest("Не удалось распарсить"));
        }