【记录】C#中尝试使用AWS中的BrowseNodeLookup实现主类别查询

【背景】

折腾:

【记录】继续优化C#版的AWS的ItemLookup接口

之后,接着需要去实现,通过AWS的BrowseNodeLookup:

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

去实现,类似于网页中的,Amazon的那30多个主的大类的产品的查询。

 

【解决过程】

1.其中,相关的Browse Node IDs参考:

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

 

2.通过代码:

        private static void browseNodeLookupTest(SignedRequestHelper helper)
        {
            /*
             * Here is an ItemLookup example where the request is stored as a dictionary.
             */
            IDictionary<string, string> reqDict = new Dictionary<string, String>();
            reqDict["Service"] = "AWSECommerceService";
            reqDict["Version"] = awsApiVersion;
            reqDict["Operation"] = "BrowseNodeLookup";
            //http://docs.aws.amazon.com/AWSECommerceService/latest/DG/BrowseNodeIDs.html
            //2619525011 -> Appliances
            reqDict["BrowseNodeId"] = "2619525011";
            reqDict["ResponseGroup"] = "BrowseNodeInfo";

            /*
             * The helper supports two forms of requests - dictionary form and query string form.
             */
            String requestUrl;
            
            requestUrl = helper.Sign(reqDict);
            WebRequest request = HttpWebRequest.Create(requestUrl);
            WebResponse response = request.GetResponse();
            XmlDocument doc = new XmlDocument();
            doc.Load(response.GetResponseStream());

            //for debug
            System.Console.WriteLine(doc.InnerXml);
        }

返回的xml是:

<BrowseNodeLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
    <OperationRequest>
        <RequestId>05520d7a-33ac-4913-96a9-6185a833892e</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="BrowseNodeLookup" />
            <Argument Name="Service" Value="AWSECommerceService" />
            <Argument Name="Signature" Value="SK3M+ywbdDp4nucUe5bdDZANf6UrY9z+4wUzIrGtQOY=" />
            <Argument Name="AssociateTag" Value="xxx" />
            <Argument Name="Version" Value="2011-08-02" />
            <Argument Name="BrowseNodeId" Value="2619525011" />
            <Argument Name="AWSAccessKeyId" Value="xxx" />
            <Argument Name="Timestamp" Value="2013-06-13T12:18:04Z" />
            <Argument Name="ResponseGroup" Value="BrowseNodeInfo" />
        </Arguments>
        <RequestProcessingTime>0.010225</RequestProcessingTime>
    </OperationRequest>
    <BrowseNodes>
        <Request>
            <IsValid>True</IsValid>
            <BrowseNodeLookupRequest>
                <BrowseNodeId>2619525011</BrowseNodeId>
                <ResponseGroup>BrowseNodeInfo</ResponseGroup>
            </BrowseNodeLookupRequest>
        </Request>
        <BrowseNode>
            <BrowseNodeId>2619525011</BrowseNodeId>
            <Name>Appliances</Name>
            <Children>
                <BrowseNode>
                    <BrowseNodeId>2619526011</BrowseNodeId>
                    <Name>Categories</Name>
                    <IsCategoryRoot>1</IsCategoryRoot>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2645269011</BrowseNodeId>
                    <Name>Featured Categories</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2645372011</BrowseNodeId>
                    <Name>Self Service</Name>
                </BrowseNode>
            </Children>
        </BrowseNode>
    </BrowseNodes>
</BrowseNodeLookupResponse>

很明显,没有出现,访问:

http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Dappliances&field-keywords=

中所出现的,那几十个子分类,从:

Air ConditionersWine Cellars

 

