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

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

Amazon crifan 4011浏览 0评论

【问题】

C#,AWS

对于某个item,想要获得所有的卖家,即offers,所以知道要去用

Offers response group

但是在得到了卖家的总体个数后,想要分别获得每个卖家的信息。主要是卖家的名字和价格。

价格是从返回信息中就有了:

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.参考:

Merchant Name wrong – Why

提到的:

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更新:

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

而取消了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>
    <Offer>
        <Merchant>
            <Name>B&amp;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更新:

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

导致取消了MerchantId,所以无法得到MerchantId。即使加了MerchantId=All,也是无效的。

转载请注明:在路上 » 【已解决】C#中如何通过AWS去获得Merchant的Id和name,即MerchantId和商家名字

发表我的评论
取消评论

表情

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

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