1688 开放平台 API 全解析:商品详情实时数据采集接口开发手册

217 阅读4分钟

一、引言

在电商运营与市场分析中,获取 1688 平台商品的实时详情数据至关重要。1688 提供了相应的 API 接口,能助力开发者高效采集商品详情信息。本文会对 1688 商品详情实时数据采集接口进行全面解析,并给出详细的开发步骤与代码示例。

二、开发前的准备工作

(一)注册账号

要访问 1688 平台 API,需先在 1688 平台注册账号,完成认证,https://o0b.cn/icris权限。

(二)创建应用

登录后,创建成功后,会得到 ApiKey 和 ApiSecret,这是调用 API 的关键凭证。

(三)获取授权

依据 OAuth 2.0 协议获取用户授权,步骤如下:

  1. 构建授权请求 URL,引导用户访问进行授权。
  2. 用户在授权页面登录并确认授权后,会跳转至预先设置的回调 URL,同时携带授权码。
  3. 用授权码换取访问令牌(Access Token)和刷新令牌(Refresh Token)。访问令牌用于调用 API 接口,刷新令牌用于在访问令牌过期时获取新的访问令牌。

三、API 接口解析

(一)接口地址与请求方式

商品详情实时数据采集接口地址为:https://gw.open.1688.com/openapi/param2/2/cn.alibaba.open/offerGet,请求方式为 GET。

(二)请求参数

参数名是否必选类型描述
app_keyString应用的 AppKey
access_tokenString访问令牌
offerIdString商品的 ID
timestampLong请求的时间戳(毫秒)
signString请求签名

(三)响应数据

响应数据为 JSON 格式,包含商品的详细信息,如商品标题、价格、库存、描述等。

四、签名算法

为保证请求的安全性,请求时需对参数进行签名。签名算法如下:

  1. 将所有请求参数(除 sign 外)按照参数名的字典序排序。
  2. 把排序后的参数名和参数值拼接成一个字符串。
  3. 在拼接字符串的前后加上 AppSecret。
  4. 对拼接后的字符串进行 MD5 加密,并将结果转换为大写。

以下是 Python 实现的签名算法代码:

 

import hashlib
import urllib.parse


def generate_sign(params, app_secret):
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    sign_str = app_secret
    for key, value in sorted_params:
        sign_str += key + str(value)
    sign_str += app_secret
    sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
    return sign

五、接口调用代码示例

以下是使用 Python 调用商品详情实时数据采集接口的完整代码:

import requests
import hashlib
import urllib.parse
import time


def generate_sign(params, app_secret):
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    sign_str = app_secret
    for key, value in sorted_params:
        sign_str += key + str(value)
    sign_str += app_secret
    sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
    return sign


def get_product_detail(app_key, app_secret, access_token, offer_id):
    url = 'https://gw.open.1688.com/openapi/param2/2/cn.alibaba.open/offerGet'
    timestamp = int(time.time() * 1000)
    params = {
        'app_key': app_key,
        'access_token': access_token,
        'offerId': offer_id,
        'timestamp': timestamp
    }
    params['sign'] = generate_sign(params, app_secret)
    encoded_params = urllib.parse.urlencode(params)
    full_url = f'{url}/{app_key}?{encoded_params}'
    try:
        response = requests.get(full_url)
        if response.status_code == 200:
            return response.json()
        else:
            print(f"请求失败,状态码: {response.status_code}")
    except requests.RequestException as e:
        print(f"请求异常: {e}")
    return None


if __name__ == "__main__":
    app_key = "your_app_key"
    app_secret = "your_app_secret"
    access_token = "your_access_token"
    offer_id = "your_offer_id"
    result = get_product_detail(app_key, app_secret, access_token, offer_id)
    if result:
        print(result)

 

六、代码解释

(一)generate_sign 函数

该函数用于生成请求签名。先对请求参数按字典序排序,再拼接参数名和参数值,前后加上 AppSecret,最后进行 MD5 加密并转换为大写。

(二)get_product_detail 函数

此函数用于调用商品详情接口。先构造请求参数,包含 AppKey、访问令牌、商品 ID 和时间戳,接着调用 generate_sign 函数生成签名。将参数进行 URL 编码后,拼接成完整的请求 URL,使用 requests 库发送 GET 请求。若请求成功,返回 JSON 格式的商品详情数据。

(三)主程序

设置 AppKey、AppSecret、访问令牌和商品 ID,调用 get_product_detail 函数获取商品详情,并打印结果。

七、数据解析

获取到的商品详情数据是 JSON 格式,可按以下示例解析出关键信息:

if result:
    if 'result' in result:
        product_info = result['result']
        title = product_info.get('subject')
        price = product_info.get('price')
        quantity = product_info.get('quantity')
        print(f"商品标题: {title}")
        print(f"商品价格: {price}")
        print(f"商品库存: {quantity}")

 

八、注意事项

(一)频率限制

1688 开放平台对 API 接口调用频率有限制,需合理控制调用频率,防止接口被封禁。

(二)数据更新

商品数据实时变化,为保证数据准确性,需定期调用 API 接口更新数据。

(三)错误处理

调用 API 接口时可能出现网络错误、签名错误、授权失败等情况,要对这些错误进行妥善处理,如设置重试机制、记录错误日志。

九、总结

通过本文对 1688 开放平台商品详情实时数据采集接口的解析与代码示例,你可完成商品详情数据的采集。在开发过程中,要严格遵循平台规则,做好错误处理,以确保系统稳定运行。