阿里巴巴 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 接口,为电商运营和数据分析提供有力支持。

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

相关推荐
芙蓉王真的好115 小时前
VSCode 配置 Dubbo 超时与重试:application.yml 配置的详细步骤
1024程序员节
默 语16 小时前
MySQL中的数据去重,该用DISTINCT还是GROUP BY?
java·数据库·mysql·distinct·group by·1024程序员节·数据去重
重生之我是Java开发战士16 小时前
【Java EE】Spring Web MVC入门:综合实践与架构设计
1024程序员节
Echoo华地16 小时前
GitLab社区版日志rotate失败的问题
1024程序员节
asfdsfgas17 小时前
华硕 Armoury Crate 安装卡 50% 不动:清理安装缓存文件的解决步骤
1024程序员节
安冬的码畜日常18 小时前
【JUnit实战3_10】第六章:关于测试的质量(上)
测试工具·junit·单元测试·测试覆盖率·1024程序员节·junit5
安冬的码畜日常19 小时前
【JUnit实战3_11】第六章:关于测试的质量(下)
junit·单元测试·tdd·1024程序员节·bdd·变异测试
zhangzhangkeji20 小时前
UE5 蓝图-11:本汽车蓝图的事件图表,汽车拆分事件,染色事件(绿蓝黄青)。
ue5·1024程序员节
傻童:CPU20 小时前
C语言需要掌握的基础知识点之树
c语言·1024程序员节