最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【整理】AWS的API使用注意事项

Amazon crifan 5052浏览 0评论

背景知识:

【整理】Amazon的AWS(Associates Web Service,新改名为Product Advertising API)

【整理】Amazon产品信息抓取心得

AWS的API使用过程中,发现还是有很多事情需要注意的。

现总结如下:


AWS中的SearchIndex使用注意事项

详见:

【整理】AWS中的SearchIndex使用注意事项

一些细节方面的注意事项

现在AWS的API中已经不支持MerchantId了

参见:

Changes to the Product Advertising API

已经不再支持MerchantId了,所以,即使加上参数:

Condition=All

ResponseGroup=OfferFull

也无法再获得对应的MerchantId了:

【已解决】C#中如何通过AWS去获得Merchant的Id和name,即MerchantId和商家名字

 

 

通过ResponseGroup=Offers所获得的信息,都是指的是卖家的个数,而不是该产品还剩多少个

比如:

<Item>
    <ASIN>B003F4TH6G</ASIN>
    <ParentASIN>B00B2R5QPO</ParentASIN>
    <OfferSummary>
        <LowestNewPrice>
            <FormattedPrice>Too low to display</FormattedPrice>
        </LowestNewPrice>
        <LowestUsedPrice>
            <Amount>10000</Amount>
            <CurrencyCode>USD</CurrencyCode>
            <FormattedPrice>$100.00</FormattedPrice>
        </LowestUsedPrice>
        <TotalNew>26</TotalNew>
        <TotalUsed>1</TotalUsed>
        <TotalCollectible>0</TotalCollectible>
        <TotalRefurbished>0</TotalRefurbished>
    </OfferSummary>
    <Offers>
        <TotalOffers>2</TotalOffers>
        <TotalOfferPages>1</TotalOfferPages>

其中的TotalNew,TotalUsed,TotalCollectible,TotalRefurbished,

都只是针对卖家(Offer)而言的,不是针对,产品(Product或Item)而言的。

不要像我之前一样搞混了。。

通过AWS获得的产品的LargeImage只有一个

本来用浏览器查看某个产品,一般都是有5张图片的,

有的少的有2个,多个有7个或更多。

但是后来用AWS的API中的ResponseGroup=Images得到的却只有1张图片。

即:

【已搞懂】C#中通过AWS获得某产品的ResponseGroup=Images的所有的LargeImage

所以,只能:

通过AWS的ResponseGroup=Images去获得,单个的,Primary的LargeImage

然后再去通过:

http://www.amazon.com/gp/customer-media/product-gallery/ASIN

比如:

http://www.amazon.com/gp/customer-media/product-gallery/B003C9HUDQ

去访问页面,获得custom的所有的图片,包括LargeImage

注意在传入BrowseNodeId的时候,不要有多余的空格

之前不小心,把BrowseNodeId为字符串"2617941011",误写成了"2617941011 "

即,在末尾处,不小心加了个多余的空格,结果导致返回出错:

<BrowseNodes>
    <Request>
        <IsValid>True</IsValid>
        <BrowseNodeLookupRequest>
            <BrowseNodeId>2617941011 </BrowseNodeId>
            <ResponseGroup>BrowseNodeInfo</ResponseGroup>
        </BrowseNodeLookupRequest>
        <Errors>
            <Error>
                <Code>AWS.InvalidParameterValue</Code>
                <Message>2617941011  is not a valid value for BrowseNodeId. Please change this value and retry your request.</Message>
            </Error>
        </Errors>
    </Request>

注意到:

<BrowseNodeId>2617941011 </BrowseNodeId>

中间是"2617941011 "而不是"2617941011"

而后来去掉多余的空格,就返回正常的结果了:

<BrowseNodeLookupResponse>
    <OperationRequest>
        <HTTPHeaders>
            <Header Name="UserAgent" Value="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E" />
        </HTTPHeaders>
        <RequestId>dbb4ed8c-231d-49a6-933a-a235ca36a769</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="BrowseNodeLookup" />
            <Argument Name="Service" Value="AWSECommerceService" />
            <Argument Name="AssociateTag" Value="xxx" />
            <Argument Name="Version" Value="2011-08-01" />
            <Argument Name="Signature" Value="GKuxNEc5WLE2JN13hvoVkg4mnmzBJM5+BR0WXBQkhg0=" />
            <Argument Name="BrowseNodeId" Value="2617941011" />
            <Argument Name="AWSAccessKeyId" Value="xxx" />
            <Argument Name="Timestamp" Value="2013-06-20T06:09:43Z" />
            <Argument Name="ResponseGroup" Value="BrowseNodeInfo" />
        </Arguments>
        <RequestProcessingTime>0.041807</RequestProcessingTime>
    </OperationRequest>
    <BrowseNodes>
        <Request>
            <IsValid>True</IsValid>
            <BrowseNodeLookupRequest>
                <BrowseNodeId>2617941011</BrowseNodeId>
                <ResponseGroup>BrowseNodeInfo</ResponseGroup>
            </BrowseNodeLookupRequest>
        </Request>
        <BrowseNode>
            <BrowseNodeId>2617941011</BrowseNodeId>
            <Name>Arts, Crafts &amp; Sewing</Name>
            <Children>
                <BrowseNode>
                    <BrowseNodeId>2617942011</BrowseNodeId>
                    <Name>Categories</Name>
                    <IsCategoryRoot>1</IsCategoryRoot>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2617943011</BrowseNodeId>
                    <Name>Self Service</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2623321011</BrowseNodeId>
                    <Name>Featured Categories</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3026791011</BrowseNodeId>
                    <Name>Specialty Stores</Name>
                </BrowseNode>
            </Children>
        </BrowseNode>
    </BrowseNodes>
