public async Task <Publication> Run( [ActivityTrigger] PublicationConfiguration publicationConfiguration, ILogger logger) { logger.LogInformation($"Started {nameof(GetLatestPublicationFromWebActivity)} for { publicationConfiguration.PublicationSourceOwner } { publicationConfiguration.PublicationSourceName}."); Publication publication = new NullPublication(publicationConfiguration.PublicationSourceName); using (var xmlReader = XmlReader.Create(publicationConfiguration.PublicationSourceUrl, new XmlReaderSettings() { Async = true })) { var parser = new RssParser(); var reader = new RssFeedReader(xmlReader, parser); while (await reader.Read()) { if (reader.ElementType == SyndicationElementType.Item) { ISyndicationItem item = await reader.ReadItem(); publication = MapToPublication(publicationConfiguration, item); break; } } } logger.LogInformation($"Found publication on web for {publicationConfiguration.PublicationSourceName}: " + $"ID: {publication.Id}," + $"Date: {publication.PublicationDate:F}."); return(publication); }
private static Publication MapToPublication(PublicationConfiguration configuration, ISyndicationItem item) { return(new Publication( publicationSourceName: configuration.PublicationSourceName, id: item.Id, publicationDate: item.Published, title: item.Title, description: item.Description, url: item.Links.FirstOrDefault()?.Uri.AbsoluteUri, hashTags: configuration.HashTags)); }
public async Task <Publication> Run( [ActivityTrigger] PublicationConfiguration publicationConfiguration, [Table(Configuration.Publications.TableName)] CloudTable table, ILogger logger) { logger.LogInformation($"Started {nameof(GetLatestPublicationFromHistoryActivity)} for { publicationConfiguration.PublicationSourceOwner } { publicationConfiguration.PublicationSourceName }."); Publication latestKnownPublication = null; var query = QueryBuilder <Publication> .CreateQueryForPartitionKey(publicationConfiguration.PublicationSourceName); var queryResult = await table.ExecuteQuerySegmentedAsync(query, null); latestKnownPublication = queryResult.Results.AsReadOnly().OrderByDescending(publication => publication.PublicationDate).FirstOrDefault(); if (latestKnownPublication != null) { logger.LogInformation($"Found publication in history for configuration: {publicationConfiguration.PublicationSourceName}, " + $"ID: {latestKnownPublication.Id}," + $"PublicationDate: {latestKnownPublication.PublicationDate:F}."); } return(latestKnownPublication ?? new NullPublication(publicationConfiguration.PublicationSourceName)); }