1688 开放平台 API 全解析:商品详情实时数据采集接口开发手册
一、引言
在电商运营与市场分析中,获取 1688 平台商品的实时详情数据至关重要。1688 提供了相应的 API 接口,能助力开发者高效采集商品详情信息。本文会对 1688 商品详情实时数据采集接口进行全面解析,并给出详细的开发步骤与代码示例。
二、开发前的准备工作
(一)注册账号
要访问 1688 平台 API,需先在 1688 平台注册账号,完成认证,获取权限。
(二)创建应用
登录后,创建成功后,会得到 ApiKey 和 ApiSecret,这是调用 API 的关键凭证。
(三)获取授权
依据 OAuth 2.0 协议获取用户授权,步骤如下:
- 构建授权请求 URL,引导用户访问进行授权。
- 用户在授权页面登录并确认授权后,会跳转至预先设置的回调 URL,同时携带授权码。
- 用授权码换取访问令牌(Access Token)和刷新令牌(Refresh Token)。访问令牌用于调用 API 接口,刷新令牌用于在访问令牌过期时获取新的访问令牌。
三、API 接口解析
(一)接口地址与请求方式
商品详情实时数据采集接口地址为:https://gw.open.1688.com/openapi/param2/2/cn.alibaba.open/offerGet
,请求方式为 GET。
(二)请求参数
参数名 | 是否必选 | 类型 | 描述 |
---|---|---|---|
app_key | 是 | String | 应用的 AppKey |
access_token | 是 | String | 访问令牌 |
offerId | 是 | String | 商品的 ID |
timestamp | 是 | Long | 请求的时间戳(毫秒) |
sign | 是 | String | 请求签名 |
(三)响应数据
响应数据为 JSON 格式,包含商品的详细信息,如商品标题、价格、库存、描述等。
四、签名算法
为保证请求的安全性,请求时需对参数进行签名。签名算法如下:
- 将所有请求参数(除 sign 外)按照参数名的字典序排序。
- 把排序后的参数名和参数值拼接成一个字符串。
- 在拼接字符串的前后加上 AppSecret。
- 对拼接后的字符串进行 MD5 加密,并将结果转换为大写。
以下是 Python 实现的签名算法代码:
import hashlib
import urllib.parsedef generate_sign(params, app_secret):sorted_params = sorted(params.items(), key=lambda x: x[0])sign_str = app_secretfor key, value in sorted_params:sign_str += key + str(value)sign_str += app_secretsign = hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()return sign
五、接口调用代码示例
以下是使用 Python 调用商品详情实时数据采集接口的完整代码:
import requests
import hashlib
import urllib.parse
import timedef generate_sign(params, app_secret):sorted_params = sorted(params.items(), key=lambda x: x[0])sign_str = app_secretfor key, value in sorted_params:sign_str += key + str(value)sign_str += app_secretsign = hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()return signdef 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 Noneif __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 开放平台商品详情实时数据采集接口的解析与代码示例,你可完成商品详情数据的采集。在开发过程中,要严格遵循平台规则,做好错误处理,以确保系统稳定运行。