3.再去试试,其中的那个IsCategoryRoot为1的2619526011:

        private static void browseNodeLookupTest(SignedRequestHelper helper)
        {
            /*
             * Here is an ItemLookup example where the request is stored as a dictionary.
             */
            IDictionary<string, string> reqDict = new Dictionary<string, String>();
            reqDict["Service"] = "AWSECommerceService";
            reqDict["Version"] = awsApiVersion;
            reqDict["Operation"] = "BrowseNodeLookup";
            //http://docs.aws.amazon.com/AWSECommerceService/latest/DG/BrowseNodeIDs.html
            //2619525011 -> Appliances
            //reqDict["BrowseNodeId"] = "2619525011";

            //<BrowseNodeId>2619525011</BrowseNodeId>
            //<Name>Appliances</Name>
            //<Children>
            //    <BrowseNode>
            //        <BrowseNodeId>2619526011</BrowseNodeId>
            //        <Name>Categories</Name>
            //        <IsCategoryRoot>1</IsCategoryRoot>
            //    </BrowseNode>
            reqDict["BrowseNodeId"] = "2619526011";
            reqDict["ResponseGroup"] = "BrowseNodeInfo";

            /*
             * The helper supports two forms of requests - dictionary form and query string form.
             */
            String requestUrl;
            
            requestUrl = helper.Sign(reqDict);
            WebRequest request = HttpWebRequest.Create(requestUrl);
            WebResponse response = request.GetResponse();
            XmlDocument doc = new XmlDocument();
            doc.Load(response.GetResponseStream());

            //for debug
            System.Console.WriteLine(doc.InnerXml);
        }

返回xml是:

<BrowseNodeLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
    <OperationRequest>
        <RequestId>c1435dc8-a7a0-4167-92e9-80039bad49b6</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="BrowseNodeLookup" />
            <Argument Name="Service" Value="AWSECommerceService" />
            <Argument Name="Signature" Value="J1WgQm1G0D/eAEf6U8ZQBsdptHx+XFjPcMBmuA9bvrM=" />
            <Argument Name="AssociateTag" Value="xxx" />
            <Argument Name="Version" Value="2011-08-02" />
            <Argument Name="BrowseNodeId" Value="2619526011" />
            <Argument Name="AWSAccessKeyId" Value="xxx" />
            <Argument Name="Timestamp" Value="2013-06-13T12:39:29Z" />
            <Argument Name="ResponseGroup" Value="BrowseNodeInfo" />
        </Arguments>
        <RequestProcessingTime>0.002589</RequestProcessingTime>
    </OperationRequest>
    <BrowseNodes>
        <Request>
            <IsValid>True</IsValid>
            <BrowseNodeLookupRequest>
                <BrowseNodeId>2619526011</BrowseNodeId>
                <ResponseGroup>BrowseNodeInfo</ResponseGroup>
            </BrowseNodeLookupRequest>
        </Request>
        <BrowseNode>
            <BrowseNodeId>2619526011</BrowseNodeId>
            <Name>Categories</Name>
            <IsCategoryRoot>1</IsCategoryRoot>
            <Children>
                <BrowseNode>
                    <BrowseNodeId>3737671</BrowseNodeId>
                    <Name>Air Conditioners</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>267554011</BrowseNodeId>
                    <Name>Air Purifiers</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2632820011</BrowseNodeId>
                    <Name>Appliance Services</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2242350011</BrowseNodeId>
                    <Name>Appliance Warranties</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2686378011</BrowseNodeId>
                    <Name>Beer Keg Refrigerators</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2686328011</BrowseNodeId>
                    <Name>Beverage Refrigerators</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>495362</BrowseNodeId>
                    <Name>Ceiling Fans &amp; Accessories</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>678542011</BrowseNodeId>
                    <Name>Compact Refrigerators</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3741261</BrowseNodeId>
                    <Name>Cooktops</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>267557011</BrowseNodeId>
                    <Name>Dehumidifiers</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3741271</BrowseNodeId>
                    <Name>Dishwashers</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3737601</BrowseNodeId>
                    <Name>Fans</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3741331</BrowseNodeId>
                    <Name>Freezers</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>680343011</BrowseNodeId>
                    <Name>Garbage Disposals</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>267555011</BrowseNodeId>
                    <Name>Humidifiers</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2399939011</BrowseNodeId>
                    <Name>Ice Makers</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>510240</BrowseNodeId>
                    <Name>Irons, Steamers &amp; Accessories</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>289935</BrowseNodeId>
                    <Name>Microwave Ovens</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3741181</BrowseNodeId>
                    <Name>Parts &amp; Accessories</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3741441</BrowseNodeId>
                    <Name>Range Hoods</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3741411</BrowseNodeId>
                    <Name>Ranges</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3741361</BrowseNodeId>
                    <Name>Refrigerators</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>289913</BrowseNodeId>
                    <Name>Small Appliances</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>510182</BrowseNodeId>
                    <Name>Space Heaters</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3741451</BrowseNodeId>
                    <Name>Trash Compactors</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>510106</BrowseNodeId>
                    <Name>Vacuums &amp; Floor Care</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3741481</BrowseNodeId>
                    <Name>Wall Ovens</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2399955011</BrowseNodeId>
                    <Name>Warming Drawers</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>2383576011</BrowseNodeId>
                    <Name>Washers &amp; Dryers</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3741521</BrowseNodeId>
                    <Name>Wine Cellars</Name>
                </BrowseNode>
            </Children>
            <Ancestors>
                <BrowseNode>
                    <BrowseNodeId>2619525011</BrowseNodeId>
                    <Name>Appliances</Name>
                </BrowseNode>
            </Ancestors>
        </BrowseNode>
    </BrowseNodes>
