【问题】
C#,AWS
对于某个item,想要获得所有的卖家,即offers,所以知道要去用
但是在得到了卖家的总体个数后,想要分别获得每个卖家的信息。主要是卖家的名字和价格。
价格是从返回信息中就有了:
<Offer> <OfferAttributes> <Condition>New</Condition> </OfferAttributes> <OfferListing> <OfferListingId>ErBLas%2B7TSZ%2BZ%2BiFVOa5ylIp1VH8lz%2BiQ%2FsnhfzHRulMaCZLKoeZHJd%2B1TFz3IDbtjsZcDmYV11DKEmqd5i3ArRZ8D%2FBCVblaq4SYOZrc1Y%3D</OfferListingId> <Price> <Amount>10199</Amount> <CurrencyCode>USD</CurrencyCode> <FormattedPrice>$101.99</FormattedPrice> </Price> <AmountSaved> <Amount>2101</Amount> <CurrencyCode>USD</CurrencyCode> <FormattedPrice>$21.01</FormattedPrice> </AmountSaved> <PercentageSaved>17</PercentageSaved> <Availability>Usually ships in 24 hours</Availability> <AvailabilityAttributes> <AvailabilityType>now</AvailabilityType> <MinimumHours>0</MinimumHours> <MaximumHours>0</MaximumHours> </AvailabilityAttributes> <IsEligibleForSuperSaverShipping>1</IsEligibleForSuperSaverShipping> </OfferListing> </Offer>
但是卖家的名字,即Merchant的name,却没找到。
【解决过程】
1。之前自己就想到了,是不是通过Merchant的id,再去利用OfferFull,去获得对应的Merchant的name。
但是不确定。
2.参考:
提到的:
How to get Seller Name from Amazon in ItemSearch using amazon API
果然是:
http://ecs.amazonaws.com/onca/xml? Service=AWSECommerceService& AWSAccessKeyId=[AWS Access Key ID]& Operation=ItemLookup& ItemId=B00008OE6I& ResponseGroup=OfferFull& <- important MerchantId=All& <- important Condition=All& <- important &Timestamp=[YYYY-MM-DDThh:mm:ssZ] &Signature=[Request Signature]
得到对应的结果:
<Items> ... <Item> ... <Offers> <TotalOffers>148</TotalOffers> <TotalOfferPages>15</TotalOfferPages> <Offer> <Merchant> <MerchantId>[Merchant Id]</MerchantId> <Name>[Merchant Name]</Name> ... </Merchant> ... </Offer> ...
所以自己也去试试,
后来是可以得到的merchant的name的,但是由于api更新:
而取消了MerchantId了,所以无法再得到MerchantId了。
【总结】
最后,是用代码:
/* * [Function] * get item offer full info * [Input] * single asin * eg: * B003F4TH6G * * [Output] * offer full response info * * [Note] */ public awsOfferFullInfo awsGetOfferFullInfo(string itemAsin, int itemPage = 1) { awsOfferFullInfo offerFullInfo = new awsOfferFullInfo(); IDictionary<string, string> reqDict = new Dictionary<string, String>(); reqDict["Service"] = "AWSECommerceService"; reqDict["Version"] = awsApiVersion; reqDict["Operation"] = "ItemLookup"; reqDict["IdType"] = "ASIN"; reqDict["ItemId"] = itemAsin; //http://docs.aws.amazon.com/AWSECommerceService/latest/DG/RG_OfferFull.html reqDict["ResponseGroup"] = "OfferFull"; //https://affiliate-program.amazon.co.uk/gp/advertising/api/detail/api-changes.html?ie=UTF8&pf_rd_t=501&ref_=amb_link_83388313_2&pf_rd_m=A3P5ROKL5A1OLE&pf_rd_p=&pf_rd_s=assoc-center-1&pf_rd_r=&pf_rd_i=assoc-api-detail-2-v2 //reqDict["MerchantId"] = "All"; reqDict["Condition"] = "All"; reqDict["ItemPage"] = itemPage.ToString(); String awsReqUrl = Sign(reqDict); XmlDocument xmlDocNoXmlns = awsReqUrlToXmlDoc_noXmlns(awsReqUrl); XmlNode itemsNode = xmlDocNoXmlns.SelectSingleNode("/ItemLookupResponse/Items"); if (requestIsValid(itemsNode)) { XmlNode itemNode = itemsNode.SelectSingleNode("./Item"); XmlNode asinNode = itemNode.SelectSingleNode("./ASIN"); offerFullInfo.Asin = asinNode.InnerText; XmlNode offerSummaryNode = itemNode.SelectSingleNode("./OfferSummary"); if (offerSummaryNode != null) { //1. TotalNew XmlNode totalNewNode = offerSummaryNode.SelectSingleNode("./TotalNew"); offerFullInfo.TotalNew = totalNewNode.InnerText; //"24" //2. TotalUsed XmlNode totalUsedNode = offerSummaryNode.SelectSingleNode("./TotalUsed"); offerFullInfo.TotalUsed = totalUsedNode.InnerText; //"1" //3. TotalCollectible XmlNode totalCollectibleNode = offerSummaryNode.SelectSingleNode("./TotalCollectible"); if (totalCollectibleNode != null) { offerFullInfo.TotalCollectible = totalCollectibleNode.InnerText; //"0" } //4. TotalRefurbished XmlNode totalRefurbishedNode = offerSummaryNode.SelectSingleNode("./TotalRefurbished"); if (totalRefurbishedNode != null) { offerFullInfo.TotalRefurbished = totalRefurbishedNode.InnerText; //"0" } } XmlNode offersNode = itemNode.SelectSingleNode("./Offers"); if (offersNode != null) { //5. TotalOffers XmlNode totalOffersNode = offersNode.SelectSingleNode("./TotalOffers"); offerFullInfo.TotalOffers = totalOffersNode.InnerText; //"1" //6. TotalOfferPages XmlNode totalOfferPagesNode = offersNode.SelectSingleNode("./TotalOffers"); offerFullInfo.TotalOfferPages = totalOfferPagesNode.InnerText; //"1" //7. process each Offer XmlNodeList offerNodeList = offersNode.SelectNodes("./Offer"); if ((offerNodeList != null) && (offerNodeList.Count > 0)) { offerFullInfo.offerList = new List<awsOffer>(); foreach (XmlNode offerNode in offerNodeList) { awsOffer singleOffer = new awsOffer(); //(1) Merchant XmlNode merchantNode = offerNode.SelectSingleNode("./Merchant"); if (merchantNode != null) { //https://affiliate-program.amazon.co.uk/gp/advertising/api/detail/api-changes.html?ie=UTF8&pf_rd_t=501&ref_=amb_link_83388313_2&pf_rd_m=A3P5ROKL5A1OLE&pf_rd_p=&pf_rd_s=assoc-center-1&pf_rd_r=&pf_rd_i=assoc-api-detail-2-v2 //so now seems no MerchantId anymore //XmlNode merchantIdNode = merchantNode.SelectSingleNode("./MerchantId"); //if (merchantIdNode != null) //{ // singleOffer.MerchantId = merchantIdNode.InnerText; //} XmlNode merchantNameNode = merchantNode.SelectSingleNode("./Name"); if (merchantNameNode != null) { singleOffer.MerchantName = merchantNameNode.InnerText; //"B&G International" } offerFullInfo.offerList.Add(singleOffer); } } } else { gLogger.Debug(String.Format("not found Offer List for ASIN={0}", itemAsin)); } } else { gLogger.Debug(String.Format("not found Offers for ASIN={0}", itemAsin)); } } return offerFullInfo; }
得到了结果:
<Offers> <TotalOffers>2</TotalOffers> <TotalOfferPages>1</TotalOfferPages> <MoreOffersUrl>http://www.amazon.com/gp/offer-listing/B003F4TH6G%3FSubscriptionId%3DAKIAJQAUAH2R4HCG63LQ%26tag%3Dcrifancom-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB003F4TH6G</MoreOffersUrl> <Offer> <Merchant> <Name>B&G International</Name> </Merchant> <OfferAttributes> <Condition>New</Condition> </OfferAttributes> <OfferListing> <OfferListingId>5olWrpsQDrzXlfbNDsX0OYhUTAEFqR1BeoqsGzCm42qwupPs8OKTduttQUOZjnS%2FIy9LqtA4mSVnhzaEKp87lzTWTGB1WuZo%2FBBCo5l%2BdjoegXqhViwaYSU9%2FXFA45RCihHHtW6w3QbpKV54L%2FWITA%3D%3D</OfferListingId> <Price> <Amount>10999</Amount> <CurrencyCode>USD</CurrencyCode> <FormattedPrice>$109.99</FormattedPrice> </Price> <AmountSaved> <Amount>3000</Amount> <CurrencyCode>USD</CurrencyCode> <FormattedPrice>$30.00</FormattedPrice> </AmountSaved> <PercentageSaved>21</PercentageSaved> <Availability>Usually ships in 1-2 business days</Availability> <AvailabilityAttributes> <AvailabilityType>now</AvailabilityType> <MinimumHours>24</MinimumHours> <MaximumHours>48</MaximumHours> </AvailabilityAttributes> <IsEligibleForSuperSaverShipping>0</IsEligibleForSuperSaverShipping> </OfferListing> </Offer> <Offer> <Merchant> <Name>Dean.Rowbot</Name> </Merchant> <OfferAttributes> <Condition>Used</Condition> </OfferAttributes> <OfferListing> <OfferListingId>f33GbR9lXeie8Cg6au6aj%2F8ENH72QGXlxPo1pvL4HSB2Ik%2ByeHhGzQHRAL9%2FAFDhDWcKqLULu1nbQWAS2uJvUYjQ4OLkkAHW%2BWS7oUYzuvDawNCJ0JLA6d1C1eDSxFuUevjRa%2FSQjRdWhKC%2BPmD5LQ%3D%3D</OfferListingId> <Price> <Amount>10000</Amount> <CurrencyCode>USD</CurrencyCode> <FormattedPrice>$100.00</FormattedPrice> </Price> <AmountSaved> <Amount>3999</Amount> <CurrencyCode>USD</CurrencyCode> <FormattedPrice>$39.99</FormattedPrice> </AmountSaved> <PercentageSaved>29</PercentageSaved> <Availability>Usually ships in 1-2 business days</Availability> <AvailabilityAttributes> <AvailabilityType>now</AvailabilityType> <MinimumHours>24</MinimumHours> <MaximumHours>48</MaximumHours> </AvailabilityAttributes> <IsEligibleForSuperSaverShipping>0</IsEligibleForSuperSaverShipping> </OfferListing> </Offer> //</Offers>
结论是:
1.通过Condition=All,ResponseGroup=OfferFull,是可以获得对应的Merchant的Name的。
2.但是由于api更新:
导致取消了MerchantId,所以无法得到MerchantId。即使加了MerchantId=All,也是无效的。
转载请注明:在路上 » 【已解决】C#中如何通过AWS去获得Merchant的Id和name,即MerchantId和商家名字