public static async Task Run( [QueueTrigger("amazon-item-queue", Connection = "QueueConnectionString")] CloudQueueMessage message, [Table("prices", Connection = "TableConnectionString")] CloudTable prices) { var queueItem = message.GetMessageAs <QueueItem>(); var itemResult = await Client.GetAsync($"https://www.amazon.co.uk/dp/{queueItem.Id}"); var htmlParser = new HtmlParser(); var pageContent = await itemResult.Content.ReadAsStringAsync(); var dealPriceElement = GetPriceElement(await htmlParser.ParseAsync(pageContent)); if (dealPriceElement == null) { await prices.InsertEntity(ItemPrice.FromQueueItem(queueItem)); } else { var itemPrice = IsPrice(dealPriceElement) ? ItemPrice.FromQueueItem(queueItem, dealPriceElement?.InnerHtml.Replace(",", string.Empty)) : ItemPrice.FromQueueItem(queueItem); await prices.InsertEntity(itemPrice); } }
public static async Task Run( [QueueTrigger("argos-item-queue", Connection = "QueueConnectionString")] CloudQueueMessage message, [Table("prices", Connection = "TableConnectionString")] CloudTable prices) { var queueItem = message.GetMessageAs <QueueItem>(); var itemResult = await Client.GetAsync($"https://www.argos.co.uk/product/{queueItem.Id}"); var htmlParser = new HtmlParser(); var pageContent = await itemResult.Content.ReadAsStringAsync(); var document = await htmlParser.ParseAsync(pageContent); IElement dealPriceElement = null; foreach (var htmlClass in HtmlClassesToCheck) { dealPriceElement = document.QuerySelectorAll($".{htmlClass}").FirstOrDefault(); if (dealPriceElement != null) { break; } } var attributeValue = $"£{dealPriceElement?.GetAttribute("content")}"; await prices.ExecuteAsync(TableOperation.Insert(new ItemPrice { PartitionKey = queueItem.Id, RowKey = $"{Guid.NewGuid():N}", Price = attributeValue, PriceDate = DateTime.UtcNow })); }