</BrowseNodeLookupResponse>

心得是:

BrowseNodeId必须是纯数字,不能有多余的其他值。

总之不要再犯这类低级错误。。。

Browse Node IDs中的PetSupplies=1063498不是真正的根节点分类

对于:

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/BrowseNodeIDs.html

中列出来的,所有的Browse Node IDs的名字,比如:Apparel,Appliances,。。。
都应该是,root category,最顶端的,根分类,才对。

然后其下有各种sub category。

但是,对于PetSupplies,对于US的话BrowseNodeId是1063498,

但是通过BrowseNodeLookup得到的BrowseNodeInfo的返回值却是:

<BrowseNodeLookupResponse>
    <OperationRequest>
        <HTTPHeaders>
            <Header Name="UserAgent" Value="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E" />
        </HTTPHeaders>
        <RequestId>a7ed7512-7adf-49d0-8911-33668d867aa7</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="BrowseNodeLookup" />
            <Argument Name="Service" Value="AWSECommerceService" />
            <Argument Name="BrowseNodeId" Value="1063498" />
            <Argument Name="AWSAccessKeyId" Value="xxx" />
            <Argument Name="Timestamp" Value="2013-07-04T07:45:46Z" />
            <Argument Name="Signature" Value="l05k0j8g5safWbF7XufhaIrJmG6/IJPM6JBuJMr6h74=" />
            <Argument Name="ResponseGroup" Value="BrowseNodeInfo" />
            <Argument Name="AssociateTag" Value="xxx" />
            <Argument Name="Version" Value="2011-08-01" />
        </Arguments>
        <RequestProcessingTime>0.002381</RequestProcessingTime>
    </OperationRequest>
    <BrowseNodes>
        <Request>
            <IsValid>True</IsValid>
            <BrowseNodeLookupRequest>
                <BrowseNodeId>1063498</BrowseNodeId>
                <ResponseGroup>BrowseNodeInfo</ResponseGroup>
            </BrowseNodeLookupRequest>
        </Request>
        <BrowseNode>
            <BrowseNodeId>1063498</BrowseNodeId>
            <Name>Categories</Name>
            <IsCategoryRoot>1</IsCategoryRoot>
            <Children>
                <BrowseNode>
                    <BrowseNodeId>3206325011</BrowseNodeId>
                    <Name>Kids' Home Store</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>284507</BrowseNodeId>
                    <Name>Kitchen &amp; Dining</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>1063252</BrowseNodeId>
                    <Name>Bedding</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>1063236</BrowseNodeId>
                    <Name>Bath</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>1063306</BrowseNodeId>
                    <Name>Furniture</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>1063278</BrowseNodeId>
                    <Name>Home Décor</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3736081</BrowseNodeId>
                    <Name>Artwork</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>13679381</BrowseNodeId>
                    <Name>Seasonal Décor</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3206324011</BrowseNodeId>
                    <Name>Heating, Cooling &amp; Air Quality</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>510240</BrowseNodeId>
                    <Name>Irons &amp; Steamers</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>510106</BrowseNodeId>
                    <Name>Vacuums &amp; Floor Care</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3610841</BrowseNodeId>
                    <Name>Storage &amp; Organization</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>10802561</BrowseNodeId>
                    <Name>Cleaning Supplies</Name>
                </BrowseNode>
            </Children>
            <Ancestors>
                <BrowseNode>
                    <BrowseNodeId>1055398</BrowseNodeId>
                    <Name>Home &amp; Kitchen</Name>
                </BrowseNode>
            </Ancestors>
        </BrowseNode>
    </BrowseNodes>
</BrowseNodeLookupResponse>

即,1063498的这个BrowseNodeId,其实是root category为BrowseNodeId=1055398的Home & Kitchen的sub category。

即,1063498本身不是root category。

由此带来的问题是:

本来,正常的逻辑是去按照:

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/BrowseNodeIDs.html

去列出来,所有的root category,结果当对于BrowseNodeId=1063498的PetSupplies,却由于其不是root category,而导致整个逻辑关系,都不对了。

导致对于1063498去BrowseNodeLookup得到的BrowseNodeInfo,得到所有的sub category的BrowseNodeId,但是其内容看起来,却明显是Home & Kitchen的sub category,而不是PetSupplies的sub category。

然后,又专门去看了看对于1055398这个真正的根目录分类的子节点是哪些,结果是:

