Why is ItemLookup not returning any price informat

2019-03-25 04:58发布

问题:

I am using the Product Advertising API to do an ItemLookup on a valid ASIN, requesting all three flavors of offer groups, and I am not getting back any price information. Yet when I look at the same product on Amazon, it's in stock and has a valid price. I believe everything I need to describe the issue would be in the ItemLookupResponse returned in response to my ItemLookup Request, since it echos back all the parameters:

<ItemLookupResponse>
    <OperationRequest>
        <HTTPHeaders>
            <Header Name="UserAgent"
                Value="Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0" />
        </HTTPHeaders>
        <RequestId>09872c13-5297-4401-ad15-e631b05c7a8f</RequestId>
        <Arguments>
            <Argument Name="Condition" Value="All" />
            <Argument Name="Operation" Value="ItemLookup" />
            <Argument Name="Service" Value="AWSECommerceService" />
            <Argument Name="Signature"
                Value="<omitted>" />
            <Argument Name="MerchantId" Value="All" />
            <Argument Name="AssociateTag" Value="<omitted>" />
            <Argument Name="Version" Value="2011-08-01" />
            <Argument Name="ItemId" Value="B00828J7PG" />
            <Argument Name="IdType" Value="ASIN" />
            <Argument Name="AWSAccessKeyId" Value="<omitted>" />
            <Argument Name="Timestamp" Value="2012-10-16T20:30:28.000Z" />
            <Argument Name="ResponseGroup" Value="Offers,OfferFull,OfferSummary" />
        </Arguments>
        <RequestProcessingTime>0.0194200000000000</RequestProcessingTime>
    </OperationRequest>
    <Items>
        <Request>
            <IsValid>True</IsValid>
            <ItemLookupRequest>
                <Condition>All</Condition>
                <IdType>ASIN</IdType>
                <MerchantId>Deprecated</MerchantId>
                <ItemId>B00828J7PG</ItemId>
                <ResponseGroup>Offers</ResponseGroup>
                <ResponseGroup>OfferFull</ResponseGroup>
                <ResponseGroup>OfferSummary</ResponseGroup>
                <VariationPage>All</VariationPage>
            </ItemLookupRequest>
        </Request>
        <Item>
            <ASIN>B00828J7PG</ASIN>
            <ParentASIN>B00828J7PG</ParentASIN>
            <OfferSummary>
                <TotalNew>0</TotalNew>
                <TotalUsed>0</TotalUsed>
                <TotalCollectible>0</TotalCollectible>
                <TotalRefurbished>0</TotalRefurbished>
            </OfferSummary>
            <Offers>
                <TotalOffers>0</TotalOffers>
                <TotalOfferPages>0</TotalOfferPages>
                <MoreOffersUrl>0</MoreOffersUrl>
            </Offers>
        </Item>
    </Items>
</ItemLookupResponse><

回答1:

Edit:

An item returned by the Amazon Product API can represent either a single variation item (a single size and/or a single color) or a variation parent. When a single variation item is returned, you just have to use the same approach as you initially did and you'll be able to fetch the price.

A parent variation item (your case), however, is not associated with any offer (price), because it is an abstraction of a product and acts as a container for the existing product variations (different sizes, colors).

In this case, every variation contained within the variation parent has its own price and you can simply iterate through the set of variations and fetch the price you need.

Adding the Variations response group to your search/look up request is crucial, so don't omit it.

The request body:

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
   <env:Header/>
   <env:Body>
       <ns1:ItemLookup xmlns='http://webservices.amazon.com/AWSECommerceService/2011-08-01' xmlns:ns1='http://webservices.amazon.com/AWSECommerceService/2011-08-01'>
           <AWSAccessKeyId>xxxxxxxxxxxxxxxxxxx</AWSAccessKeyId>
           <AssociateTag>xxxxxxxx</AssociateTag>
           <Request>
               <IdType>ASIN</IdType>
               <MerchantId>All</MerchantId>
               <ItemId>B008M4TB9C</ItemId>
               <ResponseGroup>Variations</ResponseGroup>
           </Request>
           <Signature>xxxxxxxx</Signature>
           <Timestamp>2012-12-13T23:49:27Z</Timestamp>
       </ns1:ItemLookup>
   </env:Body>
