コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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("Не удалось распарсить"));
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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);
        }