/// <summary> /// Проводит операции с полученным списком презентаций по публикации на сайте soft /// </summary> /// <param name="lst">Список презентаций, которые были получены с nnmclub</param> /// <returns>Если все презентации выложены успешно, то true, инчае false</returns> async Task <bool> FlowNnmclub(IList <NnmclubListItem> lst) { foreach (NnmclubListItem item in lst) { //Парсим NnmclubParseItemInput paramParseInp = _context.NnmclubParseItemInputs .Single(el => el.Active); paramParseInp.ListItemId = item.Id; NnmclubItem nnmclubItem = await _nnmclubService.ParseItem(paramParseInp); if (nnmclubItem == null) { _logger.LogError("Не удалось распарсить пост. NnmclubListItem.Id = " + item.Id); return(false); } //Выкладываем PublishResult result = await Send(nameof(NnmclubItem), nnmclubItem.Id); if (result == PublishResult.Error) { _logger.LogError("Ошибка при отправке поста"); return(false); } if (result == PublishResult.FileExist) { _logger.LogError("Пост уже существует, переходим к следующему"); continue; } } return(true); }
public async Task <ActionResult <NnmclubItem> > ParseItem([FromBody] NnmclubParseItemInput param) { NnmclubItem item = await _nnmclubService.ParseItem(param); if (item != null) { foreach (var img in item.Imgs) { img.NnmclubItem = null; } foreach (var spl in item.Spoilers) { spl.NnmclubItem = null; } item.NnmclubListItem = null; return(Ok(item)); } return(BadRequest("Не удалось распарсить")); }
/// <summary> /// Парсит указанную раздачу и записывает ее в базу /// </summary> /// <param name="param"></param> /// <returns></returns> public async Task <NnmclubItem> ParseItem(NnmclubParseItemInput param) { NnmclubItem item = await GetItem(param); if (item != null) { NnmclubItem oldActual = (from el in _context.NnmclubItems where el.Actual && el.GroupHref == item.GroupHref select el).SingleOrDefault(); if (oldActual != null) { oldActual.Actual = false; } _context.NnmclubItems.Add(item); _context.SaveChanges(); return(item); } return(null); }
/// <summary> /// Парсит указанную презентацию /// </summary> /// <param name="param"></param> /// <returns></returns> async Task <NnmclubItem> GetItem(NnmclubParseItemInput param) { NnmclubListItem listItem = _context .NnmclubListItems .SingleOrDefault(el => el.Id == param.ListItemId); if (listItem != null) { string page = await GetPage( param.UriItem + listItem.Href, param.ProxySocks5Addr, param.ProxySocks5Port, param.ProxyActive, new Uri(param.AuthPage), param.AuthParam); if (page != null) { var htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(page); List <NnmclubItemSpoiler> listSpoiler = GetSpoilers(htmlDocument, param.XPathSpoiler); var poster = new StringBuilder(GetPoster(htmlDocument, param.XPathPoster)); poster.Remove(0, poster .ToString() .IndexOf("?link=") + "?link=".Length); string torrent = GetTorrent(htmlDocument, param.XPathTorrent); List <NnmclubItemImg> listImgs = GetImgs(htmlDocument, param.XPathImgs); string description = GetDescription(htmlDocument, param.XPathDescription, param.XPathSpoiler, param.XPathPoster, param.XPathImgs, param.XPathTrash); if (description == null || listImgs == null || poster == null) { _logger.LogError($"Не удалось получить описание презентации или ее изображений. NnmclubListItem.Id - {listItem.Id} / Href - {listItem.Href}"); return(null); } var item = new NnmclubItem { Created = DateTime.Now, Name = listItem.Name, Description = description, Spoilers = listSpoiler, Poster = poster.ToString(), Imgs = listImgs, Torrent = torrent, NnmclubListItemId = param.ListItemId, Actual = true, GroupHref = listItem.Href }; return(item); } _logger.LogError($"Не удалось получить веб страницу с презентацией. NnmclubListItem.Id - {listItem.Id} / Href - {listItem.Href}"); return(null); } _logger.LogError("Не удалось найти в базе презентацию из списка с указнным Id"); return(null); }