</BrowseNodeLookupResponse>

就是我们所需要的结果了:

所有的子分类的ID和名字,从ID为3737671的Air Conditioners,到ID为3741521的Wine Cellars

4.然后就接着再去试试,第一个子分类,ID为3737671的Air Conditioners,看看能否得到产品数据:

            //<Children>
            //    <BrowseNode>
            //        <BrowseNodeId>3737671</BrowseNodeId>
            //        <Name>Air Conditioners</Name>
            //    </BrowseNode>
            reqDict["BrowseNodeId"] = "3737671";

            reqDict["ResponseGroup"] = "BrowseNodeInfo";

返回xml是:

<BrowseNodeLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
    <OperationRequest>
        <RequestId>54190300-c977-4b9b-8194-f91d6c2eef34</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="BrowseNodeLookup" />
            <Argument Name="Service" Value="AWSECommerceService" />
            <Argument Name="Signature" Value="m00R00zTRW7zr9gitSEJg15jYEWo2nSWtBbSo0s1soc=" />
            <Argument Name="AssociateTag" Value="xxx" />
            <Argument Name="Version" Value="2011-08-02" />
            <Argument Name="BrowseNodeId" Value="3737671" />
            <Argument Name="AWSAccessKeyId" Value="xxx" />
            <Argument Name="Timestamp" Value="2013-06-13T12:44:12Z" />
            <Argument Name="ResponseGroup" Value="BrowseNodeInfo" />
        </Arguments>
        <RequestProcessingTime>0.001778</RequestProcessingTime>
    </OperationRequest>
    <BrowseNodes>
        <Request>
            <IsValid>True</IsValid>
            <BrowseNodeLookupRequest>
                <BrowseNodeId>3737671</BrowseNodeId>
                <ResponseGroup>BrowseNodeInfo</ResponseGroup>
            </BrowseNodeLookupRequest>
        </Request>
        <BrowseNode>
            <BrowseNodeId>3737671</BrowseNodeId>
            <Name>Air Conditioners &amp; Accessories</Name>
            <Children>
                <BrowseNode>
                    <BrowseNodeId>3737761</BrowseNodeId>
                    <Name>Energy Star Qualified</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3737741</BrowseNodeId>
                    <Name>Multiroom</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>1193678</BrowseNodeId>
                    <Name>Portable</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3737751</BrowseNodeId>
                    <Name>Single-Room</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3737701</BrowseNodeId>
                    <Name>Slider Casement</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3737711</BrowseNodeId>
                    <Name>Wall</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3737721</BrowseNodeId>
                    <Name>Window</Name>
                </BrowseNode>
                <BrowseNode>
                    <BrowseNodeId>3737681</BrowseNodeId>
                    <Name>Parts &amp; Accessories</Name>
                </BrowseNode>
            </Children>
            <Ancestors>
                <BrowseNode>
                    <BrowseNodeId>3206324011</BrowseNodeId>
                    <Name>Heating, Cooling &amp; Air Quality</Name>
                    <Ancestors>
                        <BrowseNode>
                            <BrowseNodeId>1063498</BrowseNodeId>
                            <Name>Categories</Name>
                            <IsCategoryRoot>1</IsCategoryRoot>
                            <Ancestors>
                                <BrowseNode>
                                    <BrowseNodeId>1055398</BrowseNodeId>
                                    <Name>Home &amp; Kitchen</Name>
                                </BrowseNode>
                            </Ancestors>
                        </BrowseNode>
                    </Ancestors>
                </BrowseNode>
            </Ancestors>
        </BrowseNode>
    </BrowseNodes>
