淘宝平台获取店铺商品列表API接口实现详解

电子说

1.4w人已加入

描述

在电商数据分析、店铺管理工具开发或竞品监控等场景下,通过API接口获取淘宝店铺的商品列表数据是一项常见且重要的需求。本文将介绍如何通过淘宝开放平台的API接口实现这一功能。

一、 接口选择与认证

淘宝开放平台提供了众多API接口,用于获取店铺商品列表的核心接口之一是taobao.shopitems.get(或类似功能的其他接口,具体请以官方文档为准)。使用该接口前,需要完成以下步骤:

创建应用:登录淘宝开放平台,创建应用并获取App Key和App Secret。

授权获取Session Key:引导店铺卖家通过OAuth 2.0授权流程,获取访问令牌access_token(即Session Key)。该令牌代表了卖家对应用访问其店铺数据的授权。

二、 API请求基础参数

调用API通常需要包含以下基础参数:

method: 调用的API方法名,例如 taobao.shopitems.get。

app_key: 应用的App Key。

session: 卖家授权后获得的access_token。

timestamp: 请求发起的时间戳,格式为yyyy-MM-dd HH:mm:ss。

format: 响应格式,通常为json或xml。

v: API版本号,例如2.0。

sign_method: 签名方式,通常为md5或hmac。

sign: 根据特定规则生成的请求签名,用于验证请求合法性。

三、 获取商品列表关键参数

taobao.shopitems.get接口的关键业务参数可能包括:

fields (必需): 指定需要返回的商品字段。例如:num_iid,title,price,pic_url,approve_status,list_time,modified等。建议只获取需要的字段以减少带宽消耗。

page_no: 页码,用于分页获取数据。

page_size: 每页返回的商品数量(最大值受平台限制)。

seller_nick: 卖家的昵称(通常是授权店铺的卖家昵称)。

order_by: 排序字段,如list_time(上架时间), modified(修改时间), sold_quantity(销量)等。

sort: 排序方式,asc(升序)或desc(降序)。

四、 签名生成算法

签名sign是保证请求安全的重要环节。生成签名的基本步骤如下:

将所有请求参数(除sign本身和文件上传参数外)按参数名的字典序排序。

将排序后的参数键值对连接成字符串:key1value1key2value2...。

在连接后的字符串前后拼接上应用的App Secret。

对整个字符串使用sign_method指定的算法(如MD5或HMAC)进行摘要计算,并将结果转换为大写十六进制字符串。

例如,如果使用MD5: $$ text{sign} = text{toUpperCase}(text{MD5}( text{AppSecret} + text{sorted_params_string} + text{AppSecret} )) $$

五、 Python实现示例代码

 

import hashlib
import time
import urllib.parse
import requests

# 配置信息
APP_KEY = 'your_app_key'
APP_SECRET = 'your_app_secret'
ACCESS_TOKEN = 'seller_access_token'  # 卖家授权后获得
API_URL = 'https://eco.taobao.com/router/rest'  # 淘宝API网关地址

def generate_sign(params):
    # 1. 参数按key排序
    sorted_keys = sorted(params.keys())
    # 2. 拼接键值对
    param_str = ''
    for key in sorted_keys:
        param_str += key + params[key]
    # 3. 前后加App Secret
    sign_str = APP_SECRET + param_str + APP_SECRET
    # 4. 计算MD5签名
    md5 = hashlib.md5()
    md5.update(sign_str.encode('utf-8'))
    return md5.hexdigest().upper()

def get_shop_items(page_no=1, page_size=10):
    # 基础参数
    base_params = {
        'method': 'taobao.shopitems.get',
        'app_key': APP_KEY,
        'session': ACCESS_TOKEN,
        'timestamp': time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()),
        'format': 'json',
        'v': '2.0',
        'sign_method': 'md5',
    }
    # 业务参数
    biz_params = {
        'fields': 'num_iid,title,price,pic_url',
        'page_no': str(page_no),
        'page_size': str(page_size),
        'seller_nick': 'your_seller_nick',  # 替换为实际卖家昵称
    }
    # 合并参数
    all_params = {**base_params, **biz_params}
    # 生成签名
    all_params['sign'] = generate_sign(all_params)
    
    # 发起请求
    try:
        response = requests.post(API_URL, data=all_params)
        response.raise_for_status()  # 检查HTTP错误
        result = response.json()
        # 检查API返回的错误
        if result.get('error_response'):
            print(f"API Error: {result['error_response']['msg']}")
            return None
        return result.get('shopitems_get_response', {}).get('items', [])
    except Exception as e:
        print(f"Request Error: {e}")
        return None

# 获取第一页商品
items = get_shop_items(page_no=1, page_size=10)
if items:
    for item in items['item']:
        print(f"商品ID: {item['num_iid']}, 标题: {item['title']}, 价格: {item['price']}")
API

 

六、 注意事项与优化

权限与频率限制:严格遵守淘宝开放平台的API调用频率限制(QPS)。超出限制可能导致调用失败或被封禁。

错误处理:代码中应妥善处理网络错误、API返回错误(如无效令牌、参数错误等)。

分页获取:对于商品数量众多的店铺,务必实现分页逻辑,循环获取所有页的数据。

数据缓存:对于不常变动的数据,可考虑在本地进行缓存,减少API调用次数。

官方文档:淘宝API会更新,务必以淘宝开放平台官方文档为准,关注接口变更和参数调整。

通过上述方法,开发者可以稳定地获取淘宝店铺的商品列表信息,为后续的数据分析或应用开发提供支持。

​审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分