×

实战代码示例:通过 API 接口获取 1688 商品详情信息数据

admin admin 发表于2025-10-14 17:33:28 浏览103 评论0

抢沙发发表评论

在电商领域,获取商品详情数据对于市场分析、竞品研究等场景至关重要。1688 作为国内知名的 B2B 电商平台,提供了丰富的 API 接口,允许开发者通过编程方式获取商品的详细信息。以下将详细介绍如何通过 API 接口获取 1688 商品详情数据,包括接口申请、代码实现和数据解析

一、前期准备:获取调用权限

在调用 1688 商品详情 API 接口前,需完成以下准备工作,确保具备合法调用资格
  1. 注册 1688 开放平台账号
    • 访问 1688 开放平台官网,注册开发者账号并完成实名认证(个人或企业认证)。
  2. 创建应用
    • 登录后进入「开发者中心」,创建一个应用(如“商品详情查询工具”),选择应用类型(如“网站应用”“移动应用”)。
    • 应用创建后,会获得唯一的 App KeyApp Secret(用于接口调用时的身份验证)。
  3. 申请接口权限
    • 在应用的「接口管理」中,找到 item.get 接口,申请调用权限。
    • 注意:该接口可能有调用次数限制(免费额度或付费套餐),需根据需求选择合适的权限套餐。

二、核心接口实战:获取商品详情数据

(一)接口说明

以下是获取 1688 商品详情的核心 API 接口
  • 接口名称item.get
  • 功能:通过商品 ID(num_iid)获取商品详情,支持实时返回商品基本信息(标题、主图、详情描述)、价格信息(批发价、起订量、阶梯价格)、SKU 规格(颜色、尺寸、对应价格 / 库存)、卖家信息(店铺名称、地址、资质)、物流信息(发货地、运费模板)等。

(二)Python 调用示例

以下是一个使用 Python 调用 item.get 接口获取商品详情的完整示例代码
Python
复制
import requestsimport hashlibimport timeimport randomimport stringdef get_1688_product_detail(api_key, api_secret, product_id):
    """
    通过 1688 开放平台 API 获取商品详情
    需要先在 open.1688.com 申请 API 权限
    """
    # API 基础信息
    api_url = "http://gw.open.1688.com/openapi/param2/1/cn.alibaba.open/offer.get/{app_key}".format(
        app_key=api_key    )

    # 公共参数
    params = {
        'offerId': product_id,
        'access_token': 'your_access_token',  # 需要通过 OAuth 获取
        '_aop_timestamp': str(int(time.time() * 1000)),
        '_aop_nonce': ''.join(random.choices(string.ascii_letters + string.digits, k=8)),
    }

    # 生成签名
    sign_str = api_secret + ''.join([f'{k}{v}' for k, v in sorted(params.items())]) + api_secret
    sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
    params['_aop_signature'] = sign    try:
        response = requests.get(api_url, params=params)
        response.raise_for_status()
        data = response.json()

        if data.get('error_response'):
            return {"error": data['error_response'].get('error_msg', 'Unknown error')}
        return data    except requests.exceptions.RequestException as e:
        return {"error": str(e)}# 使用示例(需要替换为你的实际 API 密钥)# product_data = get_1688_product_detail("your_api_key", "your_api_secret", "1234567890")# print(product_data)

(三)Java 调用示例

以下是一个使用 Java 调用 item.get 接口获取商品详情的完整示例代码
java
复制
import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import com.alibaba.fastjson.JSONObject;import java.util.*;import java.security.MessageDigest;import java.net.URLEncoder;public class AlibabaProductApi {
    // 配置参数(替换为实际信息)
    private static final String APP_KEY = "你的appkey";
    private static final String APP_SECRET = "你的secret";
    private static final String PRODUCT_ID = "694567890123";
    private static final String API_URL = "https://gw.open.1688.com/openapi/param2/1/com.alibaba.product/alibaba.product.get";

    public static void main(String[] args) throws Exception {
        // 1. 组装参数(TreeMap 自动按 key 升序排序)
        Map<String, String> params = new TreeMap<>();
        params.put("app_key", APP_KEY);
        params.put("method", "alibaba.product.get");
        params.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        params.put("v", "1.0");
        params.put("format", "json");
        params.put("productId", PRODUCT_ID);
        params.put("fields", "productId,title,priceRange,moq,stock");

        // 2. 生成签名
        StringBuilder signStr = new StringBuilder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            signStr.append(entry.getKey()).append("=")
                   .append(URLEncoder.encode(entry.getValue(), "UTF-8")).append("&");
        }
        // 拼接 secret 并去除末尾 &
        signStr.append("secret=").append(APP_SECRET);
        String sign = md5(signStr.toString()).toUpperCase();
        params.put("sign", sign);

        // 3. 构建请求 URL
        StringBuilder urlBuilder = new StringBuilder(API_URL).append("?");
        for (Map.Entry<String, String> entry : params.entrySet()) {
            urlBuilder.append(entry.getKey()).append("=")
                     .append(URLEncoder.encode(entry.getValue(), "UTF-8")).append("&");
        }
        String url = urlBuilder.substring(0, urlBuilder.length() - 1);

        // 4. 发送请求与解析
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(url).build();
        try (Response response = client.newCall(request).execute()) {
            String result = response.body().string();
            JSONObject json = JSONObject.parseObject(result);
            if (json.getBoolean("success")) {
                JSONObject product = json.getJSONObject("result").getJSONObject("product");
                System.out.println("商品标题:" + product.getString("title"));
                System.out.println("起订量:" + product.getString("moq") + "件");
            } else {
                System.out.println("错误:" + json.getString("errorMessage"));
            }
        }
    }

    // MD5 加密工具
    private static String md5(String str) throws Exception {
        MessageDigest md = 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();
    }}

三、注意事项与优化建议

(一)遵守 API 使用规则

  1. 遵守 1688 开放平台的 API 使用规则,不要频繁发起请求或超出请求限制
  2. 保护好 AppKeyAppSecret,不要泄露给任何人
  3. 及时关注 1688 开放平台的更新与变动,以便及时调整代码以适应新的 API 接口

(二)优化代码性能

  1. 数据缓存:对于短期内重复请求的数据,利用内存缓存(如 Python 的 lru_cache 装饰器或 Java 的 Guava Cache)或分布式缓存(如 Redis)存储,下次请求时优先从缓存读取,减少 API 调用开销
  2. 优化请求频率:除遵循平台规则外,可采用延迟加载策略,在数据非紧急需求时,适当延长请求间隔,结合异步编程(如 Python 的 asyncio、Java 的 CompletableFuture),让请求在后台执行,不阻塞主线程,提升整体响应性能

四、总结

通过上述 Python 和 Java 示例代码,开发者可以实现调用 1688 商品详情 API 接口,获取商品的详细信息
。在实际应用中,需注意遵守 1688 开放平台的 API 使用规则,保护好 AppKeyAppSecret,并根据需求优化代码性能,以实现高效、稳定的数据获取。
复制
重试
分享


K1.5


群贤毕至

访客