1. 获取access_token

官网链接

1.1 申请门路 POST

地区URL
NAhttps://api.amazon.com/auth/o...
EUhttps://api.amazon.co.uk/auth...
FEhttps://api.amazon.co.jp/auth...

1.2 申请事例

curl \                                                                                                                                                            -X POST \    -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" \    --data "grant_type=refresh_token&client_id=YOUR_CLIENT_ID&refresh_token=YOUR_REFRESH_TOKEN&client_secret=YOUR_CLIENT_SECRET" \    https://api.amazon.com/auth/o2/token

1.3 代码实操

 //获取access_token的办法,以NA地区为例。HashMap<String, Object> map = new HashMap<>();map.put("grant_type","refresh_token");            map.put("refresh_token","your refresh_token");map.put("client_id","your client_id");map.put("client_secret","your client_secret");String getAccessUrl = "https://api.amazon.com/auth/o2/token";String result = HttpUtil.doPost(getAccessUrl,map,null);Map map1 = JSONObject.parseObject(result, Map.class);String access_token = (String) map1.get("access_token");System.out.println("access_token = " + access_token);

运行后果如下:

2. 获取profileId

官网连贯

2.1 申请门路 GET

https://advertising-api.amazon.com/v2/profiles

2.2 申请参数

参数名称可能的值(string)
apiProgrambilling, campaign, paymentMethod, store, report, account, posts
accessLeveledit, view
profileTypeFilterseller, vendor, agency
validPaymentMethodFiltertrue, false

申请头:

keyvalue
Content-Typeapplication/json
Authorizationaccess_token
Amazon-Advertising-API-ClientIdyour client_id

2.3 代码实操

String url = "https://advertising-api.amazon.com/v2/profiles?apiProgram=billing&profileTypeFilter=seller&validPaymentMethodFilter=true";HashMap<String, String> headerMap = new HashMap<>();headerMap.put("Content-Type","application/json");headerMap.put("Authorization","Bearer "+access_token);headerMap.put("Amazon-Advertising-API-ClientId","your client_id");String result1 = HttpUtil.doGet1(url,headerMap);List<Map> profileIds = JSONObject.parseArray(result1, Map.class);System.out.println("profileIds = " + profileIds);

运行后果如下:

3. 创立sp_campaign报表

官网链接

⚠️:此次官网文档的Responses有误,大家懂的都懂,已理论的Responses为主。

3.1 申请门路 POST

https://advertising-api.amazon.com/v2/sp/campaigns/report

3.2 申请参数

申请体参数:

keyValue
stateFilterenabled, paused, archived
campaignTypesponsoredProducts
segmentquery, placement
reportDateYYYYMMDD
metrics传入你想获取的值

申请头:

keyvalue
Content-Typeapplication/json
Amazon-Advertising-API-ClientIdyour client_id
Amazon-Advertising-API-ScopeprofileId(第二步获取的)
Authorizationaccess_token

3.3 代码实操

/***第二步获取的是个List,抉择符合条件的进行操作,本次实操抉择的是type=seller,profileId=xxxxxxxx,countryCode=CA*/String createSpReport = "https://advertising-api.amazon.com/v2/sp/campaigns/report";//结构申请头HashMap<String, String> headerMap1 = new HashMap<>();headerMap1.put("Content-Type","application/json");headerMap1.put("Amazon-Advertising-API-ClientId","your client_id");headerMap1.put("Amazon-Advertising-API-Scope",profileId.toString());headerMap1.put("Authorization","Bearer "+access_token);//申请体的参数HashMap<String, Object> paramMap = new HashMap<>();//paramMap.put("stateFilter", "enabled");//paramMap.put("campaignType","sponsoredProducts");//paramMap.put("segment","query");paramMap.put("reportDate","20210701");paramMap.put("metrics","campaignName,campaignId,impressions,clicks,cost,attributedConversions14d,attributedSales14d");String s2 = HttpUtil.doPostBody(createSpReport, JSONObject.toJSONString(paramMap),headerMap1);   System.out.println("s2 = " + s2);

运行后果如下:

4.获取表报下载地址

4.1 申请门路 GET

https://advertising-api.amazon.com/v2/reports/{reportId}

4.2 申请参数

申请头:

keyvalue
Content-Typeapplication/json
Authorizationaccess_token
Amazon-Advertising-API-ClientIdyour client_id
Amazon-Advertising-API-ScopeprofileId

4.3 代码实操