</BrowseNodeLookupResponse>

即,和网页中:

http://www.amazon.com/s/ref=lp_2619525011_nr_n_0?rh=n%3A2619525011%2Cn%3A!2619526011%2Cn%3A3737671&bbn=2619526011&ie=UTF8&qid=1371126812&rnid=2619526011

显示出来的效果一样的,

显示其子分类:

从第一个,ID为3737761的Energy Star Qualified,到最后一个,ID为3737681的Parts & Accessories

 

5.所以接着再去试试,第一个,ID为3737761的Energy Star Qualified的分类:

            //<BrowseNode>
            //    <BrowseNodeId>3737671</BrowseNodeId>
            //    <Name>Air Conditioners &amp; Accessories</Name>
            //    <Children>
            //        <BrowseNode>
            //            <BrowseNodeId>3737761</BrowseNodeId>
            //            <Name>Energy Star Qualified</Name>
            //        </BrowseNode>
            reqDict["BrowseNodeId"] = "3737761";

返回xml是:

<BrowseNodeLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
    <OperationRequest>
        <RequestId>6cbae38c-a4d5-43cf-9d7d-59c5c73e86f4</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="BrowseNodeLookup" />
            <Argument Name="Service" Value="AWSECommerceService" />
            <Argument Name="Signature" Value="aKg6+9WC65aO1N02j4BVzelX2iht6LSk5/9NHWrZdfU=" />
            <Argument Name="AssociateTag" Value="xxx" />
            <Argument Name="Version" Value="2011-08-02" />
            <Argument Name="BrowseNodeId" Value="3737761" />
            <Argument Name="AWSAccessKeyId" Value="xxx" />
            <Argument Name="Timestamp" Value="2013-06-13T12:47:59Z" />
            <Argument Name="ResponseGroup" Value="BrowseNodeInfo" />
        </Arguments>
        <RequestProcessingTime>0.002083</RequestProcessingTime>
    </OperationRequest>
    <BrowseNodes>
        <Request>
            <IsValid>True</IsValid>
            <BrowseNodeLookupRequest>
                <BrowseNodeId>3737761</BrowseNodeId>
                <ResponseGroup>BrowseNodeInfo</ResponseGroup>
            </BrowseNodeLookupRequest>
        </Request>
        <BrowseNode>
            <BrowseNodeId>3737761</BrowseNodeId>
            <Name>Energy Star Qualified</Name>
            <Ancestors>
                <BrowseNode>
                    <BrowseNodeId>3737671</BrowseNodeId>
                    <Name>Air Conditioners &amp; Accessories</Name>
                    <Ancestors>
                        <BrowseNode>
                            <BrowseNodeId>3206324011</BrowseNodeId>
                            <Name>Heating, Cooling &amp; Air Quality</Name>
                            <Ancestors>
                                <BrowseNode>
                                    <BrowseNodeId>1063498</BrowseNodeId>
                                    <Name>Categories</Name>
                                    <IsCategoryRoot>1</IsCategoryRoot>
                                    <Ancestors>
                                        <BrowseNode>
                                            <BrowseNodeId>1055398</BrowseNodeId>
                                            <Name>Home &amp; Kitchen</Name>
                                        </BrowseNode>
                                    </Ancestors>
                                </BrowseNode>
                            </Ancestors>
                        </BrowseNode>
                    </Ancestors>
                </BrowseNode>
            </Ancestors>
        </BrowseNode>
    </BrowseNodes>
</BrowseNodeLookupResponse>

就只有最后一级的浏览节点了。

但是此处希望是,网页浏览:

http://www.amazon.com/s/ref=lp_3737671_nr_n_0?rh=n%3A1055398%2Cn%3A!1063498%2Cn%3A3206324011%2Cn%3A3737671%2Cn%3A3737761&bbn=3737671&ie=UTF8&qid=1371127356&rnid=3737671

一样,可以获得该最叶子分类下,所有的产品的数据。

6.所以就想办法,在如何获得了某个browserNode前提下,查找旗下所有的产品。

然后看了看:

BrowseNodeLookup