</env:Envelope>

The response body.

A price for a single variation can be found under:

Item->Variations->Item->Offer->OfferListing->Price.

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
    <env:Body>
       <ItemLookupResponse xmlns='http://webservices.amazon.com/AWSECommerceService/2011-08-01'>
         <OperationRequest>
           <HTTPHeaders>
             <Header Name='UserAgent' Value='JBossRemoting - 2.5.1 (Flounder)'/>
           </HTTPHeaders>
           <RequestId>05c3ecdd-60ae-4a87-8bcb-70f80a5f5d5b</RequestId>
           <Arguments>
             <Argument Name='Service' Value='AWSECommerceService'/>
           </Arguments>
           <RequestProcessingTime>0.1092920000000000</RequestProcessingTime>
         </OperationRequest>
         <Items>
           <Request>
            <IsValid>True</IsValid>
            <ItemLookupRequest>
              <IdType>ASIN</IdType>
              <MerchantId>Deprecated</MerchantId>
              <ItemId>B008M4TB9C</ItemId>
              <ResponseGroup>Variations</ResponseGroup>
              <VariationPage>All</VariationPage>
            </ItemLookupRequest>
          </Request>
          <Item>
            <ASIN>B008M4TB9C</ASIN>
            <ParentASIN>B008M4TB9C</ParentASIN>  
            <VariationSummary>
              <LowestPrice>
                <Amount>49500</Amount>
                <CurrencyCode>USD</CurrencyCode>
                <FormattedPrice>$495.00</FormattedPrice>
              </LowestPrice>
              <HighestPrice>
                <Amount>49500</Amount>
                <CurrencyCode>USD</CurrencyCode>
                <FormattedPrice>$495.00</FormattedPrice>
              </HighestPrice>
            </VariationSummary>  
            <Variations>
                  ...
              <Item>
                <ASIN>B007HQYIBW</ASIN>
                <ParentASIN>B008M4TB9C</ParentASIN>
                   ...
                <ImageSets>
                   ...
                </ImageSets>
                <ItemAttributes>
                    ....
                </ItemAttributes>
                <VariationAttributes>
                  <VariationAttribute>
                    <Name>Color</Name>
                    <Value>Black</Value>
                  </VariationAttribute>
                  <VariationAttribute>
                    <Name>Size</Name>
                    <Value>6 B(M) US</Value>
                  </VariationAttribute>
                </VariationAttributes>
                <Offers>
                  <Offer>
                    <Merchant>
                      <Name>Amazon.com</Name>
                    </Merchant>
                    <OfferAttributes>
                     <Condition>New</Condition>
                    </OfferAttributes>
                    <OfferListing>
                      <OfferListingId>xxxxxxxxxx</OfferListingId>
                      <Price>
                        <Amount>49500</Amount>
                        <CurrencyCode>USD</CurrencyCode>
                        <FormattedPrice>$495.00</FormattedPrice>
                      </Price>
                      <Availability>Usually ships in 24 hours</Availability>
                      <AvailabilityAttributes>
                       <AvailabilityType>now</AvailabilityType>
                       <MinimumHours>0</MinimumHours>
                       <MaximumHours>0</MaximumHours>
                      </AvailabilityAttributes>
                    <IsEligibleForSuperSaverShipping>1</IsEligibleForSuperSaverShipping>
                    </OfferListing>
                  </Offer>
                </Offers>
              </Item>
          </Variations>
        </Item>
         ...
       </Items>
      </ItemLookupResponse>
     </env:Body>
   </env:Envelope>