/**    当status=SUCCESS的时候阐明报表创立好了,这时去获取下载URL*/String getSpReport = "https://advertising-api.amazon.com/v2/reports/"+reportId;HashMap<String, String> header = new HashMap<>();header.put("Content-Type","application/json");header.put("Authorization","Bearer "+access_token);header.put("Amazon-Advertising-API-ClientId","your client_id");header.put("Amazon-Advertising-API-Scope",profileId.toString());String report = HttpUtil.doGet1(getSpReport, header);reportMap = JSONObject.parseObject(report, Map.class);String downUrl = reportMap.get("location").toString();

运行后果如下:

5. 下载报表一

官网链接

官网文档只有在sd广告中才有下载的API

5.1 申请门路 GET

步骤4中获取的downUrl

5.2 申请参数

申请头参数:

keyvalue
Content-Typeapplication/json
Authorizationaccess_token
Amazon-Advertising-API-ClientIdyour client_id
Amazon-Advertising-API-ScopeprofileId

5.3 代码实操

/**步骤4中获取downUrl并不是最终的下载地址,还需再一次申请获取。*/HashMap<String, String> headerMap2 = new HashMap<>();headerMap2.put("Content-Type","application/json");headerMap2.put("Authorization","Bearer "+access_token);headerMap2.put("Amazon-Advertising-API-ClientId","your client_id");headerMap2.put("Amazon-Advertising-API-Scope",profileId.toString());CloseableHttpResponse response = HttpUtil.doGetReturnResponse(downUrl, headerMap2);Header[] locations = response.getHeaders("Location");System.out.println("locations = " + locations);

6.下载报表二

6.1 申请门路 GET

步骤5中获取的url

6.2 申请参数

申请头参数:

keyvalue
Accept-Encodinggzip
Acceptapplication/octet-stream

6.3 代码实操

HashMap<String, String> header = new HashMap<>();header.put("Accept-Encoding","gzip");header.put("Accept","application/octet-stream");String s3 = HttpUtil.doGet3("url", header);System.out.println("s3 = " + s3);

执行后果如下:

7.依据campaignId获取portfolioId

官网文档

因为步骤六中获取的信息里不蕴含portfolioId,所以持续获取portfolioId。

7.1 申请门路 GET

https://advertising-api.amazon.com/v2/sp/campaigns

7.2 申请参数

本次申请只传campaignIdFilter参数,

申请头参数:

keyvalue
Authorizationaccess_token
Amazon-Advertising-API-ClientIdyour client_id
Amazon-Advertising-API-ScopeprofileId
Content-Typeapplication/json

7.3 代码实操

/**  campaignId_param为所有的campaignId以逗号拼接在一起*/String getPortfolioId_url = "https://advertising-api.amazon.com/v2/sp/campaigns?campaignIdFilter="+campaignId_param;HashMap<String, String> headerMap3 = new HashMap<>();headerMap3.put("Authorization","Bearer "+access_token);headerMap3.put("Amazon-Advertising-API-ClientId","your client_id");headerMap3.put("Amazon-Advertising-API-Scope",profileId.toString());headerMap3.put("Content-Type","application/json");String s4 = HttpUtil.doGet1(getPortfolioId_url, headerMap3);System.out.println("获取的portfolioId = " + s4);

执行后果就不演示了。

7.4 依据portfolioId去获取portfolio信息

官网文档

7.5 申请门路

https://advertising-api.amazon.com/v2/portfolios

7.6 申请参数

nametype形容
portfolioIdstring检索具备指定 ID 的投资组合
portfolioNamestring检索具备指定名称的投资组合
portfolioStatestring检索具备指定状态的投资组合

申请头参数:

keyvalue
Authorizationaccess_token
Amazon-Advertising-API-ClientIdyour client_id
Amazon-Advertising-API-ScopeprofileId
Content-Typeapplication/json

7.7 代码实操

/**    portfolioIdFilter是portfolioId以逗号拼接到一起的,然而一次最大拼接100个。*/String getPortfolios_url = "https://advertising-api.amazon.com/v2/portfolios?portfolioIdFilter="+portfolioIdFilter;HashMap<String, String> headerMap4 = new HashMap<>();headerMap4.put("Authorization","Bearer "+access_token);headerMap4.put("Amazon-Advertising-API-ClientId","your client_id");headerMap4.put("Amazon-Advertising-API-Scope",profileId.toString());headerMap4.put("Content-Type","application/json");String s5 = HttpUtil.doGet1(getPortfolios_url, headerMap4);System.out.println("获取的portfolio = " + s5); 

执行后果就不演示了。

到此sp广告数据已获取到,解决数据保留到文件即可。