【问题】
C#,AWS
对于某个item,想要获得所有的卖家,即offers,所以知道要去用
但是在得到了卖家的总体个数后,想要分别获得每个卖家的信息。主要是卖家的名字和价格。
价格是从返回信息中就有了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | < 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
果然是:
1 2 3 4 5 6 7 8 9 10 | 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] |
得到对应的结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < 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了。
【总结】
最后,是用代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | /* * [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; reqDict[ "ResponseGroup" ] = "OfferFull" ; //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 ) { //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; } |
得到了结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | < 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和商家名字