num_iid:淘宝商品 ID。area_id:区域 ID,用于指定收货地址。sku:是否返回指定区域的 SKU 信息(可选)
。express_fee:快递费用。ems_fee:EMS 费用。post_fee:平邮费用
。HttpClient 库进行 HTTP 请求,使用
Jackson 库进行 JSON 解析。<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency></dependencies>import java.util.TreeMap;import java.util.Map;public class SignatureUtil {
public static String generateSign(Map<String, String> params, String appSecret) {
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append(entry.getKey()).append(entry.getValue());
}
sb.append(appSecret);
return md5(sb.toString()).toUpperCase();
}
private static String md5(String str) {
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(str.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X", b));
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return "";
}
}}import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import com.fasterxml.jackson.databind.ObjectMapper;public class TaobaoItemFeeCrawler {
private static final String API_URL = "https://gw.api.taobao.com/router/rest";
public static String getItemFee(String appKey, String appSecret, String numIid, String areaId) {
try (CloseableHttpClient client = HttpClients.createDefault()) {
String timestamp = java.time.LocalDateTime.now().toString();
TreeMap<String, String> params = new TreeMap<>();
params.put("method", "taobao.item_fee");
params.put("app_key", appKey);
params.put("timestamp", timestamp);
params.put("v", "2.0");
params.put("format", "json");
params.put("sign_method", "md5");
params.put("num_iid", numIid);
params.put("area_id", areaId);
String sign = SignatureUtil.generateSign(params, appSecret);
params.put("sign", sign);
StringBuilder urlBuilder = new StringBuilder(API_URL + "?");
for (Map.Entry<String, String> entry : params.entrySet()) {
urlBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
String url = urlBuilder.toString().substring(0, urlBuilder.length() - 1);
HttpGet request = new HttpGet(url);
String responseBody = EntityUtils.toString(client.execute(request).getEntity());
return responseBody;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void parseItemFee(String jsonResponse) {
try {
ObjectMapper mapper = new ObjectMapper();
ItemFeeResponse response = mapper.readValue(jsonResponse, ItemFeeResponse.class);
System.out.println("商品ID: " + response.getItem().getNumIid());
System.out.println("快递费用: " + response.getItem().getExpressFee());
System.out.println("EMS 费用: " + response.getItem().getEmsFee());
System.out.println("平邮费用: " + response.getItem().getPostFee());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String appKey = "YOUR_APP_KEY";
String appSecret = "YOUR_APP_SECRET";
String numIid = "123456789";
String areaId = "152501";
String response = getItemFee(appKey, appSecret, numIid, areaId);
if (response != null) {
parseItemFee(response);
}
}
static class ItemFeeResponse {
private Item item;
public Item getItem() {
return item;
}
}
static class Item {
private String numIid;
private String expressFee;
private String emsFee;
private String postFee;
public String getNumIid() {
return numIid;
}
public String getExpressFee() {
return expressFee;
}
public String getEmsFee() {
return emsFee;
}
public String getPostFee() {
return postFee;
}
}}{
"item": {
"num_iid": "123456789",
"express_fee": "6.00",
"ems_fee": "10.00",
"post_fee": "5.00"
}}num_iid:商品 ID
。express_fee:快递费用
。ems_fee:EMS 费用
。post_fee:平邮费用
。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70041666/viewspace-3075754/ ,如需转载,请注明出处,否则将追究法律责任。