的解释,觉得貌似是需要再去通过

ItemSearch

去找该分类下面的产品。

7.然后用了下面代码:

        private static void itemSearchTest(SignedRequestHelper helper)
        {
            /*
             * Here is an ItemLookup example where the request is stored as a dictionary.
             */
            IDictionary<string, string> reqDict = new Dictionary<string, String>();
            reqDict["Service"] = "AWSECommerceService";
            reqDict["Version"] = awsApiVersion;
            reqDict["Operation"] = "ItemSearch";

            reqDict["SearchIndex"] = "None";
            reqDict["ResponseGroup"] = "ItemIds";

            //Home & Kitchen ->  Heating, Cooling & Air Quality -> Air Conditioners & Accessories ->  Energy Star Qualified
            reqDict["BrowseNodeId"] = "3737761";

            String requestUrl = helper.Sign(reqDict);
            WebRequest request = HttpWebRequest.Create(requestUrl);
            WebResponse response = request.GetResponse();
            XmlDocument doc = new XmlDocument();
            doc.Load(response.GetResponseStream());
            //for debug
            System.Console.WriteLine(doc.InnerXml);
        }

结果出错了:

<?xml version="1.0"?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
    <OperationRequest>
        <RequestId>1e73a18a-cf53-4fdc-9891-6f7573e59aab</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="ItemSearch"/>
            <Argument Name="Service" Value="AWSECommerceService"/>
            <Argument Name="Signature" Value="dq2dDHLFmvxf/T1LfuvpNXJO32+4TsCoCdTIe3OhjeQ="/>
            <Argument Name="AssociateTag" Value="xxx"/>
            <Argument Name="Version" Value="2011-08-02"/>
            <Argument Name="BrowseNodeId" Value="3737761"/>
            <Argument Name="AWSAccessKeyId" Value="xxx"/>
            <Argument Name="Timestamp" Value="2013-06-13T13:03:43Z"/>
            <Argument Name="ResponseGroup" Value="ItemIds"/>
            <Argument Name="SearchIndex" Value="None"/>
        </Arguments>
        <RequestProcessingTime>0.0034130000000000</RequestProcessingTime>
    </OperationRequest>
    <Items>
        <Request>
            <IsValid>False</IsValid>
            <ItemSearchRequest>
                <ResponseGroup>ItemIds</ResponseGroup>
                <SearchIndex>None</SearchIndex>
            </ItemSearchRequest>
            <Errors>
                <Error>
                    <Code>AWS.InvalidEnumeratedParameter</Code>
                    <Message>The value you specified for SearchIndex is invalid. Valid values include [\n\t\t\t\t'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'\n\t\t\t\t].</Message>
                </Error>
                <Error>
                    <Code>AWS.MinimumParameterRequirement</Code>
                    <Message>Your request should have atleast 1 of the following parameters: 'Keywords','Title','Power','BrowseNode','Artist','Author','Actor','Director','AudienceRating','Manufacturer','MusicLabel','Composer','Publisher','Brand','Conductor','Orchestra','TextStream','Cuisine','City','Neighborhood'.</Message>
                </Error>
            </Errors>
        </Request>
    </Items>
</ItemSearchResponse>

8.所以,再去添加对应的SearchIndex:

            //reqDict["SearchIndex"] = "None";
            reqDict["SearchIndex"] = "HomeGarden";
            reqDict["ResponseGroup"] = "ItemIds";

            //Home & Kitchen ->  Heating, Cooling & Air Quality -> Air Conditioners & Accessories ->  Energy Star Qualified
            reqDict["BrowseNodeId"] = "3737761";

结果竟然还报错:

<?xml version="1.0"?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
    <OperationRequest>
        <RequestId>277f477a-0eab-4efe-8245-430913085f16</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="ItemSearch"/>
            <Argument Name="Service" Value="AWSECommerceService"/>
            <Argument Name="Signature" Value="IjY+aLZhigv0OJzJM5DyxY4E3NPtMHUuqUgLwKT8vIw="/>
            <Argument Name="AssociateTag" Value="xxx"/>
            <Argument Name="Version" Value="2011-08-02"/>
            <Argument Name="BrowseNodeId" Value="3737761"/>
            <Argument Name="AWSAccessKeyId" Value="xxx"/>
            <Argument Name="Timestamp" Value="2013-06-13T13:07:07Z"/>
            <Argument Name="ResponseGroup" Value="ItemIds"/>
            <Argument Name="SearchIndex" Value="HomeGarden"/>
        </Arguments>
        <RequestProcessingTime>0.0024860000000000</RequestProcessingTime>
    </OperationRequest>
    <Items>
        <Request>
            <IsValid>False</IsValid>
            <ItemSearchRequest>
                <ResponseGroup>ItemIds</ResponseGroup>
                <SearchIndex>HomeGarden</SearchIndex>
            </ItemSearchRequest>
            <Errors>
                <Error>
                    <Code>AWS.MinimumParameterRequirement</Code>
                    <Message>Your request should have atleast 1 of the following parameters: 'Keywords','Title','Power','BrowseNode','Artist','Author','Actor','Director','AudienceRating','Manufacturer','MusicLabel','Composer','Publisher','Brand','Conductor','Orchestra','TextStream','Cuisine','City','Neighborhood'.</Message>
                </Error>
            </Errors>
        </Request>
    </Items>
</ItemSearchResponse>

9.然后才发现,原来自己用的是BrowseNodeId而不是人家要的BrowseNode

所以再改为:

            //reqDict["SearchIndex"] = "None";
            reqDict["SearchIndex"] = "HomeGarden";
            reqDict["ResponseGroup"] = "ItemIds";

            //Home & Kitchen ->  Heating, Cooling & Air Quality -> Air Conditioners & Accessories ->  Energy Star Qualified
            //reqDict["BrowseNodeId"] = "3737761";
            reqDict["BrowseNode"] = "3737761";

终于可以得到所要的产品数据了:

<?xml version="1.0"?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
    <OperationRequest>
        <RequestId>d056191a-13d5-422a-a4fe-fc2b50d7c56d</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="ItemSearch"/>
            <Argument Name="Service" Value="AWSECommerceService"/>
            <Argument Name="Signature" Value="azUu3ODipJ9cIeYWwDIsTOeLN9Ozqidy0+kJbPpmwUI="/>
            <Argument Name="AssociateTag" Value="xxx"/>
            <Argument Name="BrowseNode" Value="3737761"/>
            <Argument Name="Version" Value="2011-08-02"/>
            <Argument Name="AWSAccessKeyId" Value="xxx"/>
            <Argument Name="Timestamp" Value="2013-06-13T13:10:06Z"/>
            <Argument Name="ResponseGroup" Value="ItemIds"/>
            <Argument Name="SearchIndex" Value="HomeGarden"/>
        </Arguments>
        <RequestProcessingTime>0.2485140000000000</RequestProcessingTime>
    </OperationRequest>
    <Items>
        <Request>
            <IsValid>True</IsValid>
            <ItemSearchRequest>
                <BrowseNode>3737761</BrowseNode>
                <ResponseGroup>ItemIds</ResponseGroup>
                <SearchIndex>HomeGarden</SearchIndex>
            </ItemSearchRequest>
        </Request>
        <TotalResults>51</TotalResults>
        <TotalPages>6</TotalPages>
        <MoreSearchResultsUrl>http://www.amazon.com/gp/redirect.html?camp=2025&amp;creative=386001&amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fsearch%3Fnode%3D3737761%26url%3Dsearch-alias%253Dgarden&amp;linkCode=xm2&amp;tag=xxx&amp;SubscriptionId=xxx</MoreSearchResultsUrl>
        <Item>
            <ASIN>B002QK9YZ4</ASIN>
        </Item>
        <Item>
            <ASIN>B00008WAMK</ASIN>
        </Item>
        <Item>
            <ASIN>B007XH7HS6</ASIN>
        </Item>
        <Item>
            <ASIN>B002SQHNH2</ASIN>
        </Item>
        <Item>
            <ASIN>B0050C71PA</ASIN>
        </Item>
        <Item>
            <ASIN>B007XFXBII</ASIN>
        </Item>
        <Item>
            <ASIN>B00BMZ8NO2</ASIN>
        </Item>
        <Item>
            <ASIN>B00C5VMJEC</ASIN>
        </Item>
        <Item>
            <ASIN>B002SQHVE2</ASIN>
        </Item>
        <Item>
            <ASIN>B007XGUGSU</ASIN>
        </Item>
    </Items>
