Пример #1
0
        private void LoadEpisodes(MD5 md5, FeedMetaData feedMetaData, ConcurrentBag <IDocument> destination)
        {
            var name = GetName(feedMetaData);
            var sw   = new Stopwatch();

            sw.Start();

            if (string.IsNullOrWhiteSpace(feedMetaData.FeedUrl))
            {
                throw new ArgumentException("Invalid feed, no feedUrl found");
            }

            try
            {
                Logger.LogInformation($"{name} Downloading and parsing");
                var feed = FeedReader.ReadAsync(feedMetaData.FeedUrl).Result;
                sw.Stop();
                Logger.LogInformation($"{name} Loaded the feed, {feed.Items.Count} episode(s) found in {sw.Elapsed.TotalSeconds}s");

                feed.Items.Select(e => new PodcastEpisode
                {
                    Id                 = GetId(md5, GetAudioUrl(e.SpecificItem)),
                    PodcastTitle       = feed.Title,
                    EpisodeDescription = e.Description,
                    EpisodeTitle       = e.Title, // TODO regex
                    Published          = e.PublishingDate,
                    AudioUrl           = GetAudioUrl(e.SpecificItem),
                    // Season = e.Season, // TODO Not Supported by lib
                    // EpisodeNumber = e.Episode, // TODO Not Supported by lib
                    // EpisodeType = e.EpisodeType, // TODO Not Supported by lib
                    // Tags = e.Tags, // TODO Have to build this
                    Feed = feedMetaData.FeedUrl
                }).ToList()
                .ForEach(e => destination.Add(e as IDocument));
            }
            catch (Exception ex)
            {
                sw.Stop();
                Logger.LogError($"{name}: Failure downloading or parsing feed after {sw.Elapsed.TotalSeconds}s");
                Logger.LogError(name + ex.ToString());
                Logger.LogError($"{name} Continuing anyway");
            }
        }
Пример #2
0
 private string GetName(FeedMetaData feedMetaData)
 {
     return(feedMetaData.PodcastTitle ?? feedMetaData.FeedUrl);
 }