Exemple #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);
        }
        /// <summary>
        /// Преобразует NnmclubPost в SoftPost
        /// </summary>
        /// <returns></returns>
        async Task <SoftPost> NnmclubToSoft(DriverToSoftInput param)
        {
            NnmclubItem clubItem = _context
                                   .NnmclubItems
                                   .Include(el => el.NnmclubListItem)
                                   .Include(el => el.Imgs)
                                   .Include(el => el.Spoilers)
                                   .SingleOrDefault(el => el.Id == param.ParseItemId);

            if (clubItem != null)
            {
                string posterFullName = await DownloadFile(clubItem.Poster,
                                                           Path.GetFileName(clubItem.Poster),
                                                           param.ProxySocks5Addr,
                                                           param.ProxySocks5Port,
                                                           param.ProxyActive);

                if (posterFullName == null)
                {
                    _logger.LogError($"Не удалось загрузить постер. NnmclubItem.Id: {param.ParseItemId}; Href: {clubItem.NnmclubListItem.Href}");
                    return(null);
                }

                string torrentFullName = await DownloadFile(param.TorrentUri + clubItem.Torrent,
                                                            Path.GetRandomFileName().Replace('.', '_') + ".torrent",
                                                            param.ProxySocks5Addr,
                                                            param.ProxySocks5Port,
                                                            param.ProxyActive,
                                                            new Uri(param.AuthPage),
                                                            param.AuthParam);

                if (torrentFullName == null)
                {
                    _logger.LogError($"Не удалось загрузить торрент файл. NnmclubItem.Id: {param.ParseItemId}; Href: {clubItem.NnmclubListItem.Href}");
                    return(null);
                }

                var post = new SoftPost
                {
                    NnmclubItemId = param.ParseItemId,
                    Created       = DateTime.Now,
                    Name          = clubItem.Name,
                    Description   = clubItem.Description,
                    Spoilers      = FormatSpoilersNnmclub(clubItem.Spoilers),
                    PosterImg     = posterFullName,
                    TorrentFile   = torrentFullName,
                    Imgs          = (from img in clubItem.Imgs
                                     select new SoftPostImg
                    {
                        Created = DateTime.Now,
                        ImgUri = img.ImgUri
                    }).ToList(),
                };
                return(post);
            }
            _logger.LogError($"В базе не найдена презентация с указанным Id. NnmclubItem.Id: {param.ParseItemId}");
            return(null);
        }
        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("Не удалось распарсить"));
        }
Exemple #4
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);
        }
Exemple #5
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);
        }