taobao.items.onsale.get:获取店铺在售商品列表(含价格、库存、销量等核心字段)。taobao.items.inventory.get:获取仓库中商品(未上架商品)。taobao.shop.get:通过店铺昵称获取店铺ID(需先调用此接口获取
seller_id)。app_key:应用唯一标识。app_secret:加密密钥(需保密)。session_key:通过OAuth2.0授权获取(需店铺管理员扫码授权,有效期30天)。pythonimport requestsimport timeimport hashlibdef get_shop_id(app_key, app_secret, seller_nick):method = "taobao.shop.get"params = {"app_key": app_key,"method": method,"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),"format": "json","v": "2.0","sign_method": "hmac","seller_nick": seller_nick,"fields": "seller_id" # 仅需返回店铺ID}# 生成HMAC_MD5签名sorted_params = sorted(params.items(), key=lambda x: x[0])raw_str = ''.join([f"{k}{v}" for k, v in sorted_params]) + app_secretsign = hashlib.md5(raw_str.encode()).hexdigest().upper()params["sign"] = signresponse = requests.post("https://eco.taobao.com/router/rest",data=params,headers={"Content-Type": "application/x-www-form-urlencoded"})return response.json()["shop_get_response"]["shop"]["seller_id"]# 示例调用seller_nick = "示例店铺" # 替换为目标店铺昵称app_key = "你的AppKey"app_secret = "你的AppSecret"shop_id = get_shop_id(app_key, app_secret, seller_nick)print(f"店铺ID: {shop_id}")
pythondef get_shop_items(app_key, app_secret, session_key, seller_id, page_no/=1, page_size=100):method = "taobao.items.onsale.get"params = {"app_key": app_key,"method": method,"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),"format": "json","v": "2.0","sign_method": "hmac","session": session_key, # 店铺授权token"seller_id": seller_id,"page_no": page_no,"page_size": page_size,"fields": "num_iid,title,price,pic_url,quantity,modified" # 自定义返回字段}# 生成签名(同上)sorted_params = sorted(params.items(), key=lambda x: x[0])raw_str = ''.join([f"{k}{v}" for k, v in sorted_params]) + app_secretsign = hashlib.md5(raw_str.encode()).hexdigest().upper()params["sign"] = signresponse = requests.post("https://eco.taobao.com/router/rest",data=params,headers={"Content-Type": "application/x-www-form-urlencoded"})return response.json()# 示例调用session_key = "你的SessionKey" # 通过OAuth2.0获取items_data = get_shop_items(app_key, app_secret, session_key, shop_id)print(f"第1页商品数: {len(items_data['items_onsale_get_response']['items']['item'])}")
pythondef get_all_shop_items(app_key, app_secret, session_key, seller_id, page_size=100):all_items = []page_no = 1while True:items_data = get_shop_items(app_key, app_secret, session_key, seller_id, page_no, page_size)if "error_response" in items_data:print(f"错误: {items_data['error_response']['msg']}")breakitems = items_data["items_onsale_get_response"]["items"]["item"]if not items:breakall_items.extend(items)total_results = items_data["items_onsale_get_response"]["total_results"]print(f"已获取 {len(all_items)}/{total_results} 个商品")if len(all_items) >= total_results:breakpage_no += 1time.sleep(1) # 避免触发限流return all_items# 示例调用all_items = get_all_shop_items(app_key, app_secret, session_key, shop_id)with open("shop_items.json", "w", encoding="utf-8") as f:import jsonjson.dump(all_items, f, ensure_ascii=False, indent=2)print("商品数据已保存至 shop_items.json")
HMAC_MD5或
MD5签名,参数需按ASCII码升序排列,时间戳格式为
YYYY-MM-DD HH:MM:SS。page_size=100以平衡效率与稳定性。session_key是否过期或API未授权。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70046834/viewspace-3095228/ ,如需转载,请注明出处,否则将追究法律责任。