阿里巴巴 1688 API 接口深度解析:商品详情与按图搜索商品(拍立淘)实战指南

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

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

在调用 1688 商品详情 API 接口前,需完成以下准备工作,确保具备合法调用资格:

(一)注册与认证:区分账号类型,获取基础资格

  • 登录 1688 开放平台,使用 1688 企业账号注册开发者账号(个人账号权限有限,仅支持查询公开商品信息)。

  • 完成企业认证:提交营业执照、对公账户信息、法人身份证明,1 - 3 个工作日审核通过后,解锁企业级接口权限(如获取混批价、供应商产能数据)。

(二)创建应用:获取核心调用凭证

  • 在开放平台控制台点击 "创建应用",选择应用类型(如 "采购管理系统""数据分析工具"),填写应用名称与场景说明。

  • 应用创建成功后,获取 appkey (应用唯一标识,可公开)与 secret(签名密钥,需严格保密),二者是 API 调用的 "数字身份证",切勿泄露至前端或客户端。

(三)申请接口权限:精准匹配业务需求

  • 核心接口:搜索 "alibaba.product.get"(商品详情查询),提交权限申请,说明具体用途(如 "企业内部采购选品数据获取")。

  • 权限分级:基础权限(免费)支持获取商品标题、价格、库存等公开信息;高级权限(需审核)可获取供应商产能、历史交易数据等敏感信息,企业用户通过率超 90%。

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

(一)接口说明

以下是获取 1688 商品详情的核心 API 接口:

  • 接口名称item.get

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

(二)Python 调用示例

以下是一个使用 Python 调用 item.get 接口获取商品详情的完整示例代码:

python 复制代码
import requests
import hashlib
import time
import random
import string

def 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 复制代码
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 接口使用方法

(一)接口说明

按图搜索商品(拍立淘)API 允许用户通过上传图片来搜索相似的商品。该接口支持多种图片格式,返回与上传图片相似的商品列表。

(二)Python 调用示例

以下是一个使用 Python 调用按图搜索商品(拍立淘)API 的示例代码:

python 复制代码
import requests
import hashlib
import time
import random
import string

def 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)

四、数据解析与应用

(一)商品详情数据解析

获取到的商品详情数据通常是一个 JSON 格式,包含以下关键字段:

  • 商品标题title

  • 价格范围priceRange

  • 起订量moq

  • 库存stock

  • 商品图片picUrl

  • 供应商信息supplierName

(二)按图搜索结果解析

按图搜索返回的结果通常是一个商品列表,每个商品包含以下字段:

  • 商品 IDproductId

  • 商品标题title

  • 相似度similarity

  • 商品图片picUrl

(三)应用场景

  1. 市场分析:通过获取商品详情,分析市场趋势,了解竞争对手的产品信息。

  2. 选品工具:根据商品详情数据,筛选出有潜力的商品进行采购。

  3. 价格监控:定期获取商品价格,监控价格波动,优化采购成本。

  4. 图片搜索:通过按图搜索,快速找到相似商品,节省选品时间。

五、注意事项

  1. 接口调用频率限制:1688 API 接口通常有调用频率限制,例如每分钟或每小时的调用次数。开发者需要合理安排调用频率,避免触发限流机制。

  2. 数据隐私与合规性:确保使用 API 接口时遵守相关法律法规,不得用于非法用途。

  3. 错误处理:在调用接口时,可能会遇到网络错误、参数错误或接口限制等问题。建议在代码中添加适当的错误处理逻辑,以便在出现问题时能够及时发现并解决。

  4. 签名生成:签名是接口调用的关键,用于验证请求的合法性。确保签名生成逻辑正确,避免因签名错误导致请求失败。

通过上述介绍和示例代码,开发者可以快速上手使用 1688 的商品详情获取和按图搜索商品(拍立淘)API 接口,为电商运营和数据分析提供有力支持。

如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系

相关推荐
fangzhanpeng1685 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心7 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552713 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552713 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝15 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552715 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552716 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552718 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552718 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552719 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节