/// <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); }
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("Не удалось распарсить")); }