コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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
            }));
        }