Python之ya-market-api包语法、参数和实际应用案例
ya-market-api 完整使用文档(Yandex Market 雅得市场API Python包)
一、包基础概述
1. 包定义与作用
ya-market-api是封装Yandex.Market(俄罗斯雅得电商平台)官方REST API的Python第三方SDK,专门面向跨境卖家、数据分析人员、爬虫开发者,简化与Yandex商城后台交互,无需手动封装HTTP请求、签名、分页、鉴权逻辑。
核心对接Yandex Market商家后台所有业务接口:商品管理、订单、库存、价格、报表、物流、店铺数据、广告投放、评价管理。
2. 核心功能总览
- 鉴权封装:自动处理OAuth2.0商家token、商户ID校验、请求签名
- 商品模块:商品创建/更新/上下架、类目查询、属性批量修改、图片上传
- 库存价格:实时库存同步、批量调价、折扣设置、促销价管理
- 订单模块:订单拉取、发货、取消订单、修改配送信息、签收确认
- 报表数据:销量报表、流量统计、转化数据、竞品数据导出
- 物流模块:配送方案配置、包裹创建、物流轨迹查询
- 广告模块:商品推广预算调整、投放数据、关键词管理
- 评价模块:获取用户评价、回复差评、申诉恶意评价
- 工具能力:自动分页、批量请求、异常重试、响应JSON格式化、日志打印
3. 支持Python版本
- 最低:Python 3.7+
- 推荐:3.9 / 3.10 / 3.11
- 依赖库:
requests、pydantic、python-dotenv、urllib3
二、完整安装教程
方式1:pip标准安装
pipinstallya-market-api方式2:升级最新版
pipinstall--upgradeya-market-api方式3:源码安装(官方github)
gitclone https://github.com/ya-market/python-api.gitcdpython-api pipinstall.4. 依赖修复(常见缺失)
pipinstallrequests pydantic python-dotenv三、基础语法、初始化与核心参数
3.1 客户端初始化(核心语法)
基础初始化模板
fromya_market_apiimportYaMarketClient# 实例化客户端client=YaMarketClient(# 必填核心鉴权参数token="商家OAuth访问令牌",business_id=12345,# 商户主IDcampaign_id=67890,# 店铺渠道ID(多店铺必填)# 可选配置参数timeout=30,# 请求超时时间(秒)retry_count=3,# 接口失败自动重试次数debug=False,# True打印完整请求日志version="v2"# API版本,默认v2)3.2 全局核心参数说明
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| token | str | 是 | Yandex商家后台生成OAuth2.0 access_token |
| business_id | int | 是 | 商户主体ID,商家后台个人中心获取 |
| campaign_id | int | 分场景必填 | 单个店铺渠道ID,多店铺操作必须传 |
| timeout | int | 可选 | HTTP请求超时,默认20s |
| retry_count | int | 可选 | 5xx/网络错误自动重试,默认2次 |
| debug | bool | 可选 | 开启打印请求头、响应体调试日志 |
| version | str | 可选 | API版本:v1/v2,主流v2 |
| proxy | dict | 可选 | 代理配置{"http":"xxx","https":"xxx"} |
3.3 接口通用请求语法
所有业务模块统一调用格式:
# 模块.方法(接口业务参数)resp=client.products.list(page=1,limit=50)# 返回结构固定Pydantic模型对象resp.result# 业务数据主体resp.meta# 分页信息(total、page、pages)resp.errors# 错误信息列表resp.is_success()# 判断请求是否成功,返回布尔值3.4 分页通用参数(所有列表接口通用)
| 参数 | 作用 |
|---|---|
| page | 页码,默认1 |
| limit | 单页条数,最大50 |
| filter | 过滤字典,如筛选上架/下架商品 |
| sort | 排序字段,price、created_at、views |
四、8个完整可运行实战应用案例
案例1:批量拉取店铺所有商品(商品基础数据导出)
场景:导出全店商品ID、标题、价格、库存,用于本地表格对账
fromya_market_apiimportYaMarketClientimportpandasaspd client=YaMarketClient(token="你的token",business_id=12345,campaign_id=67890,debug=False)all_products=[]page=1whileTrue:# 调用商品列表接口res=client.products.list(page=page,limit=50)ifnotres.is_success():print("接口错误",res.errors)breakitems=res.result.get("offers",[])ifnotitems:breakall_products.extend(items)# 判断是否还有下一页ifpage>=res.meta["pages"]:breakpage+=1# 写入Exceldf=pd.DataFrame(all_products)df.to_excel("yandex商品清单.xlsx",index=False)print(f"导出商品总数:{len(all_products)}")案例2:批量同步商品库存(自动化库存更新)
场景:本地进销存系统同步库存到Yandex店铺,批量修改100件商品库存
fromya_market_apiimportYaMarketClient client=YaMarketClient(token="xxx",business_id=12345,campaign_id=67890)# 待更新库存列表stock_list=[{"offer_id":"offer_001","stock":20},{"offer_id":"offer_002","stock":5},{"offer_id":"offer_003","stock":0}]# 批量库存更新接口resp=client.stocks.update(offers=stock_list)ifresp.is_success():print("库存同步成功")else:print("同步失败详情",resp.errors)案例3:拉取当日新订单并自动标记发货
场景:定时脚本抓取当天未发货订单,推送物流单号完成发货操作
fromya_market_apiimportYaMarketClientfromdatetimeimportdate client=YaMarketClient(token="xxx",business_id=12345,campaign_id=67890)# 筛选今日新建、未发货订单today=date.today().isoformat()order_res=client.orders.list(filter={"createdAtFrom":today,"status":"UNSHIPPED"},limit=50)ifnotorder_res.is_success():print("订单拉取失败")else:orders=order_res.result["orders"]fororderinorders:order_id=order["id"]# 模拟物流单号track_num=f"TR{order_id}9999"# 订单发货接口ship_resp=client.orders.ship(order_id=order_id,shipments=[{"trackCode":track_num,"deliveryServiceId":101}])ifship_resp.is_success():print(f"订单{order_id}发货完成,物流单号{track_num}")案例4:批量商品调价+设置限时折扣
场景:大促活动批量修改售价,添加7天限时折扣价
fromya_market_apiimportYaMarketClient client=YaMarketClient(token="xxx",business_id=12345,campaign_id=67890)price_data=[{"offer_id":"offer_001","price":"1290.00",# 原价"oldPrice":"1590.00",# 划线价"discountStartDate":"2026-06-20","discountEndDate":"2026-06-27"},{"offer_id":"offer_002","price":"899.00","oldPrice":"1099.00"}]resp=client.prices.update(offers=price_data)print("调价结果",resp.resultifresp.is_success()elseresp.errors)案例5:获取店铺流量&转化数据报表(数据分析)
场景:拉取近7天商品曝光、点击、订单转化数据做运营分析
fromya_market_apiimportYaMarketClientfromdatetimeimportdatetime,timedelta client=YaMarketClient(token="xxx",business_id=12345)# 时间范围:近7天end=datetime.now().date()start=end-timedelta(days=7)report_resp=client.reports.stats(date_from=start.isoformat(),date_to=end.isoformat(),metrics=["clicks","views","orders","revenue"])ifreport_resp.is_success():data=report_resp.result["rows"]forrowindata:print("商品ID:{},曝光{},点击{},成交{}单,营收{}".format(row["offerId"],row["views"],row["clicks"],row["orders"],row["revenue"]))案例6:自动读取用户评价并回复好评/申诉差评
场景:每日定时抓取新评价,自动回复好评,识别差评标记人工处理
fromya_market_apiimportYaMarketClient client=YaMarketClient(token="xxx",business_id=12345,campaign_id=67890)# 获取所有商品评价review_res=client.reviews.list(limit=50)ifreview_res.is_success():reviews=review_res.result["reviews"]forrevinreviews:review_id=rev["id"]rating=rev["rating"]# 好评自动回复ifrating>=4andnotrev.get("answer"):client.reviews.answer(review_id=review_id,text="感谢您的好评!我们会持续优化商品与服务~")print(f"评价{review_id}自动回复完成")elifrating<=2:print(f"差评预警!评价ID:{review_id},内容:{rev["text"]}")案例7:广告投放预算自动化调整(成本控制)
场景:单日广告消耗超阈值自动下调每日投放预算
fromya_market_apiimportYaMarketClient client=YaMarketClient(token="xxx",business_id=12345,campaign_id=67890)# 获取广告账户当日消耗adv_stat=client.ads.stats(date_from="2026-06-20")total_spend=adv_stat.result["totalSpent"]max_limit=5000# 单日预算上限5000卢布iftotal_spend>max_limit:# 下调广告日预算至3000client.ads.set_budget(budget=3000)print(f"当日消耗{total_spend},超过阈值,预算下调完成")else:print(f"广告消耗正常,当前消耗:{total_spend}")案例8:新建商品上架(完整商品创建流程)
场景:程序自动创建新品、上传图片、设置属性、直接上架销售
fromya_market_apiimportYaMarketClient client=YaMarketClient(token="xxx",business_id=12345,campaign_id=67890)new_offer={"offerId":"new_0001","productId":9876,# 类目产品ID"name":"无线蓝牙降噪耳机","price":"2490.00","stock":30,"visibility":"VISIBLE",# VISIBLE上架 / HIDDEN下架"pictures":["https://xxx/img1.jpg","https://xxx/img2.jpg"],"params":[{"name":"颜色","value":"黑色"},{"name":"续航","value":"30小时"}]}resp=client.products.create(offer=new_offer)ifresp.is_success():print("新品创建成功,商品ID:",resp.result["offerId"])else:print("创建失败",resp.errors)五、常见错误代码、报错原因与解决方案
1. 鉴权类错误(高频)
- 401 Unauthorized
- 原因:token过期、token权限不足、business_id填写错误
- 解决:商家后台重新生成OAuth token;核对商户ID;开通对应接口权限(商品/订单权限)
- 403 Forbidden
- 原因:token仅只读权限,执行写操作(改价/发货/新建商品);渠道campaign_id不属于当前商户
- 解决:创建具备编辑权限的token;核对店铺渠道ID
2. 参数格式错误
- 400 Bad Request / VALIDATION_ERROR
- 原因:价格传整数、库存负数、日期格式错误、offer_id重复、缺少必填字段
- 解决:价格必须字符串
"1290.00";库存≥0;日期严格YYYY-MM-DD;校验入参字段完整性
- NOT_FOUND 404
- 原因:订单ID/商品offer_id不存在、API版本错误
- 解决:核对ID;初始化指定
version="v2"
3. 限流与服务端错误
- 429 Too Many Requests
- 原因:接口请求频率超出Yandex限制(每秒≤10次)
- 解决:添加time.sleep(0.2);批量合并请求;开启包内置retry重试
- 500 / 502 / 503 服务异常
- 原因:Yandex Market服务器临时故障
- 解决:依赖
retry_count自动重试;间隔10秒后重新请求
4. 业务逻辑错误
- STOCK_NEGATIVE
- 库存更新传入负数;修正库存数值≥0
- ORDER_ALREADY_SHIPPED
- 重复给同一订单执行发货;先查询订单状态再操作
- PRICE_INVALID
折扣价高于原价;调整oldPrice大于售价
5. 网络&环境报错
requests.exceptions.ConnectionError
无法连接API服务器;检查网络、添加代理proxy参数;关闭防火墙- ModuleNotFoundError: No module named ‘ya_market_api’
未正确执行pip安装;确认pip对应当前python环境
六、使用重要注意事项
1. 权限与token安全
- token属于敏感凭证,禁止硬编码写在代码中,建议使用
.env文件+python-dotenv读取 - 区分只读token、读写token,日常数据查询用只读token降低风险
- token有效期一般90天,需定时重新生成替换
2. 请求频率管控
- Yandex官方限流:单商户每秒最多10次请求,批量循环必须增加延时
- 商品、库存批量接口单次最多50条,超大数量拆分多批次提交
3. 数据与金额规范
- 所有价格、金额必须使用字符串传递,禁止int/float(浮点精度丢失会触发报错)
- 库存最小为0,不支持负数;下架商品库存建议统一填0
- 图片链接必须外网可访问https地址,本地路径无法上传
4. 批量操作容错
批量更新接口部分商品失败时,接口会返回单条错误明细,不要直接丢弃全部数据,需单独处理失败商品重试
5. 定时脚本部署建议
- 每日报表、库存同步脚本避开Yandex高峰期(莫斯科时间18:00-22:00)
- 生产环境开启debug=False,关闭日志避免泄露token
- 增加异常捕获try-except,防止单条数据崩溃整个循环
6. 多店铺区分
同一商户多个店铺,每次接口调用必须传入对应campaign_id,否则会操作默认店铺,造成数据错乱
7. 数据存储规范
接口返回商品、订单ID为字符串,导出Excel/数据库统一保存字符串格式,避免数字ID丢失前缀0
8. 合规限制
禁止高频爬虫式抓取竞品数据,超出限流会直接封禁token;数据仅用于自有店铺运营,禁止倒卖平台商品数据。
《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。