<BrowseNodeLookupResponse>
    <OperationRequest>
        <HTTPHeaders>
            <Header Name="UserAgent" Value="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E" />
        </HTTPHeaders>
        <RequestId>a5605c52-69c2-49ce-bcf7-53651b674bc3</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="BrowseNodeLookup" />
            <Argument Name="Service" Value="AWSECommerceService" />
            <Argument Name="Signature" Value="oluzi5p/j0wNtpprg/B/e9i4mG+zVL1LPqY+g6DbrzU=" />
            <Argument Name="AssociateTag" Value="xxx" />
            <Argument Name="Version" Value="2011-08-01" />
            <Argument Name="BrowseNodeId" Value="1055398" />
            <Argument Name="AWSAccessKeyId" Value="xxx" />
            <Argument Name="Timestamp" Value="2013-07-04T08:01:09Z" />
            <Argument Name="ResponseGroup" Value="BrowseNodeInfo" />
        </Arguments>
        <RequestProcessingTime>0.001986</RequestProcessingTime>
    </OperationRequest>
    <BrowseNodes>
        <Request>
            <IsValid>True</IsValid>
            <BrowseNodeLookupRequest>
                <BrowseNodeId>1055398</BrowseNodeId>
                <ResponseGroup>BrowseNodeInfo</ResponseGroup>
            </BrowseNodeLookupRequest>
        </Request>
        <BrowseNode>
            <BrowseNodeId>1055398</BrowseNodeId>
            <Name>Home &amp; Kitchen</Name>
            <Children>
                <BrowseNode>
                    <BrowseNodeId>1063498</BrowseNodeId>
                    <Name>Categories</Name>
                    <IsCategoryRoot>1</IsCategoryRoot>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>258599011</BrowseNodeId>
                    <Name>Home &amp; Kitchen Filtered Stores</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>13900811</BrowseNodeId>
                    <Name>Home &amp; Kitchen Features</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>13900821</BrowseNodeId>
                    <Name>Kitchen &amp; Dining Features</Name>
                </BrowseNode>
            </Children>
        </BrowseNode>
    </BrowseNodes>
</BrowseNodeLookupResponse>

即,对于1055398=Home & Kitchen,子节点包括:

Categories

Home & Kitchen Filtered Stores

Home & Kitchen Features

Kitchen & Dining Features

对此,后来也找到了对应的,有人整理出来的上述的内容了:

Amazon.com > Home & Kitchen

所以,看来很明显是:

amazon服务器那边,对于PetSupplies=1063498早就变成了真正的根目录节点:Home & Kitchen=1055398

但是此处的文档这里:

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/BrowseNodeIDs.html

却没及时更新而已。

后来,又经过折腾发现,如果针对Home & Kitchen去做search的话,即,用任何一个子节点,比如678522011,都会出问题:

<Request>
    <IsValid>False</IsValid>
    <ItemSearchRequest>
        <Availability>Available</Availability>
        <BrowseNode>678522011</BrowseNode>
        <Condition>All</Condition>
        <ItemPage>1</ItemPage>
        <ResponseGroup>ItemIds</ResponseGroup>
        <SearchIndex>HomeAndKitchen</SearchIndex>
    </ItemSearchRequest>
    <Errors>
        <Error>
            <Code>AWS.InvalidEnumeratedParameter</Code>
            <Message>The value you specified for SearchIndex is invalid. Valid values include [
                'All','Apparel','Appliances','ArtsAndCrafts','Automotive','Baby','Beauty','Blended','Books','Classical','Collectibles','DVD','DigitalMusic','Electronics','GiftCards','GourmetFood','Grocery','HealthPersonalCare','HomeGarden','Industrial','Jewelry','KindleStore','Kitchen','LawnAndGarden','Marketplace','MP3Downloads','Magazines',,'Miscellaneous','Music','MusicTracks','MusicalInstruments','MobileApps','OfficeProducts','OutdoorLiving','PCHardware','PetSupplies','Photo','Shoes','Software','SportingGoods','Tools','Toys','UnboxVideo','VHS','Video','VideoGames','Watches','Wireless','WirelessAccessories'
                ].</Message>
        </Error>
    </Errors>
</Request>

而经过尝试发现, 其实,此处的SearchIndex不论用:

HomeAndKitchen

Home & Kitchen

都会出错。

然后最后换为:

HomeGarden

即可。

即:

之前

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/BrowseNodeIDs.html

中的HomeGarden=285080,已经失效,实际上变成了:

HomeGarden=1055398

(但是网页浏览的时候,比如

http://www.amazon.com/Best-Sellers/zgbs

中看到的是: Home & Kitchen

然后,其下的任何一个子节点,sub category,去做BrowseNodeLookup的时候,需要指定对应的SearchIndex为HomeGarden

然后才可以正常返回内容,才不会出现上面的那个InvalidEnumeratedParameter的。


其他更多内容,参见:

【注意事项】AWS中的Toys的BrowseNodeId=493964不是真正的根分类

【整理】AWS中的SearchIndex不再支持LawnGarden,已改名为LawnAndGarden

【整理】AWS中的SearchIndex使用注意事项

转载请注明:在路上 » 【整理】AWS的API使用注意事项

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.219 seconds, using 22.27MB memory