</ItemSearchResponse>

10.但是还是要想办法,把剩余的5页的内容,都得到才可以。

继续参考:

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

去添加

ItemPage

Retrieves a specific page of items from all of the items in a response. Up to ten items are returned on a page unless Condition equals "All." In that case, ItemSearch returns up to three results per Condition, for example, three new, three used, three refurbished, and three collectible items. Or, for example, if there are no collectible or refurbished items being offered, ItemSearch returns three new and three used items. If you do not include ItemPage in your request, the first page is returned. The total number of pages of items found is returned in the TotalPages response tag.

Valid Values: 1 to 10 (1 to 5 when the search index = "All")

Type: String

Default: None

试试:

            //reqDict["SearchIndex"] = "None";
            reqDict["SearchIndex"] = "HomeGarden";
            reqDict["ResponseGroup"] = "ItemIds";

            //Home & Kitchen ->  Heating, Cooling & Air Quality -> Air Conditioners & Accessories ->  Energy Star Qualified
            //reqDict["BrowseNodeId"] = "3737761";
            reqDict["BrowseNode"] = "3737761";

            reqDict["ItemPage"] = "6";

结果为:

<?xml version="1.0"?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
    <OperationRequest>
        <RequestId>3f7ae8d0-0bd8-4a65-9217-20e2b1916549</RequestId>
        <Arguments>
            <Argument Name="Operation" Value="ItemSearch"/>
            <Argument Name="Service" Value="AWSECommerceService"/>
            <Argument Name="Signature" Value="YdQU63MVS790IbwOm7qiilymkHNQu0qZthubgvx/JPw="/>
            <Argument Name="ItemPage" Value="6"/>
            <Argument Name="AssociateTag" Value="xxx"/>
            <Argument Name="BrowseNode" Value="3737761"/>
            <Argument Name="Version" Value="2011-08-02"/>
            <Argument Name="AWSAccessKeyId" Value="xxx"/>
            <Argument Name="Timestamp" Value="2013-06-13T13:23:22Z"/>
            <Argument Name="ResponseGroup" Value="ItemIds"/>
            <Argument Name="SearchIndex" Value="HomeGarden"/>
        </Arguments>
        <RequestProcessingTime>0.1727870000000000</RequestProcessingTime>
    </OperationRequest>
    <Items>
        <Request>
            <IsValid>True</IsValid>
            <ItemSearchRequest>
                <BrowseNode>3737761</BrowseNode>
                <ItemPage>6</ItemPage>
                <ResponseGroup>ItemIds</ResponseGroup>
                <SearchIndex>HomeGarden</SearchIndex>
            </ItemSearchRequest>
        </Request>
        <TotalResults>51</TotalResults>
        <TotalPages>6</TotalPages>
        <MoreSearchResultsUrl>http://www.amazon.com/gp/redirect.html?camp=2025&amp;creative=386001&amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fsearch%3Fnode%3D3737761%26url%3Dsearch-alias%253Dgarden&amp;linkCode=xm2&amp;tag=xxx&amp;SubscriptionId=xxx</MoreSearchResultsUrl>
        <Item>
            <ASIN>B00A03QHJA</ASIN>
        </Item>
    </Items>
</ItemSearchResponse>

的确,是得到了所希望的数据:

之前显示共6页,共51个,每页10个,所以第6页,就只有1个。

如此,基本的功能:

查找浏览某个主分类,以及下面的子分类

以及子分类中,查找产品

就都基本跑通了。

 

【总结】

相对来说,还是不错的。

剩下就是写解析代码,实现对应的逻辑了。



5 Thoughts on “【记录】C#中尝试使用AWS中的BrowseNodeLookup实现主类别查询

  1. 您好,

    类别:长裤-2153568051没有子类别了,我用这个‘长裤-2153568051’查询
        reqDict[“Operation”] = “ItemSearch”;
        reqDict[“ResponseGroup”] = “ItemIds”;返回666个ItemId共67页,超过10页了,后面的57页都取不到,有什么办法取到超过10页的数据啊?谢谢!

  2. 我试过了,OK的。
    对于不熟英文的人来说,这个地方,真不好改。谢谢楼主。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量