Beispiel #1
0
        public static AmazonService.Item GetValidItemResult(Items[] responseItems)
        {
            AmazonService.Item itemResult = null;
            bool isFound = false;

            foreach (var itemResponse in responseItems)
            {
                if (itemResponse == null)
                {
                    continue;
                }

                // set the initial value for the item result
                itemResult = itemResponse.Item[0];

                foreach (var item in itemResponse.Item)
                {
                    if (item.LargeImage != null)
                    {
                        itemResult = item;
                        isFound    = true;
                        break;
                    }
                }

                if (isFound)
                {
                    break;
                }
            }

            return(itemResult);
        }
Beispiel #2
0
        private static ProductAmazon createProductAmazon(AmazonService.Item item, string eisSku)
        {
            var eProduct = new ProductAmazon
            {
                EisSKU          = eisSku,
                ASIN            = item.ASIN,
                Brand           = item.ItemAttributes.Brand,
                Color           = item.ItemAttributes.Color,
                EAN             = item.ItemAttributes.EAN,
                Label           = item.ItemAttributes.Label,
                Manufacturer    = item.ItemAttributes.Manufacturer,
                Model           = item.ItemAttributes.Model,
                NumOfItems      = Convert.ToInt32(item.ItemAttributes.NumberOfItems),
                PackageQty      = Convert.ToInt32(item.ItemAttributes.PackageQuantity),
                ProductGroup    = item.ItemAttributes.ProductGroup,
                ProductTypeName = item.ItemAttributes.ProductTypeName,
                Size            = item.ItemAttributes.Size,
                ProductTitle    = item.ItemAttributes.Title,
                MapPrice        = item.ItemAttributes.ListPrice == null ? 0 : (Convert.ToDecimal(item.ItemAttributes.ListPrice.Amount) / 100),
            };

            // set the product images
            if (item.ImageSets != null)
            {
                var primaryImage = item.ImageSets.FirstOrDefault(x => x.Category == "primary");
                if (primaryImage != null)
                {
                    var images = new List <MediaContent>()
                    {
                        new MediaContent {
                            Url     = primaryImage.LargeImage.URL,
                            Type    = "LARGE",
                            Caption = _channelName,
                            Id      = 1
                        }
                    };

                    eProduct.Images = images;
                }
            }

            // set the product' item dimension
            var itemDimensionNode = item.ItemAttributes.ItemDimensions;

            if (itemDimensionNode != null)
            {
                var length = new DecimalWithUnit(parseDimensionValue(itemDimensionNode.Length), parseDimensionUnit(itemDimensionNode.Length));
                var width  = new DecimalWithUnit(parseDimensionValue(itemDimensionNode.Width), parseDimensionUnit(itemDimensionNode.Width));
                var height = new DecimalWithUnit(parseDimensionValue(itemDimensionNode.Height), parseDimensionUnit(itemDimensionNode.Height));
                var weight = new DecimalWithUnit(parseDimensionValue(itemDimensionNode.Weight), parseDimensionUnit(itemDimensionNode.Weight));
                eProduct.ItemDimension = new Dimension(length, width, height, weight);
            }

            // the the product's package dimenstion
            var pkgDimensionNode = item.ItemAttributes.PackageDimensions;

            if (pkgDimensionNode != null)
            {
                var length = new DecimalWithUnit(parseDimensionValue(pkgDimensionNode.Length), parseDimensionUnit(pkgDimensionNode.Length));
                var width  = new DecimalWithUnit(parseDimensionValue(pkgDimensionNode.Width), parseDimensionUnit(pkgDimensionNode.Width));
                var height = new DecimalWithUnit(parseDimensionValue(pkgDimensionNode.Height), parseDimensionUnit(pkgDimensionNode.Height));
                var weight = new DecimalWithUnit(parseDimensionValue(pkgDimensionNode.Weight), parseDimensionUnit(pkgDimensionNode.Weight));
                eProduct.PackageDimension = new Dimension(length, width, height, weight);
            }

            // get the condition type and leadtime ship of the prouduct
            if (item.Offers.Offer != null)
            {
                var offerNode = item.Offers.Offer.FirstOrDefault();
                eProduct.Condition = offerNode == null ? string.Empty : offerNode.OfferAttributes.Condition;
            }

            return(eProduct);
        }
        public MarketplaceProduct GetProductInfo(AmazonInfoFeed infoFeed)
        {
            // create a WCF Amazon ECS client
            var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);

            binding.MaxReceivedMessageSize = int.MaxValue;
            var client = new AWSECommerceServicePortTypeClient(
                binding,
                new EndpointAddress("https://webservices.amazon.com/onca/soap?Service=AWSECommerceService"));
            var requests = new List <ItemLookupRequest>();

            // add authentication to the ECS client
            client.ChannelFactory.Endpoint.Behaviors
            .Add(new AmazonSigningEndpointBehavior(_credential.SearchAccessKeyId, _credential.SearchSecretKey));

            // create request item type for asin - WE ONLY ALLOW ASIN ONLY
            if (!string.IsNullOrEmpty(infoFeed.ASIN))
            {
                requests.Add(createItemRequestLookup(infoFeed.ASIN, ItemLookupRequestIdType.ASIN));
            }

            // return null if there is no request available
            if (!requests.Any())
            {
                return(null);
            }

            // create an ItemSearch wrapper
            var itemLookUp = new ItemLookup();

            itemLookUp.AssociateTag   = _credential.AssociateId;
            itemLookUp.AWSAccessKeyId = _credential.SearchAccessKeyId;
            itemLookUp.Request        = requests.ToArray();

            // send the ItemLookup request
            var response = client.ItemLookup(itemLookUp);

            if (response == null || response.Items == null)
            {
                _logger.LogError(LogEntryType.AmazonProduct, string.Format("Item Lookup for {0} failed! Error Message: {1}", infoFeed.EisSKU, response.OperationRequest.Errors[0].Message), string.Empty);
                return(null);
            }

            AmazonService.Item itemResult = null;
            var errorMessages             = new List <string>();

            for (var i = 0; i < requests.Count; i++)
            {
                if (response.Items[i].Request.Errors != null)
                {
                    errorMessages.Add(response.Items[i].Request.Errors[0].Message);
                }

                if (response.Items[i].Item != null)
                {
                    // set the initial value for the item result
                    itemResult = response.Items[i].Item[0];

                    foreach (var item in response.Items[i].Item)
                    {
                        // let's find from the result which has large image available
                        if (item.LargeImage != null)
                        {
                            itemResult = item;
                            break;
                        }
                    }
                }
            }

            // exit if there is no really result
            if (itemResult == null)
            {
                _logger.LogError(LogEntryType.AmazonProduct, string.Join("\n", errorMessages), string.Empty);
                return(null);
            }

            var product = parsedToMarketplaceProduct(itemResult);

            product.EisSKU = infoFeed.EisSKU;

            // log info
            _logger.LogInfo(LogEntryType.AmazonProduct, string.Format("Get product info for \'{0}\' was successful!", infoFeed.ASIN));

            return(product);
        }
        private MarketplaceProduct parsedToMarketplaceProduct(AmazonService.Item item)
        {
            try
            {
                var eProduct = new ProductAmazon
                {
                    ASIN            = item.ASIN,
                    Brand           = item.ItemAttributes.Brand,
                    Color           = item.ItemAttributes.Color,
                    EAN             = item.ItemAttributes.EAN,
                    Label           = item.ItemAttributes.Label,
                    Manufacturer    = item.ItemAttributes.Manufacturer,
                    Model           = item.ItemAttributes.Model,
                    NumOfItems      = Convert.ToInt16(item.ItemAttributes.NumberOfItems),
                    PackageQty      = Convert.ToInt16(item.ItemAttributes.PackageQuantity),
                    ProductGroup    = item.ItemAttributes.ProductGroup,
                    ProductTypeName = item.ItemAttributes.ProductTypeName,
                    Size            = item.ItemAttributes.Size,
                    ProductTitle    = item.ItemAttributes.Title,
                    MapPrice        = item.ItemAttributes.ListPrice == null ? 0 : (Convert.ToDecimal(item.ItemAttributes.ListPrice.Amount) / 100),
                };

                // set the product images
                if (item.ImageSets != null)
                {
                    var primaryImage = item.ImageSets.FirstOrDefault(x => x.Category == "primary");
                    if (primaryImage != null)
                    {
                        var images = new List <MediaContent>()
                        {
                            new MediaContent {
                                Url     = primaryImage.LargeImage.URL,
                                Type    = "LARGE",
                                Caption = ChannelName,
                                Id      = 1
                            }
                        };

                        eProduct.Images = images;
                    }
                }

                // set the product' item dimension
                var itemDimensionNode = item.ItemAttributes.ItemDimensions;
                if (itemDimensionNode != null)
                {
                    var length     = new DecimalWithUnit(parseDimensionValue(itemDimensionNode.Length), parseDimensionUnit(itemDimensionNode.Length));
                    var width      = new DecimalWithUnit(parseDimensionValue(itemDimensionNode.Width), parseDimensionUnit(itemDimensionNode.Width));
                    var height     = new DecimalWithUnit(parseDimensionValue(itemDimensionNode.Height), parseDimensionUnit(itemDimensionNode.Height));
                    var itemWeight = new DecimalWithUnit(parseDimensionValue(itemDimensionNode.Weight), parseDimensionUnit(itemDimensionNode.Weight));
                    //eProduct.WeightBox1 = itemWeight.Value;
                    //eProduct.WeightBox1Unit = itemWeight.Unit;
                    eProduct.ItemDimension = new Dimension(length, width, height, itemWeight);
                }

                // the the product's package dimenstion
                var pkgDimensionNode = item.ItemAttributes.PackageDimensions;
                if (pkgDimensionNode != null)
                {
                    var length    = new DecimalWithUnit(parseDimensionValue(pkgDimensionNode.Length), parseDimensionUnit(pkgDimensionNode.Length));
                    var width     = new DecimalWithUnit(parseDimensionValue(pkgDimensionNode.Width), parseDimensionUnit(pkgDimensionNode.Width));
                    var height    = new DecimalWithUnit(parseDimensionValue(pkgDimensionNode.Height), parseDimensionUnit(pkgDimensionNode.Height));
                    var pkgWeight = new DecimalWithUnit(parseDimensionValue(pkgDimensionNode.Weight), parseDimensionUnit(pkgDimensionNode.Weight));
                    //eProduct.WeightBox2 = pkgWeight.Value;
                    //eProduct.WeightBox2Unit = pkgWeight.Unit;
                    eProduct.PackageDimension = new Dimension(length, width, height, pkgWeight);
                }

                // get the condition type and leadtime ship of the prouduct
                if (item.Offers.Offer != null)
                {
                    var offerNode = item.Offers.Offer.FirstOrDefault();
                    eProduct.Condition = offerNode == null ? string.Empty : offerNode.OfferAttributes.Condition;
                }

                return(eProduct);
            }
            catch (Exception ex)
            {
                _logger.LogError(LogEntryType.AmazonProduct, "Error in parsing the product item -> " + EisHelper.GetExceptionMessage(ex), ex.StackTrace);
                return(null);
            }
        }