Ejemplo n.º 1
0
        /// <summary>
        /// Парсинг релиза
        /// </summary>
        /// <param name="setting">Настройки парсера</param>
        /// <param name="resourceLink">Ссылка на ресурс</param>
        /// <param name="releaseLink">Ссылка на релиз</param>
        /// <param name="resourceItemsBc">Потокобезопасная коллекция элементов ресурса</param>
        /// <param name="releasesBc">Потокобезопасная коллекция релизов сайта</param>
        /// <returns>Task</returns>
        private async Task ParseReleasInfo(ParserSettingsEntity setting, string resourceLink, string releaseLink,
                                           BlockingCollection <ResourceItemEntity> resourceItemsBc, BlockingCollection <AlbumInfoRelease> releasesBc)
        {
            var releaseUrl         = resourceLink + releaseLink;
            var resourceInternalId = releaseLink.Replace(Resources.AlbumInfoInternalPrefixId, "");

            resourceItemsBc.Add(new ResourceItemEntity
            {
                ResourceId         = setting.ResourceId,
                ResourceInternalId = resourceInternalId,
                ResourceItemLink   = releaseLink
            });

            //парсим страницу релиза
            var releaseHtmlDoc = await _loadHtmlService.GetHtmlDocumentByUrlAsync(releaseUrl).ConfigureAwait(false);

            var release = ParseRelease(releaseHtmlDoc);

            if (release != null)
            {
                release.ResourceInternalId = resourceInternalId;

                //загружаем обложку релиза
                await LoadAndSaveReleaseCover(release, resourceLink, setting.ResourceId).ConfigureAwait(false);

                releasesBc.Add(release);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Парсинг сайта
        /// </summary>
        /// <param name="setting">Настройки парсера</param>
        /// <param name="resourceLink">Ссылка на ресурс</param>
        /// <param name="index">Текущая страница со списком релизов</param>
        /// <param name="resourceItemsBc">Потокобезопасная коллекция элементов ресурса</param>
        /// <param name="releasesBc">Потокобезопасная коллекция релизов сайта</param>
        /// <returns>Task</returns>
        private async Task ParseAlbumInfo(
            ParserSettingsEntity setting, string resourceLink, int index,
            BlockingCollection <ResourceItemEntity> resourceItemsBc, BlockingCollection <AlbumInfoRelease> releasesBc)
        {
            var linksPageUrl = $"{setting.BaseUrl}{setting.Prefix}{index}";

            var linksPageHtmlDoc = await _loadHtmlService.GetHtmlDocumentByUrlAsync(linksPageUrl).
                                   ConfigureAwait(false);

            var releaseLinkList = ParseAlbumlist(linksPageHtmlDoc);

            await Task.WhenAll(releaseLinkList.Select(releaseLink => ParseReleasInfo(setting, resourceLink,
                                                                                     releaseLink, resourceItemsBc, releasesBc)).ToArray()).ConfigureAwait(false);
        }