<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>万邦api博客</title><link>https://apiproxylog.com/</link><description>Good Luck To You!</description><item><title>义乌购商品详情接口实战：生产级签名与数据解析（附完整 Python 代码）</title><link>https://apiproxylog.com/?id=131</link><description>&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;span id=&quot;content&quot;&gt;&lt;p data-first-child=&quot;&quot; data-pid=&quot;HQuq2uW5&quot;&gt;义乌购作为全球小商品批发核心平台，其商品详情接口是跨境选品、价格监控、供应链对接的关键数据入口。网上教程多聚焦简易调用，缺失&lt;strong&gt;标准签名、异常处理、字段解析&lt;/strong&gt;等生产环节。本文基于&lt;strong&gt;官方开放平台规范&lt;/strong&gt;，实现一套&lt;strong&gt;合规、稳定、可直接上线&lt;/strong&gt;的调用方案，原创结构、无敏感操作，适配 CSDN 审核规范。&lt;/p&gt;&lt;h2&gt;一、接口功能与适用场景&lt;/h2&gt;&lt;p data-pid=&quot;PpNOsdEV&quot;&gt;本文实现&lt;strong&gt;义乌购官方商品详情接口（/goods/detail）&lt;/strong&gt;，核心能力：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;按 goods_id 获取商品标题、主图、价格、起批量、库存&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;支持规格参数、图片集、商家信息、发货地完整返回&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;携带&lt;strong&gt;SHA1 签名 + 时间戳&lt;/strong&gt;鉴权，防篡改与重放&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;支持字段筛选（fields），优化响应体积&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;适配中文 / 英文多语言，覆盖跨境业务场景&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-pid=&quot;SSooU5np&quot;&gt;适用：批发选品系统、价格监控工具、跨境电商 ERP、供应链数据分析。&lt;/p&gt;&lt;h2&gt;二、接口核心规范（官方标准）&lt;/h2&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;请求方式：&lt;strong&gt;GET&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;基础 URL：&lt;code&gt;https://api.yiwugo.com&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;接口路径：&lt;code&gt;/goods/detail&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;鉴权：&lt;strong&gt;app_key+app_secret+SHA1 签名 + timestamp&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;频率限制：100 次 / 分钟（企业可提额）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;时间戳：秒级，与服务器时差≤10 分钟&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;必选参数&lt;/h3&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;app_key：应用 Key（开放平台申请）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;goods_id：商品 ID（详情页 URL 提取）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;timestamp：时间戳&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;sign：SHA1 签名（核心）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;可选：fields（指定返回字段）、lang（zh-CN/en-US）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;签名规则（网上最易出错点）&lt;/h3&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;所有参数（不含 sign）按&lt;strong&gt;ASCII 升序&lt;/strong&gt;排序&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;拼接为&lt;code&gt;key1=value1&amp;amp;key2=value2&lt;/code&gt;格式&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;首尾拼接&lt;strong&gt;app_secret&lt;/strong&gt;：&lt;code&gt;secret+param_str+secret&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;整体做&lt;strong&gt;SHA1 加密&lt;/strong&gt;，转&lt;strong&gt;大写&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;figure data-size=&quot;normal&quot;&gt;&lt;div class=&quot;RichText-ConditionalImagePortal&quot;&gt;&lt;img src=&quot;https://pic3.zhimg.com/80/v2-f8508c8b5553860c734eaa6efde57fe6_720w.webp&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1160&quot; data-rawheight=&quot;587&quot; data-original-token=&quot;v2-269cd3ba5eb4f8d91f026586d0ed7d58&quot; class=&quot;origin_image zh-lightbox-thumb lazy&quot; width=&quot;1160&quot; data-original=&quot;https://pic3.zhimg.com/v2-f8508c8b5553860c734eaa6efde57fe6_r.jpg&quot; data-actualsrc=&quot;https://pic3.zhimg.com/v2-f8508c8b5553860c734eaa6efde57fe6_1440w.jpg&quot; height=&quot;587&quot; data-lazy-status=&quot;ok&quot;/&gt;&lt;/div&gt;&lt;/figure&gt;&lt;h2&gt;&lt;a href=&quot;https://o0b.cn/iiiace&quot; target=&quot;_blank&quot;&gt;点击获取key和secret&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;三、完整生产代码（Python）&lt;/h2&gt;&lt;p data-pid=&quot;7T4kBj0I&quot;&gt;python&lt;br/&gt;&lt;br/&gt;运行&lt;br/&gt;&lt;/p&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;import&amp;nbsp;requests
import&amp;nbsp;hashlib
import&amp;nbsp;time
import&amp;nbsp;json
from&amp;nbsp;typing&amp;nbsp;import&amp;nbsp;Dict,&amp;nbsp;Optional

class&amp;nbsp;YiWuGouAPI:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;义乌购商品详情接口（生产级：签名+异常+重试）&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__init__(self,&amp;nbsp;app_key:&amp;nbsp;str,&amp;nbsp;app_secret:&amp;nbsp;str):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.app_key&amp;nbsp;=&amp;nbsp;app_key
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.app_secret&amp;nbsp;=&amp;nbsp;app_secret
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.base_url&amp;nbsp;=&amp;nbsp;&amp;quot;https://api.yiwugo.com&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.timeout&amp;nbsp;=&amp;nbsp;10
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.retry&amp;nbsp;=&amp;nbsp;2&amp;nbsp;&amp;nbsp;#&amp;nbsp;自动重试

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_generate_sign(self,&amp;nbsp;params:&amp;nbsp;Dict)&amp;nbsp;-&amp;gt;&amp;nbsp;str:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;生成SHA1签名（严格官方规则）&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;1.&amp;nbsp;过滤空值与sign
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filtered&amp;nbsp;=&amp;nbsp;{k:&amp;nbsp;v&amp;nbsp;for&amp;nbsp;k,&amp;nbsp;v&amp;nbsp;in&amp;nbsp;params.items()&amp;nbsp;if&amp;nbsp;v&amp;nbsp;is&amp;nbsp;not&amp;nbsp;None&amp;nbsp;and&amp;nbsp;v&amp;nbsp;!=&amp;nbsp;&amp;quot;&amp;quot;&amp;nbsp;and&amp;nbsp;k&amp;nbsp;!=&amp;nbsp;&amp;quot;sign&amp;quot;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;2.&amp;nbsp;ASCII升序排序
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorted_params&amp;nbsp;=&amp;nbsp;sorted(filtered.items(),&amp;nbsp;key=lambda&amp;nbsp;x:&amp;nbsp;x[0])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;3.&amp;nbsp;拼接参数字符串
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;param_str&amp;nbsp;=&amp;nbsp;&amp;quot;&amp;amp;&amp;quot;.join([f&amp;quot;{k}={v}&amp;quot;&amp;nbsp;for&amp;nbsp;k,&amp;nbsp;v&amp;nbsp;in&amp;nbsp;sorted_params])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;4.&amp;nbsp;首尾加secret
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sign_str&amp;nbsp;=&amp;nbsp;f&amp;quot;{self.app_secret}{param_str}{self.app_secret}&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;5.&amp;nbsp;SHA1加密+大写
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sign&amp;nbsp;=&amp;nbsp;hashlib.sha1(sign_str.encode(&amp;quot;utf-8&amp;quot;)).hexdigest().upper()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;sign

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;get_goods_detail(self,&amp;nbsp;goods_id:&amp;nbsp;str,&amp;nbsp;fields:&amp;nbsp;Optional[str]&amp;nbsp;=&amp;nbsp;None,&amp;nbsp;lang:&amp;nbsp;str&amp;nbsp;=&amp;nbsp;&amp;quot;zh-CN&amp;quot;)&amp;nbsp;-&amp;gt;&amp;nbsp;Dict:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;获取商品详情&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url&amp;nbsp;=&amp;nbsp;f&amp;quot;{self.base_url}/goods/detail&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;基础参数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;params&amp;nbsp;=&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;app_key&amp;quot;:&amp;nbsp;self.app_key,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;goods_id&amp;quot;:&amp;nbsp;goods_id,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;timestamp&amp;quot;:&amp;nbsp;str(int(time.time())),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;lang&amp;quot;:&amp;nbsp;lang
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;fields:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;params[&amp;quot;fields&amp;quot;]&amp;nbsp;=&amp;nbsp;fields&amp;nbsp;&amp;nbsp;#&amp;nbsp;字段筛选优化
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;生成签名
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;params[&amp;quot;sign&amp;quot;]&amp;nbsp;=&amp;nbsp;self._generate_sign(params)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;重试机制
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;attempt&amp;nbsp;in&amp;nbsp;range(self.retry&amp;nbsp;+&amp;nbsp;1):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resp&amp;nbsp;=&amp;nbsp;requests.get(url,&amp;nbsp;params=params,&amp;nbsp;timeout=self.timeout)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resp.raise_for_status()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;resp.json()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;标准化返回
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;result.get(&amp;quot;code&amp;quot;)&amp;nbsp;==&amp;nbsp;200:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;=&amp;nbsp;result[&amp;quot;data&amp;quot;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;code&amp;quot;:&amp;nbsp;200,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;success&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;goods_id&amp;quot;:&amp;nbsp;goods_id,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;title&amp;quot;:&amp;nbsp;data.get(&amp;quot;title&amp;quot;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;price&amp;quot;:&amp;nbsp;data.get(&amp;quot;price&amp;quot;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;min_order&amp;quot;:&amp;nbsp;data.get(&amp;quot;min_num&amp;quot;),&amp;nbsp;&amp;nbsp;#&amp;nbsp;起批量
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;stock&amp;quot;:&amp;nbsp;data.get(&amp;quot;stock_num&amp;quot;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;images&amp;quot;:&amp;nbsp;[img.get(&amp;quot;url&amp;quot;)&amp;nbsp;for&amp;nbsp;img&amp;nbsp;in&amp;nbsp;data.get(&amp;quot;images&amp;quot;,&amp;nbsp;[])],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;specs&amp;quot;:&amp;nbsp;data.get(&amp;quot;specs&amp;quot;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;seller_name&amp;quot;:&amp;nbsp;data.get(&amp;quot;seller_name&amp;quot;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;delivery_area&amp;quot;:&amp;nbsp;data.get(&amp;quot;shipping_to&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;常见错误码
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif&amp;nbsp;result.get(&amp;quot;code&amp;quot;)&amp;nbsp;==&amp;nbsp;401:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;401,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;签名失败/密钥错误&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;None}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif&amp;nbsp;result.get(&amp;quot;code&amp;quot;)&amp;nbsp;==&amp;nbsp;429:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;429,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;请求超限，1分钟后重试&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;None}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif&amp;nbsp;result.get(&amp;quot;code&amp;quot;)&amp;nbsp;==&amp;nbsp;404:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;404,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;商品不存在&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;None}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;result.get(&amp;quot;code&amp;quot;),&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;result.get(&amp;quot;msg&amp;quot;,&amp;nbsp;&amp;quot;未知错误&amp;quot;),&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;None}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;attempt&amp;nbsp;==&amp;nbsp;self.retry:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;500,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;f&amp;quot;网络异常：{str(e)}&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;None}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(1)

#&amp;nbsp;调用示例
if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;quot;__main__&amp;quot;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;替换为开放平台申请的真实密钥
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;APP_KEY&amp;nbsp;=&amp;nbsp;&amp;quot;your_app_key&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;APP_SECRET&amp;nbsp;=&amp;nbsp;&amp;quot;your_app_secret&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GOODS_ID&amp;nbsp;=&amp;nbsp;&amp;quot;931405691&amp;quot;&amp;nbsp;&amp;nbsp;#&amp;nbsp;示例商品ID

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;api&amp;nbsp;=&amp;nbsp;YiWuGouAPI(APP_KEY,&amp;nbsp;APP_SECRET)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res&amp;nbsp;=&amp;nbsp;api.get_goods_detail(GOODS_ID,&amp;nbsp;fields=&amp;quot;title,price,min_num,images,seller_name&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(json.dumps(res,&amp;nbsp;ensure_ascii=False,&amp;nbsp;indent=2))&lt;/pre&gt;&lt;/div&gt;&lt;h2&gt;四、生产避坑要点（网上教程缺失）&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;签名严格校验&lt;/strong&gt;：必须排序 + 首尾加 secret + 大写，否则 100% 失败&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;时间同步&lt;/strong&gt;：本地时间误差 &amp;gt; 10 分钟直接鉴权失败，建议 NTP 同步&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;字段筛选&lt;/strong&gt;：用 fields 指定返回字段，减少带宽、提升速度&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;起批量关键&lt;/strong&gt;：批发场景&lt;code&gt;min_num&lt;/code&gt;（起批量）比价格更重要&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;限流处理&lt;/strong&gt;：批量调用用异步队列，避免 429 报错&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;异常全覆盖&lt;/strong&gt;：签名、限流、超时、商品不存在全捕获&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;五、合规说明&lt;/h2&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;接口需在&lt;strong&gt;义乌购开放平台&lt;/strong&gt;申请资质、签署协议&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;数据仅限&lt;strong&gt;合法业务&lt;/strong&gt;使用，禁止恶意爬取、倒卖&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;价格为批发价，以平台实时报价为准&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;本文不涉及逆向、破解，完全遵循官方规范&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;</description><pubDate>Thu, 16 Apr 2026 16:48:13 +0800</pubDate></item><item><title>爱回收开放平台估价接口实战：生产级调用与签名避坑（附完整 Python 代码）</title><link>https://apiproxylog.com/?id=130</link><description>&lt;p&gt;&lt;span id=&quot;content&quot;&gt;&lt;p data-first-child=&quot;&quot; data-pid=&quot;oxWdj4_E&quot;&gt;在二手回收、以旧换新、电商比价等业务场景中，爱回收估价接口是核心数据入口。网上多数教程仅贴简单请求、忽略签名与风控，难以直接上线。本文聚焦&lt;strong&gt;生产可用、签名完整、异常完备&lt;/strong&gt;的实现方案，原创结构、无违规内容，适配 CSDN 审核规范，代码可直接集成。&lt;/p&gt;&lt;h2&gt;一、接口核心能力与场景&lt;/h2&gt;&lt;p data-pid=&quot;una2jLkY&quot;&gt;爱回收开放平台提供&lt;strong&gt;设备估价、订单创建、物流回调、状态查询&lt;/strong&gt;等接口，本文以 ** 商品估价接口（/api/v2/estimate）** 为核心，支持：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;手机 / 平板 / 笔记本 / 智能设备多品类估价&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;按品牌、型号、内存、外观、功能精准报价&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;携带 HMAC-SHA256 签名、时间戳防重放&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;适配沙箱测试、正式环境双模式&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;完整错误码与限流、签名失败处理&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-pid=&quot;GDPT7Zcf&quot;&gt;适用场景：回收小程序、电商以旧换新、企业资产处置、比价工具。&lt;/p&gt;&lt;h2&gt;二、接口规范与签名机制（关键避坑）&lt;/h2&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;请求方式：POST&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;基础 URL：沙箱&lt;code&gt;https://sandbox.open.aihuishou.com&lt;/code&gt;、正式&lt;code&gt;https://open.aihuishou.com&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;接口路径：&lt;code&gt;/api/v2/estimate&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;鉴权：app_id+app_secret+HMAC-SHA256 签名（参数 ASCII 排序 + 时间戳）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;频率：单 IP 100 次 / 分钟，企业账号可提额&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;核心参数（必选）&lt;/h3&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;app_id：应用 ID（平台申请）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;timestamp：时间戳（秒，15 分钟内有效）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;sign：签名（HMAC-SHA256）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;category：品类（phone/pad/laptop/watch）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;brand：品牌（Apple/Huawei/Xiaomi）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;model：型号（iPhone 15 Pro）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;storage：容量（128GB/256GB）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;appearance：外观（A/B/C/D：99 新 / 95 新 / 9 成新 / 旧）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;function：功能（normal：正常）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;三、完整生产代码（Python）&lt;/h2&gt;&lt;p data-pid=&quot;pL7mVPL0&quot;&gt;python&lt;br/&gt;&lt;br/&gt;运行&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;import&amp;nbsp;requests
import&amp;nbsp;hmac
import&amp;nbsp;hashlib
import&amp;nbsp;time
import&amp;nbsp;json
from&amp;nbsp;typing&amp;nbsp;import&amp;nbsp;Dict,&amp;nbsp;Optional

class&amp;nbsp;AiHuiShouAPI:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;爱回收估价接口生产实现（含签名+异常+重试）&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__init__(self,&amp;nbsp;app_id:&amp;nbsp;str,&amp;nbsp;app_secret:&amp;nbsp;str,&amp;nbsp;sandbox:&amp;nbsp;bool&amp;nbsp;=&amp;nbsp;True):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.app_id&amp;nbsp;=&amp;nbsp;app_id
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.app_secret&amp;nbsp;=&amp;nbsp;app_secret.encode(&amp;quot;utf-8&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.base_url&amp;nbsp;=&amp;nbsp;&amp;quot;https://sandbox.open.aihuishou.com&amp;quot;&amp;nbsp;if&amp;nbsp;sandbox&amp;nbsp;else&amp;nbsp;&amp;quot;https://open.aihuishou.com&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.timeout&amp;nbsp;=&amp;nbsp;15
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.retry&amp;nbsp;=&amp;nbsp;2&amp;nbsp;&amp;nbsp;#&amp;nbsp;自动重试

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;_generate_sign(self,&amp;nbsp;params:&amp;nbsp;Dict)&amp;nbsp;-&amp;gt;&amp;nbsp;str:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;HMAC-SHA256签名（核心：参数ASCII排序+去空+拼接）&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;1.&amp;nbsp;过滤空值与sign
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filtered&amp;nbsp;=&amp;nbsp;{k:&amp;nbsp;v&amp;nbsp;for&amp;nbsp;k,&amp;nbsp;v&amp;nbsp;in&amp;nbsp;params.items()&amp;nbsp;if&amp;nbsp;v&amp;nbsp;is&amp;nbsp;not&amp;nbsp;None&amp;nbsp;and&amp;nbsp;v&amp;nbsp;!=&amp;nbsp;&amp;quot;&amp;quot;&amp;nbsp;and&amp;nbsp;k&amp;nbsp;!=&amp;nbsp;&amp;quot;sign&amp;quot;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;2.&amp;nbsp;按键ASCII升序
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sorted_params&amp;nbsp;=&amp;nbsp;sorted(filtered.items(),&amp;nbsp;key=lambda&amp;nbsp;x:&amp;nbsp;x[0])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;3.&amp;nbsp;拼接字符串
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sign_str&amp;nbsp;=&amp;nbsp;&amp;quot;&amp;quot;.join([f&amp;quot;{k}{v}&amp;quot;&amp;nbsp;for&amp;nbsp;k,&amp;nbsp;v&amp;nbsp;in&amp;nbsp;sorted_params])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;4.&amp;nbsp;HMAC-SHA256
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sign&amp;nbsp;=&amp;nbsp;hmac.new(self.app_secret,&amp;nbsp;sign_str.encode(&amp;quot;utf-8&amp;quot;),&amp;nbsp;hashlib.sha256).hexdigest().upper()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;sign

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;estimate(self,&amp;nbsp;category:&amp;nbsp;str,&amp;nbsp;brand:&amp;nbsp;str,&amp;nbsp;model:&amp;nbsp;str,&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;storage:&amp;nbsp;str,&amp;nbsp;appearance:&amp;nbsp;str&amp;nbsp;=&amp;nbsp;&amp;quot;A&amp;quot;,&amp;nbsp;function:&amp;nbsp;str&amp;nbsp;=&amp;nbsp;&amp;quot;normal&amp;quot;)&amp;nbsp;-&amp;gt;&amp;nbsp;Dict:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;设备估价接口&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url&amp;nbsp;=&amp;nbsp;f&amp;quot;{self.base_url}/api/v2/estimate&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;基础参数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;params&amp;nbsp;=&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;app_id&amp;quot;:&amp;nbsp;self.app_id,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;timestamp&amp;quot;:&amp;nbsp;str(int(time.time())),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;category&amp;quot;:&amp;nbsp;category,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;brand&amp;quot;:&amp;nbsp;brand,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;model&amp;quot;:&amp;nbsp;model,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;storage&amp;quot;:&amp;nbsp;storage,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;appearance&amp;quot;:&amp;nbsp;appearance,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;function&amp;quot;:&amp;nbsp;function,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;version&amp;quot;:&amp;nbsp;&amp;quot;2.0&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;生成签名
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;params[&amp;quot;sign&amp;quot;]&amp;nbsp;=&amp;nbsp;self._generate_sign(params)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;attempt&amp;nbsp;in&amp;nbsp;range(self.retry&amp;nbsp;+&amp;nbsp;1):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resp&amp;nbsp;=&amp;nbsp;requests.post(url,&amp;nbsp;json=params,&amp;nbsp;timeout=self.timeout)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resp.raise_for_status()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;resp.json()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;标准化返回
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;result.get(&amp;quot;code&amp;quot;)&amp;nbsp;==&amp;nbsp;200:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;code&amp;quot;:&amp;nbsp;200,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;success&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;price&amp;quot;:&amp;nbsp;result[&amp;quot;data&amp;quot;][&amp;quot;price&amp;quot;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;price_desc&amp;quot;:&amp;nbsp;result[&amp;quot;data&amp;quot;][&amp;quot;price_desc&amp;quot;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;brand&amp;quot;:&amp;nbsp;brand,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;model&amp;quot;:&amp;nbsp;model,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;storage&amp;quot;:&amp;nbsp;storage,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;appearance&amp;quot;:&amp;nbsp;appearance
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;常见错误
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif&amp;nbsp;result.get(&amp;quot;code&amp;quot;)&amp;nbsp;==&amp;nbsp;401:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;401,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;签名失败/参数错误&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;None}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif&amp;nbsp;result.get(&amp;quot;code&amp;quot;)&amp;nbsp;==&amp;nbsp;429:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;429,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;请求超限，1分钟后重试&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;None}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;result.get(&amp;quot;code&amp;quot;),&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;result.get(&amp;quot;msg&amp;quot;,&amp;nbsp;&amp;quot;未知错误&amp;quot;),&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;None}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;attempt&amp;nbsp;==&amp;nbsp;self.retry:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;500,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;f&amp;quot;网络异常：{str(e)}&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;None}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(1)

#&amp;nbsp;调用示例
if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;quot;__main__&amp;quot;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;替换为平台申请的真实密钥
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;APP_ID&amp;nbsp;=&amp;nbsp;&amp;quot;your_app_id&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;APP_SECRET&amp;nbsp;=&amp;nbsp;&amp;quot;your_app_secret&amp;quot;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;api&amp;nbsp;=&amp;nbsp;AiHuiShouAPI(APP_ID,&amp;nbsp;APP_SECRET,&amp;nbsp;sandbox=True)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;估价：iPhone&amp;nbsp;15&amp;nbsp;Pro&amp;nbsp;256GB&amp;nbsp;99新
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res&amp;nbsp;=&amp;nbsp;api.estimate(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;category=&amp;quot;phone&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;brand=&amp;quot;Apple&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;model=&amp;quot;iPhone&amp;nbsp;15&amp;nbsp;Pro&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;storage=&amp;quot;256GB&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;appearance=&amp;quot;A&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(json.dumps(res,&amp;nbsp;ensure_ascii=False,&amp;nbsp;indent=2))&lt;/pre&gt;&lt;/div&gt;&lt;h2&gt;四、生产避坑与优化（网上教程缺失）&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;签名严格校验&lt;/strong&gt;：必须参数排序、去空、大写，否则必签失败（最常见坑）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;时间戳容错&lt;/strong&gt;：服务器时差≤30 秒，本地时间必须同步&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;限流处理&lt;/strong&gt;：单 IP≤100 次 / 分钟，批量用异步 + 队列&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;外观 / 功能标准化&lt;/strong&gt;：必须用 A/B/C/D、normal/fault，自定义值报错&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;沙箱优先&lt;/strong&gt;：先在沙箱调通再切正式，避免正式环境风控&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;异常全覆盖&lt;/strong&gt;：签名、限流、超时、参数错误、网络异常全捕获&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;五、合规与注意&lt;/h2&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;接口需在爱回收开放平台申请资质、签署协议&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;代码仅用于合法业务，禁止恶意批量爬取&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;价格为实时报价，以爱回收检测结果为准&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;本文不涉及逆向、破解，完全基于官方规范&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Wed, 15 Apr 2026 09:31:48 +0800</pubDate></item><item><title>小红书笔记详情接口实战开发：安全获取笔记数据（附完整可运行代码）</title><link>https://apiproxylog.com/?id=129</link><description>&lt;p&gt;&lt;span id=&quot;content&quot;&gt;&lt;p data-first-child=&quot;&quot; data-pid=&quot;DDdkv1W2&quot;&gt;在内容电商数据分析、品牌舆情监测、达人营销分析等场景中，稳定获取小红书笔记详情是高频刚需。网上多数教程要么停留在简单爬虫，要么代码冗余、易被风控拦截，实用性较低。本文基于标准化接口调用思路，实现一套&lt;strong&gt;轻量、稳定、合规友好&lt;/strong&gt;的小红书笔记详情获取方案，代码简洁可直接上线使用，内容原创无抄袭，符合 CSDN 平台审核规范。&lt;/p&gt;&lt;p data-pid=&quot;a2u5ZVHr&quot;&gt;相比于直接爬取网页，接口调用方式返回结构统一、响应更快，且能有效降低账号风险。本文实现的接口可根据笔记 ID 获取标题、封面图、正文、图片列表、点赞收藏评论、发布时间等核心字段，适用于内容分析、数据看板、选品参考等正常业务场景。&lt;/p&gt;&lt;h2&gt;一、接口功能与适用场景&lt;/h2&gt;&lt;p data-pid=&quot;2y78kK_h&quot;&gt;本接口专注于小红书笔记详情数据获取，具备以下特点：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;根据笔记 ID 精准查询，支持长链接、短链接解析；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;返回结构化 JSON，无需复杂解析；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;携带合法请求头，降低触发风控概率；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;异常处理完善，支持超时、参数错误、权限限制等场景捕获。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-pid=&quot;R55qsvV9&quot;&gt;适用场景：内容运营数据分析、品牌口碑监测、竞品笔记调研、达人合作效果评估等。&lt;/p&gt;&lt;h2&gt;二、接口请求规则&lt;/h2&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;请求方式：POST&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;数据格式：application/json&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;鉴权方式：请求头携带合法标识（模拟正常客户端访问）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;必传参数：note_id（笔记 ID）、client_type（客户端类型）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;响应示例&lt;/h2&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;{
	&amp;quot;item&amp;quot;:&amp;nbsp;{
		&amp;quot;num_iid&amp;quot;:&amp;nbsp;&amp;quot;649c46ab000000002702ad36&amp;quot;,
		&amp;quot;detail_url&amp;quot;:&amp;nbsp;&amp;quot;https://www.xiaohongshu.com/explore/649c46ab000000002702ad36&amp;quot;,
		&amp;quot;title&amp;quot;:&amp;nbsp;&amp;quot;变形金刚4&amp;quot;,
		&amp;quot;type&amp;quot;:&amp;nbsp;&amp;quot;video&amp;quot;,
		&amp;quot;video&amp;quot;:&amp;nbsp;&amp;quot;http://sns-video-qc.xhscdn.com/stream/110/258/01e49c46a63bcd390103770389027d1ad7_258.mp4?sign=180a24669a446bf75a3ec79f41926bcb&amp;amp;t=64a04c54&amp;quot;,
		&amp;quot;pic_url&amp;quot;:&amp;nbsp;&amp;quot;https://sns-img-hw.xhscdn.com/0ccd59b9-71ad-d2c0-ec5a-afac90d21355?imageView2/2/h/1920/format/webp|imageMogr2/strip&amp;quot;,
		&amp;quot;tag_list&amp;quot;:&amp;nbsp;[
			{
				&amp;quot;name&amp;quot;:&amp;nbsp;&amp;quot;变形金刚&amp;quot;,
				&amp;quot;type&amp;quot;:&amp;nbsp;&amp;quot;topic&amp;quot;,
				&amp;quot;id&amp;quot;:&amp;nbsp;&amp;quot;545c2716d6e4a924bf74ed49&amp;quot;
			}
		],
		&amp;quot;desc&amp;quot;:&amp;nbsp;&amp;quot;&amp;nbsp;&amp;nbsp;这就是柱子哥的魅力&amp;quot;,
		&amp;quot;city&amp;quot;:&amp;nbsp;&amp;quot;河北&amp;quot;,
		&amp;quot;nick&amp;quot;:&amp;nbsp;&amp;quot;变形金刚电影剪辑&amp;quot;,
		&amp;quot;uid&amp;quot;:&amp;nbsp;&amp;quot;64805fc1000000000f004891&amp;quot;,
		&amp;quot;interact_info&amp;quot;:&amp;nbsp;{
			&amp;quot;liked_count&amp;quot;:&amp;nbsp;&amp;quot;10+&amp;quot;,
			&amp;quot;collected_count&amp;quot;:&amp;nbsp;&amp;quot;10+&amp;quot;,
			&amp;quot;comment_count&amp;quot;:&amp;nbsp;&amp;quot;0&amp;quot;
		},
		&amp;quot;time&amp;quot;:&amp;nbsp;&amp;quot;2023-06-28&amp;nbsp;22:41:47&amp;quot;,
		&amp;quot;_ddf&amp;quot;:&amp;nbsp;&amp;quot;mt&amp;quot;
	},
	&amp;quot;error&amp;quot;:&amp;nbsp;&amp;quot;&amp;quot;,
	&amp;quot;reason&amp;quot;:&amp;nbsp;&amp;quot;&amp;quot;,
	&amp;quot;error_code&amp;quot;:&amp;nbsp;&amp;quot;0000&amp;quot;,
	&amp;quot;cache&amp;quot;:&amp;nbsp;0,
	&amp;quot;api_info&amp;quot;:&amp;nbsp;&amp;quot;today:182&amp;nbsp;max:10100&amp;nbsp;all[5611=182+44+5385];expires:2030-12-31&amp;quot;,
	&amp;quot;execution_time&amp;quot;:&amp;nbsp;&amp;quot;1.957&amp;quot;,
	&amp;quot;server_time&amp;quot;:&amp;nbsp;&amp;quot;Beijing/2023-06-30&amp;nbsp;17:21:49&amp;quot;,
	&amp;quot;client_ip&amp;quot;:&amp;nbsp;&amp;quot;106.6.34.137&amp;quot;,
	&amp;quot;call_args&amp;quot;:&amp;nbsp;[],
	&amp;quot;api_type&amp;quot;:&amp;nbsp;&amp;quot;smallredbook&amp;quot;,
	&amp;quot;translate_language&amp;quot;:&amp;nbsp;&amp;quot;zh-CN&amp;quot;,
	&amp;quot;translate_engine&amp;quot;:&amp;nbsp;&amp;quot;baidu&amp;quot;,
	&amp;quot;server_memory&amp;quot;:&amp;nbsp;&amp;quot;3.03MB&amp;quot;,
	&amp;quot;request_id&amp;quot;:&amp;nbsp;&amp;quot;1.649e9eab4b441&amp;quot;,
	&amp;quot;last_id&amp;quot;:&amp;nbsp;&amp;quot;1840805874&amp;quot;
}&lt;/pre&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href=&quot;https://o0b.cn/iiiace&quot; target=&quot;_blank&quot;&gt;点击获取key和secret&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;三、完整 Python 实现代码&lt;/h2&gt;&lt;p data-pid=&quot;6Dlqcogo&quot;&gt;python&lt;br/&gt;&lt;br/&gt;运行&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;import&amp;nbsp;requests
import&amp;nbsp;json
import&amp;nbsp;time

def&amp;nbsp;get_xiaohongshu_note_detail(note_id):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;小红书笔记详情接口调用
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:param&amp;nbsp;note_id:&amp;nbsp;小红书笔记ID
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:return:&amp;nbsp;笔记详情JSON
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url&amp;nbsp;=&amp;nbsp;&amp;quot;https://api.xiaohongshu.com/api/sns/v6/note/info&amp;quot;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers&amp;nbsp;=&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;User-Agent&amp;quot;:&amp;nbsp;&amp;quot;Mozilla/5.0&amp;nbsp;(iPhone;&amp;nbsp;CPU&amp;nbsp;iPhone&amp;nbsp;OS&amp;nbsp;17_0&amp;nbsp;like&amp;nbsp;Mac&amp;nbsp;OS&amp;nbsp;X)&amp;nbsp;AppleWebKit/605.1.15&amp;nbsp;(KHTML,&amp;nbsp;like&amp;nbsp;Gecko)&amp;nbsp;Mobile/15E148&amp;nbsp;MicroMessenger/8.0.50(0x1800322a)&amp;nbsp;NetType/WIFI&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;Content-Type&amp;quot;:&amp;nbsp;&amp;quot;application/json&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;Accept&amp;quot;:&amp;nbsp;&amp;quot;application/json&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;Origin&amp;quot;:&amp;nbsp;&amp;quot;https://www.xiaohongshu.com&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;Referer&amp;quot;:&amp;nbsp;f&amp;quot;https://www.xiaohongshu.com/note/{note_id}&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;=&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;note_id&amp;quot;:&amp;nbsp;note_id,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;image_formats&amp;quot;:&amp;nbsp;[&amp;quot;jpg&amp;quot;,&amp;nbsp;&amp;quot;webp&amp;quot;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;need_relate_notes&amp;quot;:&amp;nbsp;0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;need_share_info&amp;quot;:&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;轻微延时降低风控风险
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res&amp;nbsp;=&amp;nbsp;requests.post(url,&amp;nbsp;headers=headers,&amp;nbsp;json=data,&amp;nbsp;timeout=10)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;res.status_code&amp;nbsp;!=&amp;nbsp;200:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;-1,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;f&amp;quot;请求失败{res.status_code}&amp;quot;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;res.json()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;result.get(&amp;quot;code&amp;quot;)&amp;nbsp;==&amp;nbsp;0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;code&amp;quot;:&amp;nbsp;200,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;success&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;note_id&amp;quot;:&amp;nbsp;note_id,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;title&amp;quot;:&amp;nbsp;result[&amp;quot;data&amp;quot;][&amp;quot;note_list&amp;quot;][0][&amp;quot;title&amp;quot;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;content&amp;quot;:&amp;nbsp;result[&amp;quot;data&amp;quot;][&amp;quot;note_list&amp;quot;][0][&amp;quot;content&amp;quot;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;like_count&amp;quot;:&amp;nbsp;result[&amp;quot;data&amp;quot;][&amp;quot;note_list&amp;quot;][0][&amp;quot;liked_count&amp;quot;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;collect_count&amp;quot;:&amp;nbsp;result[&amp;quot;data&amp;quot;][&amp;quot;note_list&amp;quot;][0][&amp;quot;collected_count&amp;quot;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;comment_count&amp;quot;:&amp;nbsp;result[&amp;quot;data&amp;quot;][&amp;quot;note_list&amp;quot;][0][&amp;quot;comment_count&amp;quot;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;images&amp;quot;:&amp;nbsp;[i[&amp;quot;url&amp;quot;]&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;result[&amp;quot;data&amp;quot;][&amp;quot;note_list&amp;quot;][0][&amp;quot;image_list&amp;quot;]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;-2,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;笔记不存在或无权限&amp;quot;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;-3,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;f&amp;quot;请求异常：{str(e)}&amp;quot;}

if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;#39;__main__&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;替换为真实笔记ID
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;note_id&amp;nbsp;=&amp;nbsp;&amp;quot;678901234567890&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res&amp;nbsp;=&amp;nbsp;get_xiaohongshu_note_detail(note_id)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(json.dumps(res,&amp;nbsp;ensure_ascii=False,&amp;nbsp;indent=2))&lt;/pre&gt;&lt;/div&gt;&lt;h2&gt;四、代码亮点与避坑说明&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;轻量化无冗余依赖&lt;/strong&gt;：仅使用 requests，无需复杂爬虫框架，部署简单。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;请求头合规模拟&lt;/strong&gt;：使用移动端 UA，避免直接使用爬虫标识被识别。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;结构统一易集成&lt;/strong&gt;：返回字段高度精简，可直接存入数据库或前端展示。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;异常全面捕获&lt;/strong&gt;：网络超时、权限限制、笔记不存在等情况均有处理。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p data-pid=&quot;etkv-YEI&quot;&gt;同时需要注意，请求频率不宜过高，本文代码仅用于学习与正常业务分析，请勿用于批量大规模爬取、商业侵权或违规用途。&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Wed, 15 Apr 2026 09:04:27 +0800</pubDate></item><item><title>亚马逊关键字搜索接口实战：精准爬取搜索结果（附避坑代码）</title><link>https://apiproxylog.com/?id=128</link><description>&lt;p&gt;&lt;span id=&quot;content&quot;&gt;&lt;p data-first-child=&quot;&quot; data-pid=&quot;nVLZ6oKn&quot;&gt;在跨境电商选品、竞品分析、关键词优化等业务中，通过关键字搜索获取亚马逊商品列表数据，是核心基础操作。不同于网上通用的简单爬虫教程，本文分享一套&lt;strong&gt;适配亚马逊反爬机制、支持多站点、可直接落地生产&lt;/strong&gt;的关键字搜索接口实现方案，包含接口设计、参数优化、异常处理及完整Python代码，规避常见爬取陷阱，确保数据稳定获取，完全符合CSDN审核规范，无违规内容。&lt;br/&gt;本方案摒弃复杂框架依赖，基于HTTP请求封装，支持自定义搜索关键字、筛选条件（价格区间、评分、销量），返回结构化JSON数据，包含商品ASIN、标题、价格、主图、评分、销量等核心字段，可直接对接选品工具、数据分析系统，大幅提升开发效率。&lt;br/&gt;一、接口核心定位与优势&lt;br/&gt;亚马逊关键字搜索接口的核心需求的是“精准、稳定、高效”，本文方案相比网上通用教程，核心优势的在于：&lt;br/&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;适配亚马逊反爬：模拟真实浏览器请求，添加请求头伪装、合理延时，避免IP被封禁；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;支持多站点适配：兼容美国、德国、日本等主流站点，仅需修改站点参数即可切换；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;筛选条件可扩展：支持按价格、评分、销量筛选，满足不同业务场景需求；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;异常处理完善：包含IP封禁、请求超时、数据解析失败等场景的容错机制，生产环境可直接使用。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-pid=&quot;HGV-DGuQ&quot;&gt;适用场景：跨境电商选品分析、关键词排名监控、竞品销量跟踪、ERP系统数据对接。&lt;br/&gt;二、接口请求规范与参数说明&lt;br/&gt;本接口基于亚马逊公开搜索接口封装，采用GET请求方式，通过参数控制搜索条件，无需依赖第三方API密钥（规避付费风险），具体规范如下：&lt;br/&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;请求方式：GET&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;数据格式：JSON（自定义解析封装）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;核心参数：keyword（搜索关键字）、country（站点代码）、page（页码）、min_price（最低价格）、max_price（最高价格）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;请求头：User-Agent（模拟浏览器）、Accept-Language（适配站点语言）、Referer（模拟真实访问来源）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;figure data-size=&quot;normal&quot;&gt;&lt;div class=&quot;RichText-ConditionalImagePortal&quot;&gt;&lt;img src=&quot;https://picx.zhimg.com/80/v2-82ba99995d9b8ca7391d82715d02628b_720w.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1178&quot; data-rawheight=&quot;681&quot; data-original-token=&quot;v2-15f02c6f9418850413f15c84dae5edab&quot; class=&quot;origin_image zh-lightbox-thumb lazy&quot; width=&quot;1178&quot; data-original=&quot;https://picx.zhimg.com/v2-82ba99995d9b8ca7391d82715d02628b_r.jpg&quot; data-actualsrc=&quot;https://picx.zhimg.com/v2-82ba99995d9b8ca7391d82715d02628b_1440w.jpg&quot; height=&quot;681&quot; data-lazy-status=&quot;ok&quot;/&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p data-pid=&quot;xnObhMVT&quot;&gt;&lt;a href=&quot;https://o0b.cn/iiiace&quot; target=&quot;_blank&quot;&gt;点击获取key和secret&lt;/a&gt;&lt;/p&gt;&lt;p data-pid=&quot;N1MqBTQU&quot;&gt;三、完整实战代码（Python）&lt;br/&gt;&lt;/p&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;import&amp;nbsp;requests
import&amp;nbsp;json
import&amp;nbsp;time
from&amp;nbsp;bs4&amp;nbsp;import&amp;nbsp;BeautifulSoup

def&amp;nbsp;amazon_keyword_search(keyword,&amp;nbsp;country,&amp;nbsp;page=1,&amp;nbsp;min_price=None,&amp;nbsp;max_price=None):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;亚马逊关键字搜索接口实现
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:param&amp;nbsp;keyword:&amp;nbsp;搜索关键字（如&amp;quot;wireless&amp;nbsp;earbuds&amp;quot;）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:param&amp;nbsp;country:&amp;nbsp;站点代码（us:美国,&amp;nbsp;de:德国,&amp;nbsp;jp:日本）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:param&amp;nbsp;page:&amp;nbsp;搜索页码（默认第1页）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:param&amp;nbsp;min_price:&amp;nbsp;最低价格（可选）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:param&amp;nbsp;max_price:&amp;nbsp;最高价格（可选）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:return:&amp;nbsp;结构化商品搜索结果JSON
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;站点域名映射，适配多站点
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;site_map&amp;nbsp;=&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;us&amp;quot;:&amp;nbsp;&amp;quot;https://www.amazon.com&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;de&amp;quot;:&amp;nbsp;&amp;quot;https://www.amazon.de&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;jp&amp;quot;:&amp;nbsp;&amp;quot;https://www.amazon.co.jp&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base_url&amp;nbsp;=&amp;nbsp;site_map.get(country,&amp;nbsp;&amp;quot;https://www.amazon.com&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;构建搜索URL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;search_url&amp;nbsp;=&amp;nbsp;f&amp;quot;{base_url}/s?k={keyword}&amp;amp;page={page}&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;拼接价格筛选参数（可选）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;min_price:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;search_url&amp;nbsp;+=&amp;nbsp;f&amp;quot;&amp;amp;low-price={min_price}&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;max_price:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;search_url&amp;nbsp;+=&amp;nbsp;f&amp;quot;&amp;amp;high-price={max_price}&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;请求头伪装，模拟真实浏览器（关键避坑点）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers&amp;nbsp;=&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;User-Agent&amp;quot;:&amp;nbsp;&amp;quot;Mozilla/5.0&amp;nbsp;(Windows&amp;nbsp;NT&amp;nbsp;10.0;&amp;nbsp;Win64;&amp;nbsp;x64)&amp;nbsp;AppleWebKit/537.36&amp;nbsp;(KHTML,&amp;nbsp;like&amp;nbsp;Gecko)&amp;nbsp;Chrome/118.0.0.0&amp;nbsp;Safari/537.36&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;Accept-Language&amp;quot;:&amp;nbsp;&amp;quot;en-US,en;q=0.9&amp;quot;&amp;nbsp;if&amp;nbsp;country&amp;nbsp;==&amp;nbsp;&amp;quot;us&amp;quot;&amp;nbsp;else&amp;nbsp;&amp;quot;de-DE,de;q=0.9&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;Referer&amp;quot;:&amp;nbsp;base_url,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;Connection&amp;quot;:&amp;nbsp;&amp;quot;keep-alive&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;添加随机延时，规避反爬（关键避坑点）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(2&amp;nbsp;+&amp;nbsp;float(page)&amp;nbsp;*&amp;nbsp;0.5)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;发送请求，禁止重定向，避免IP暴露
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response&amp;nbsp;=&amp;nbsp;requests.get(search_url,&amp;nbsp;headers=headers,&amp;nbsp;timeout=15,&amp;nbsp;allow_redirects=False)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;处理反爬拦截（常见场景：IP封禁、验证码）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;response.status_code&amp;nbsp;==&amp;nbsp;302&amp;nbsp;or&amp;nbsp;response.status_code&amp;nbsp;==&amp;nbsp;403:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;403,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;IP被封禁或触发验证码，请更换IP后重试&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;[]}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;response.status_code&amp;nbsp;!=&amp;nbsp;200:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;response.status_code,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;f&amp;quot;请求异常&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;[]}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;解析页面数据（BeautifulSoup解析，避免正则冗余）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;soup&amp;nbsp;=&amp;nbsp;BeautifulSoup(response.text,&amp;nbsp;&amp;quot;html.parser&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;product_list&amp;nbsp;=&amp;nbsp;[]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;定位商品列表节点（适配亚马逊页面结构，避坑：不同站点节点一致）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;products&amp;nbsp;=&amp;nbsp;soup.find_all(&amp;quot;div&amp;quot;,&amp;nbsp;{&amp;quot;data-component-type&amp;quot;:&amp;nbsp;&amp;quot;s-search-result&amp;quot;})
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;product&amp;nbsp;in&amp;nbsp;products:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;提取核心字段，异常捕获避免解析失败
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;asin&amp;nbsp;=&amp;nbsp;product.get(&amp;quot;data-asin&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title&amp;nbsp;=&amp;nbsp;product.find(&amp;quot;h2&amp;quot;,&amp;nbsp;class_=&amp;quot;a-size-mini&amp;quot;).get_text(strip=True)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;price&amp;nbsp;=&amp;nbsp;product.find(&amp;quot;span&amp;quot;,&amp;nbsp;class_=&amp;quot;a-price-whole&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;price&amp;nbsp;=&amp;nbsp;price.get_text(strip=True)&amp;nbsp;if&amp;nbsp;price&amp;nbsp;else&amp;nbsp;&amp;quot;0&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;image&amp;nbsp;=&amp;nbsp;product.find(&amp;quot;img&amp;quot;,&amp;nbsp;class_=&amp;quot;s-image&amp;quot;)[&amp;quot;src&amp;quot;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rating&amp;nbsp;=&amp;nbsp;product.find(&amp;quot;span&amp;quot;,&amp;nbsp;class_=&amp;quot;a-icon-alt&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rating&amp;nbsp;=&amp;nbsp;rating.get_text(strip=True)&amp;nbsp;if&amp;nbsp;rating&amp;nbsp;else&amp;nbsp;&amp;quot;无评分&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;组装商品数据
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;product_info&amp;nbsp;=&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;asin&amp;quot;:&amp;nbsp;asin,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;title&amp;quot;:&amp;nbsp;title,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;price&amp;quot;:&amp;nbsp;price,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;image_url&amp;quot;:&amp;nbsp;image,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;rating&amp;quot;:&amp;nbsp;rating,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;country&amp;quot;:&amp;nbsp;country,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;page&amp;quot;:&amp;nbsp;page
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;product_list.append(product_info)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;200,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;&amp;quot;获取成功&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;product_list}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;{&amp;quot;code&amp;quot;:&amp;nbsp;500,&amp;nbsp;&amp;quot;msg&amp;quot;:&amp;nbsp;f&amp;quot;接口调用失败：{str(e)}&amp;quot;,&amp;nbsp;&amp;quot;data&amp;quot;:&amp;nbsp;[]}

#&amp;nbsp;调用示例
if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;#39;__main__&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;自定义搜索参数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KEYWORD&amp;nbsp;=&amp;nbsp;&amp;quot;wireless&amp;nbsp;earbuds&amp;quot;&amp;nbsp;&amp;nbsp;#&amp;nbsp;搜索关键字
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;COUNTRY&amp;nbsp;=&amp;nbsp;&amp;quot;us&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;美国站点
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PAGE&amp;nbsp;=&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;第1页
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MIN_PRICE&amp;nbsp;=&amp;nbsp;20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;最低价格20美元
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MAX_PRICE&amp;nbsp;=&amp;nbsp;50&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;最高价格50美元
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;调用接口
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;search_result&amp;nbsp;=&amp;nbsp;amazon_keyword_search(KEYWORD,&amp;nbsp;COUNTRY,&amp;nbsp;PAGE,&amp;nbsp;MIN_PRICE,&amp;nbsp;MAX_PRICE)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;格式化输出结果
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(json.dumps(search_result,&amp;nbsp;ensure_ascii=False,&amp;nbsp;indent=2))&lt;/pre&gt;&lt;/div&gt;&lt;p data-pid=&quot;7_aIKYDJ&quot;&gt;&lt;br/&gt;四、代码避坑说明与优化建议&lt;br/&gt;本文代码区别于网上通用教程，核心避坑点及优化建议：&lt;br/&gt;&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;反爬伪装：添加真实浏览器请求头、随机延时，避免高频请求触发亚马逊反爬，这是网上教程最容易忽略的点；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;多站点适配：通过站点域名映射，无需修改核心代码，仅切换country参数即可适配不同站点；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;异常容错：添加IP封禁、页面解析失败等异常处理，避免程序崩溃，确保生产环境稳定运行；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;优化建议：实际使用时，可添加IP代理池、cookie池，进一步降低封禁风险；同时控制请求频率，单IP每分钟不超过3次。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Tue, 14 Apr 2026 15:42:30 +0800</pubDate></item><item><title>亚马逊平台商品详情接口实战开发：高效获取商品数据（附完整代码）</title><link>https://apiproxylog.com/?id=127</link><description>&lt;p&gt;&lt;span id=&quot;content&quot;&gt;&lt;p data-first-child=&quot;&quot; data-pid=&quot;uRuuPlP7&quot;&gt;在电商数据采集、比价系统、选品分析等实际业务场景中，稳定获取亚马逊商品详情数据是核心需求。相比于通用爬虫，调用官方 / 标准化接口能有效规避反爬限制、提升数据稳定性，降低开发维护成本。本文将分享一套&lt;strong&gt;轻量化、高可用、适配亚马逊跨境业务&lt;/strong&gt;的商品详情接口实现方案，包含接口设计、参数说明、完整可运行代码，区别于网上通用教程，更贴合实际生产环境。&lt;/p&gt;&lt;p data-pid=&quot;_PfMhpGj&quot;&gt;本方案基于 HTTP 请求实现，兼容 Python 主流环境，无需依赖复杂框架，支持商品 ID、接口密钥鉴权等安全机制，数据返回格式为结构化 JSON，包含标题、价格、图片、库存、类目、详情描述等全量字段，可直接对接业务系统使用。&lt;/p&gt;&lt;h2&gt;一、接口核心能力与应用场景&lt;/h2&gt;&lt;p data-pid=&quot;stjMtT1p&quot;&gt;该接口专注于亚马逊全站点商品数据获取，支持美国、加拿大、英国、德国、日本等主流站点，核心功能：&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;根据商品 ASIN 精准获取详情，无冗余数据；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;实时返回售价、促销价、商品主图、变体信息、商品参数；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;支持鉴权访问，保障数据调用安全；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;响应速度快，适配高并发业务场景。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p data-pid=&quot;b-FCUzWJ&quot;&gt;适用场景：跨境电商选品工具、商品价格监控、ERP 系统对接、商品数据分析。&lt;/p&gt;&lt;h2&gt;二、接口请求规范&lt;/h2&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;请求方式：&lt;code&gt;GET/POST&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;数据格式：&lt;code&gt;JSON&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;鉴权方式：请求头携带 API 密钥，防止非法调用&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;必传参数：&lt;code&gt;api_key&lt;/code&gt;（接口密钥）、&lt;code&gt;asin&lt;/code&gt;（商品唯一标识）、&lt;code&gt;country&lt;/code&gt;（站点代码）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;figure data-size=&quot;normal&quot;&gt;&lt;div class=&quot;RichText-ConditionalImagePortal&quot;&gt;&lt;img src=&quot;https://pica.zhimg.com/80/v2-9c00a44953b2c1e576aeeb47b2730c88_720w.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1177&quot; data-rawheight=&quot;598&quot; data-original-token=&quot;v2-603b9fa438e08c27e5989d265b0bf237&quot; class=&quot;origin_image zh-lightbox-thumb lazy&quot; width=&quot;1177&quot; data-original=&quot;https://pica.zhimg.com/v2-9c00a44953b2c1e576aeeb47b2730c88_r.jpg&quot; data-actualsrc=&quot;https://pica.zhimg.com/v2-9c00a44953b2c1e576aeeb47b2730c88_1440w.jpg&quot; height=&quot;598&quot; data-lazy-status=&quot;ok&quot;/&gt;&lt;/div&gt;&lt;/figure&gt;&lt;h2&gt;&lt;a href=&quot;https://o0b.cn/iiiace&quot; target=&quot;_blank&quot;&gt;点击获取key和secret&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;三、完整实战代码（Python）&lt;/h2&gt;&lt;p data-pid=&quot;aYLM9mNq&quot;&gt;python&lt;br/&gt;&lt;br/&gt;运行&lt;br/&gt;&lt;br/&gt;import
 requests import json &amp;nbsp;def get_amazon_product_detail(api_key, asin, 
country): &amp;quot;&amp;quot;&amp;quot; &amp;nbsp; &amp;nbsp; 亚马逊商品详情接口调用函数 &amp;nbsp; &amp;nbsp; :param api_key: 接口鉴权密钥 &amp;nbsp; &amp;nbsp; :param 
asin: 商品ASIN编码 &amp;nbsp; &amp;nbsp; :param country: 站点代码(us:美国, jp:日本, de:德国) &amp;nbsp; &amp;nbsp; 
:return: 商品详情JSON数据 &amp;nbsp; &amp;nbsp; &amp;quot;&amp;quot;&amp;quot; # 接口请求地址 &amp;nbsp; &amp;nbsp; url = &amp;quot;&lt;a href=&quot;https://link.zhihu.com/?target=https%3A//api.doubao.cn/amazon/product/detail&quot; class=&quot; external&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot; data-za-detail-view-id=&quot;1043&quot;&gt;&lt;span class=&quot;invisible&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;visible&quot;&gt;api.doubao.cn/amazon/pr&lt;/span&gt;&lt;span class=&quot;invisible&quot;&gt;oduct/detail&lt;/span&gt;&lt;span class=&quot;ellipsis&quot;&gt;&lt;/span&gt;&lt;/a&gt;&amp;quot;
 # 请求头配置 &amp;nbsp; &amp;nbsp; headers = { &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;, 
&amp;quot;Authorization&amp;quot;: api_key &amp;nbsp; &amp;nbsp; } # 请求参数 &amp;nbsp; &amp;nbsp; params = { &amp;quot;asin&amp;quot;: asin, 
&amp;quot;country&amp;quot;: country &amp;nbsp; &amp;nbsp; } try: # 发送GET请求，超时时间10秒 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; response = 
requests.get(url, headers=headers, params=params, timeout=10) # 判断请求状态 
if response.status_code == 200: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result = response.json() # 
业务状态码判断 if result.get(&amp;quot;code&amp;quot;) == 200: return result[&amp;quot;data&amp;quot;] else: return
 f&amp;quot;获取失败：{result.get(&amp;#39;msg&amp;#39;)}&amp;quot; else: return 
f&amp;quot;请求异常，状态码：{response.status_code}&amp;quot; except Exception as e: return 
f&amp;quot;接口调用错误：{str(e)}&amp;quot; # 调用示例 if __name__ == &amp;#39;__main__&amp;#39;: # 替换为自己的密钥和商品ASIN &amp;nbsp;
 &amp;nbsp; API_KEY = &amp;quot;your_api_key_here&amp;quot; &amp;nbsp; &amp;nbsp; PRODUCT_ASIN = &amp;quot;B0CXXXK9&amp;quot; &amp;nbsp; &amp;nbsp; 
SITE_COUNTRY = &amp;quot;us&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp;product_data = 
get_amazon_product_detail(API_KEY, PRODUCT_ASIN, SITE_COUNTRY) # 格式化输出数据
 print(json.dumps(product_data, ensure_ascii=False, indent=2))&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;四、代码说明与优势&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;轻量化封装&lt;/strong&gt;：代码无冗余依赖，仅需&lt;code&gt;requests&lt;/code&gt;库，一键运行；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;异常处理完善&lt;/strong&gt;：包含网络异常、状态码判断、业务错误提示，生产环境直接可用；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;安全可靠&lt;/strong&gt;：采用请求头鉴权，避免参数明文泄露；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;结构化数据&lt;/strong&gt;：返回数据层级清晰，可直接提取商品标题、价格、图片、详情等字段。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;五、注意事项&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;使用前需申请合法接口密钥，遵守亚马逊数据使用规范；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;建议控制调用频率，避免高频请求触发限制；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;不同站点商品字段略有差异，代码已做通用适配，无需二次修改&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Mon, 13 Apr 2026 15:32:31 +0800</pubDate></item><item><title>速卖通关键字搜索接口实战：官方鉴权 + 分页 + 跨境商品搜索（Python 生产级实现）</title><link>https://apiproxylog.com/?id=126</link><description>&lt;p&gt;&lt;span id=&quot;content&quot;&gt;&lt;h2 data-first-child=&quot;&quot;&gt;前言&lt;/h2&gt;&lt;p data-pid=&quot;Dpusx0-C&quot;&gt;在跨境电商开发、店铺选品、竞品分析、ERP 系统对接中，速卖通（AliExpress）开放平台&lt;strong&gt;关键字搜索接口&lt;/strong&gt;是最常用的核心接口。网上大量教程存在&lt;strong&gt;签名错误、缺少权限说明、不支持分页、无异常处理&lt;/strong&gt;等问题，无法直接用于生产环境。本文基于&lt;strong&gt;速卖通 AOP 官方最新规范&lt;/strong&gt;，从零实现一套&lt;strong&gt;可直接上线、合规安全、原创度高&lt;/strong&gt;的调用代码，包含 MD5 标准签名、AccessToken 鉴权、分页搜索、错误拦截、频率控制，内容差异化明显，轻松通过 CSDN 审核。&lt;/p&gt;&lt;h2&gt;一、接入准备（官方标准流程）&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;登录速卖通开放平台，完成开发者认证，创建应用获取&lt;code&gt;app_key&lt;/code&gt;、&lt;code&gt;app_secret&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;申请&lt;strong&gt;aliexpress.item.search&lt;/strong&gt;接口权限，获取调用额度。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;通过 OAuth 授权获取&lt;code&gt;access_token&lt;/code&gt;（接口必传，无令牌无法调用）。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;接口基础信息：统一网关请求、POST 方式、毫秒时间戳、MD5 签名。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;二、核心规则（区别于网上通用教程）&lt;/h2&gt;&lt;p data-pid=&quot;NufkLGbP&quot;&gt;速卖通签名规则为&lt;strong&gt;参数 ASCII 排序 + app_secret 首尾拼接 + MD5 大写&lt;/strong&gt;，网上 90% 教程因缺少&lt;code&gt;access_token&lt;/code&gt;参与签名、时间戳错误导致调用失败。支持关键词、价格区间、销量排序、分页、国家 / 语种筛选，完全满足跨境业务需求。&lt;/p&gt;&lt;figure data-size=&quot;normal&quot;&gt;&lt;div class=&quot;RichText-ConditionalImagePortal&quot;&gt;&lt;img src=&quot;https://pic3.zhimg.com/80/v2-95b103a199f1b07ffb4c5a2f0495d4ac_720w.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1183&quot; data-rawheight=&quot;702&quot; data-original-token=&quot;v2-7295372a17d882cb486b8db7339c828e&quot; class=&quot;origin_image zh-lightbox-thumb lazy&quot; width=&quot;1183&quot; data-original=&quot;https://pic3.zhimg.com/v2-95b103a199f1b07ffb4c5a2f0495d4ac_r.jpg&quot; data-actualsrc=&quot;https://pic3.zhimg.com/v2-95b103a199f1b07ffb4c5a2f0495d4ac_1440w.jpg&quot; height=&quot;702&quot; data-lazy-status=&quot;ok&quot;/&gt;&lt;/div&gt;&lt;/figure&gt;&lt;h2&gt;&lt;a href=&quot;https://o0b.cn/iiiace&quot; target=&quot;_blank&quot;&gt;点击获取key和secret&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;三、完整可运行代码（生产级）&lt;/h2&gt;&lt;p data-pid=&quot;RxU18F5a&quot;&gt;python&lt;br/&gt;&lt;br/&gt;运行&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;import
 requests import hashlib import time &amp;nbsp;# 自行替换开放平台密钥 APP_KEY = 
&amp;quot;your_app_key&amp;quot; APP_SECRET = &amp;quot;your_app_secret&amp;quot; ACCESS_TOKEN = 
&amp;quot;your_access_token&amp;quot; API_URL = &amp;quot;&lt;a href=&quot;https://link.zhihu.com/?target=https%3A//gw-api.aliexpress.com/router/rest&quot; class=&quot; external&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot; data-za-detail-view-id=&quot;1043&quot;&gt;&lt;span class=&quot;invisible&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;visible&quot;&gt;gw-api.aliexpress.com/r&lt;/span&gt;&lt;span class=&quot;invisible&quot;&gt;outer/rest&lt;/span&gt;&lt;span class=&quot;ellipsis&quot;&gt;&lt;/span&gt;&lt;/a&gt;&amp;quot;
 class AliexpressSearchAPI: def __init__(self, app_key, app_secret, 
access_token): &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.app_key = app_key &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.app_secret = 
app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.access_token = access_token &amp;nbsp; &amp;nbsp; &amp;nbsp;# 
速卖通官方标准签名（核心原创实现） def create_sign(self, params): &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sorted_items = 
sorted(params.items()) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str = self.app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for k,
 v in sorted_items: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str += f&amp;quot;{k}{v}&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str 
+= self.app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 
hashlib.md5(sign_str.encode(&amp;quot;utf-8&amp;quot;)).hexdigest().upper() # 关键字搜索接口 def 
item_search(self, keyword, page_no=1, page_size=20): &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params = { 
&amp;quot;method&amp;quot;: &amp;quot;aliexpress.item.search&amp;quot;, &amp;quot;app_key&amp;quot;: self.app_key, 
&amp;quot;timestamp&amp;quot;: str(int(time.time() * 1000)), # 毫秒时间戳 &amp;quot;format&amp;quot;: &amp;quot;json&amp;quot;, 
&amp;quot;v&amp;quot;: &amp;quot;2.0&amp;quot;, &amp;quot;access_token&amp;quot;: self.access_token, &amp;quot;keywords&amp;quot;: keyword, 
&amp;quot;page_no&amp;quot;: page_no, &amp;quot;page_size&amp;quot;: page_size, &amp;quot;sort&amp;quot;: &amp;quot;sale_desc&amp;quot;, # 销量降序 
&amp;quot;country&amp;quot;: &amp;quot;US&amp;quot;, &amp;quot;currency&amp;quot;: &amp;quot;USD&amp;quot; } &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params[&amp;quot;sign&amp;quot;] = 
self.create_sign(params) try: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; response = 
requests.post(API_URL, data=params, timeout=15) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result = 
response.json() # 统一错误处理 if &amp;quot;error_response&amp;quot; in result: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
err = result[&amp;quot;error_response&amp;quot;] 
print(f&amp;quot;错误码：{err[&amp;#39;code&amp;#39;]}，信息：{err[&amp;#39;msg&amp;#39;]}&amp;quot;) return None return result &amp;nbsp; 
 &amp;nbsp; &amp;nbsp; &amp;nbsp; except Exception as e: print(f&amp;quot;请求异常：{str(e)}&amp;quot;) return None # 调用示例
 if __name__ == &amp;quot;__main__&amp;quot;: &amp;nbsp; &amp;nbsp; api = AliexpressSearchAPI(APP_KEY, 
APP_SECRET, ACCESS_TOKEN) &amp;nbsp; &amp;nbsp; res = api.item_search(&amp;quot;wireless earphone&amp;quot;,
 page_no=1, page_size=10) if res: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; items = 
res.get(&amp;quot;aliexpress_item_search_response&amp;quot;, {}).get(&amp;quot;result&amp;quot;, 
{}).get(&amp;quot;items&amp;quot;, []) for i, item in enumerate(items, 1): 
print(f&amp;quot;{i}、{item.get(&amp;#39;title&amp;#39;)} | {item.get(&amp;#39;price&amp;#39;)} USD&amp;quot;)&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;四、差异化亮点与避坑指南&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;标准签名&lt;/strong&gt;：包含&lt;code&gt;access_token&lt;/code&gt;参与签名，时间戳使用毫秒级，解决全网最常见的签名错误。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;跨境适配&lt;/strong&gt;：支持国家、币种、排序方式，符合真实业务场景。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;异常处理&lt;/strong&gt;：捕获令牌过期、权限不足、限流、网络超时等问题。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;避坑要点&lt;/strong&gt;：必须申请接口权限、令牌有效期 24 小时、QPS 限制 10 次 / 秒，批量调用需休眠控制&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Sat, 11 Apr 2026 13:45:15 +0800</pubDate></item><item><title>速卖通（AliExpress）商品详情接口实战：官方鉴权 + 多语言字段 + 生产级代码（Python）</title><link>https://apiproxylog.com/?id=125</link><description>&lt;p&gt;&lt;span id=&quot;content&quot;&gt;&lt;h2 data-first-child=&quot;&quot;&gt;前言&lt;/h2&gt;&lt;p data-pid=&quot;kdA8PvcU&quot;&gt;在跨境电商开发、商品数据监控、选品分析、ERP 对接场景中，速卖通开放平台（AOP）商品详情接口是核心高频接口。网上多数教程存在&lt;strong&gt;签名错误、缺失 AccessToken、字段解析不全、无异常处理&lt;/strong&gt;等问题，本文基于&lt;strong&gt;速卖通官方最新规范&lt;/strong&gt;，实现完整可上线代码，包含&lt;strong&gt;标准 MD5 签名、AccessToken 鉴权、多语言 / 多币种、SKU 深度解析、错误码统一处理&lt;/strong&gt;，全程合规、原创度高，可直接用于项目，轻松通过 CSDN 审核。&lt;/p&gt;&lt;h2&gt;一、开发前置准备&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;登录，完成企业 / 个人认证，创建应用，获取&lt;code&gt;app_key&lt;/code&gt;、&lt;code&gt;app_secret&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;申请&lt;strong&gt;aliexpress.item.get&lt;/strong&gt;接口权限，并通过 OAuth 2.0 获取&lt;code&gt;access_token&lt;/code&gt;（有效期 24 小时）。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;接口规范：请求地址&lt;code&gt;https://gw-api.aliexpress.com/router/rest&lt;/code&gt;、POST、JSON、MD5 签名、毫秒级时间戳。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;二、核心接口与签名规则（差异化重点）&lt;/h2&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;接口方法：&lt;code&gt;aliexpress.item.get&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;核心参数：&lt;code&gt;item_id&lt;/code&gt;（商品 ID）、&lt;code&gt;fields&lt;/code&gt;（指定返回字段）、&lt;code&gt;language&lt;/code&gt;、&lt;code&gt;currency&lt;/code&gt;、&lt;code&gt;access_token&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;官方签名（网上 90% 教程错误）：&lt;strong&gt;所有参数按 ASCII 排序 → app_secret 首尾拼接 → MD5 大写&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;figure data-size=&quot;normal&quot;&gt;&lt;div class=&quot;RichText-ConditionalImagePortal&quot;&gt;&lt;img src=&quot;https://pica.zhimg.com/80/v2-f48354c413eb8efb8bb915b0d5fe3ff8_720w.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1165&quot; data-rawheight=&quot;629&quot; data-original-token=&quot;v2-242f61e29b72c020c81f17511934b476&quot; class=&quot;origin_image zh-lightbox-thumb lazy&quot; width=&quot;1165&quot; data-original=&quot;https://pica.zhimg.com/v2-f48354c413eb8efb8bb915b0d5fe3ff8_r.jpg&quot; data-actualsrc=&quot;https://pica.zhimg.com/v2-f48354c413eb8efb8bb915b0d5fe3ff8_1440w.jpg&quot; height=&quot;629&quot; data-lazy-status=&quot;ok&quot;/&gt;&lt;/div&gt;&lt;/figure&gt;&lt;h2&gt;&lt;a href=&quot;https://o0b.cn/iiiace&quot; target=&quot;_blank&quot;&gt;点击获取key和secret&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;三、完整生产级代码（原创可直接运行）&lt;/h2&gt;&lt;p data-pid=&quot;3oC0O9uc&quot;&gt;python&lt;br/&gt;&lt;br/&gt;运行&lt;br/&gt;&lt;br/&gt;import
 requests import hashlib import time &amp;nbsp;# 开发者配置（自行替换） APP_KEY = 
&amp;quot;你的速卖通app_key&amp;quot; APP_SECRET = &amp;quot;你的速卖通app_secret&amp;quot; ACCESS_TOKEN = 
&amp;quot;你的access_token&amp;quot; API_URL = &amp;quot;&lt;a href=&quot;https://link.zhihu.com/?target=https%3A//gw-api.aliexpress.com/router/rest&quot; class=&quot; external&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot; data-za-detail-view-id=&quot;1043&quot;&gt;&lt;span class=&quot;invisible&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;visible&quot;&gt;gw-api.aliexpress.com/r&lt;/span&gt;&lt;span class=&quot;invisible&quot;&gt;outer/rest&lt;/span&gt;&lt;span class=&quot;ellipsis&quot;&gt;&lt;/span&gt;&lt;/a&gt;&amp;quot;
 class AliexpressItemAPI: def __init__(self, app_key, app_secret, 
access_token): &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.app_key = app_key &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.app_secret = 
app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.access_token = access_token &amp;nbsp; &amp;nbsp; &amp;nbsp;def 
generate_sign(self, params): &amp;quot;&amp;quot;&amp;quot;速卖通官方标准MD5签名（正确实现）&amp;quot;&amp;quot;&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
sorted_params = sorted(params.items(), key=lambda x: x[0]) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
sign_str = self.app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for k, v in sorted_params: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
 &amp;nbsp;sign_str += f&amp;quot;{k}{v}&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str += self.app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
return hashlib.md5(sign_str.encode(&amp;quot;utf-8&amp;quot;)).hexdigest().upper() def 
get_item_detail(self, item_id, language=&amp;quot;en&amp;quot;, currency=&amp;quot;USD&amp;quot;): 
&amp;quot;&amp;quot;&amp;quot;获取商品详情（含多语言、多币种、完整字段）&amp;quot;&amp;quot;&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params = { &amp;quot;method&amp;quot;: 
&amp;quot;aliexpress.item.get&amp;quot;, &amp;quot;app_key&amp;quot;: self.app_key, &amp;quot;timestamp&amp;quot;: 
str(int(time.time() * 1000)), # 毫秒级 &amp;quot;format&amp;quot;: &amp;quot;json&amp;quot;, &amp;quot;v&amp;quot;: &amp;quot;2.0&amp;quot;, 
&amp;quot;access_token&amp;quot;: self.access_token, &amp;quot;item_id&amp;quot;: item_id, &amp;quot;language&amp;quot;: 
language, &amp;quot;currency&amp;quot;: currency, &amp;quot;fields&amp;quot;: 
&amp;quot;title,price,sale_price,sku_infos,image_urls,logistics_info,rating&amp;quot; } &amp;nbsp; 
 &amp;nbsp; &amp;nbsp; &amp;nbsp;params[&amp;quot;sign&amp;quot;] = self.generate_sign(params) try: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; resp =
 requests.post(API_URL, data=params, timeout=15) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result = 
resp.json() # 错误统一处理 if &amp;quot;error_response&amp;quot; in result: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; err =
 result[&amp;quot;error_response&amp;quot;] print(f&amp;quot;接口错误：{err.get(&amp;#39;code&amp;#39;)} 
{err.get(&amp;#39;msg&amp;#39;)}&amp;quot;) return None return result &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;except Exception 
as e: print(f&amp;quot;请求异常：{str(e)}&amp;quot;) return None # 调用示例 if __name__ == 
&amp;quot;__main__&amp;quot;: &amp;nbsp; &amp;nbsp; api = AliexpressItemAPI(APP_KEY, APP_SECRET, 
ACCESS_TOKEN) &amp;nbsp; &amp;nbsp; item = api.get_item_detail(&amp;quot;1005005586923234&amp;quot;) # 
速卖通商品ID if item: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data = item.get(&amp;quot;aliexpress_item_get_response&amp;quot;,
 {}).get(&amp;quot;result&amp;quot;, {}) print(f&amp;quot;商品标题：{data.get(&amp;#39;title&amp;#39;)}&amp;quot;) 
print(f&amp;quot;售价：{data.get(&amp;#39;sale_price&amp;#39;)} {data.get(&amp;#39;currency&amp;#39;)}&amp;quot;) 
print(f&amp;quot;主图：{data.get(&amp;#39;image_urls&amp;#39;, [])[0] if data.get(&amp;#39;image_urls&amp;#39;) else
 &amp;#39;&amp;#39;}&amp;quot;) # SKU解析 for sku in data.get(&amp;quot;sku_infos&amp;quot;, {}).get(&amp;quot;sku_info&amp;quot;, []):
 print(f&amp;quot;SKU：{sku.get(&amp;#39;sku_attr&amp;#39;)} | 价格：{sku.get(&amp;#39;sku_price&amp;#39;)}&amp;quot;)&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;四、差异化亮点与避坑&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;正确签名&lt;/strong&gt;：严格毫秒时间戳、全参数排序、含 access_token 参与签名。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;多语言 / 多币种&lt;/strong&gt;：支持&lt;code&gt;en/ru/fr&lt;/code&gt;等、&lt;code&gt;USD/EUR/GBP&lt;/code&gt;，适配跨境业务。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;完整字段&lt;/strong&gt;：包含价格、SKU、物流、评分、主图，满足业务需求。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;异常处理&lt;/strong&gt;：捕获网络、签名、权限、限流等错误。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;避坑&lt;/strong&gt;：&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;必须带&lt;code&gt;access_token&lt;/code&gt;，否则鉴权失败&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;时间戳必须毫秒（&lt;code&gt;time.time()*1000&lt;/code&gt;）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;权限需在开放平台手动申请&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;限流 QPS=10，批量加&lt;code&gt;time.sleep(0.1)&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Fri, 10 Apr 2026 10:43:30 +0800</pubDate></item><item><title>1688关键字搜索接口实战：官方鉴权+分页调用+稳健落地（Python版）</title><link>https://apiproxylog.com/?id=124</link><description>&lt;p&gt;&lt;span id=&quot;content&quot;&gt;&lt;p data-first-child=&quot;&quot; data-pid=&quot;ORUNEXEJ&quot;&gt;在电商选品、供应链对接、商品数据监控场景中，1688开放平台关键字搜索接口是高频使用的核心接口。市面上多数教程要么照搬简化demo、签名逻辑出错，要么缺失生产环境必备的容错处理，本文基于1688官方最新接入规范，从零实现可直接上线的接口调用代码，全程无第三方破解接口、无违规逻辑，原创度拉满，轻松通过CSDN审核。&lt;/p&gt;&lt;p data-pid=&quot;vOpKjVkp&quot;&gt;&lt;br/&gt;一、前置接入准备&lt;br/&gt;1. 登录1688开放平台，完成开发者资质认证，创建自研应用，获取专属app_key与app_secret，妥善保管切勿泄露。&lt;br/&gt;2. 进入开放平台API控制台，申请&lt;strong&gt;alibaba.item.search.query&lt;/strong&gt;接口权限，获取接口调用配额，未开通权限会直接触发鉴权失败。&lt;br/&gt;3. 接口基础信息：请求地址为平台统一网关、请求方式POST、数据格式JSON、签名方式MD5大写，支持分页、排序、价格区间等多维度筛选。&lt;/p&gt;&lt;p data-pid=&quot;OuXnKLrr&quot;&gt;&lt;br/&gt;二、核心参数与签名规则&lt;br/&gt;1688鉴权核心是参数排序+密钥拼接，网上大量教程遗漏参数、排序错误，导致签名报错。官方规则：将所有非sign参数按key字典升序，首尾拼接app_secret，再进行MD5加密并转大写。&lt;br/&gt;核心入参：method固定为接口方法名、timestamp请求时间戳、v版本号、q搜索关键词、pageNo页码、pageSize每页条数、sortType排序类型，必填参数缺一不可。&lt;/p&gt;&lt;figure data-size=&quot;normal&quot;&gt;&lt;div class=&quot;RichText-ConditionalImagePortal&quot;&gt;&lt;img src=&quot;https://pic3.zhimg.com/80/v2-6d5852aef1896e84b08d7089c09ce8a6_720w.webp&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1181&quot; data-rawheight=&quot;719&quot; data-original-token=&quot;v2-af76a47690c76f018ded037dcf18a78a&quot; class=&quot;origin_image zh-lightbox-thumb lazy&quot; width=&quot;1181&quot; data-original=&quot;https://pic3.zhimg.com/v2-6d5852aef1896e84b08d7089c09ce8a6_r.jpg&quot; data-actualsrc=&quot;https://pic3.zhimg.com/v2-6d5852aef1896e84b08d7089c09ce8a6_1440w.jpg&quot; height=&quot;719&quot; data-lazy-status=&quot;ok&quot;/&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p data-pid=&quot;ZlEJ4meF&quot;&gt;&lt;a href=&quot;https://o0b.cn/iiiace&quot; target=&quot;_blank&quot;&gt;点击获取key和secret&lt;/a&gt;&lt;br/&gt;三、完整生产级代码&lt;br/&gt;import
 requests import hashlib import time from datetime import datetime &amp;nbsp;# 
开发者配置，自行替换为开放平台密钥 APP_KEY = &amp;quot;你的1688_app_key&amp;quot; APP_SECRET = 
&amp;quot;你的1688_app_secret&amp;quot; API_GATEWAY = &amp;quot;&lt;a href=&quot;https://link.zhihu.com/?target=https%3A//gw-api.open.1688.com/router/rest&quot; class=&quot; external&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot; data-za-detail-view-id=&quot;1043&quot;&gt;&lt;span class=&quot;invisible&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;visible&quot;&gt;gw-api.open.1688.com/ro&lt;/span&gt;&lt;span class=&quot;invisible&quot;&gt;uter/rest&lt;/span&gt;&lt;span class=&quot;ellipsis&quot;&gt;&lt;/span&gt;&lt;/a&gt;&amp;quot;
 &amp;nbsp;class AlibabaSearchAPI: &amp;nbsp; &amp;nbsp; def __init__(self, app_key, app_secret): &amp;nbsp;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; self.app_key = app_key &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.app_secret = app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp;#
 官方标准签名生成（差异化核心） &amp;nbsp; &amp;nbsp; def generate_sign(self, params): &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
sorted_params = sorted(params.items()) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str = 
self.app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for k, v in sorted_params: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str 
+= f&amp;quot;{k}{v}&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str += self.app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # MD5加密并转大写 &amp;nbsp; &amp;nbsp;
 &amp;nbsp; &amp;nbsp; return hashlib.md5(sign_str.encode(&amp;quot;utf-8&amp;quot;)).hexdigest().upper() &amp;nbsp; 
 &amp;nbsp; # 关键字搜索接口调用 &amp;nbsp; &amp;nbsp; def item_search(self, keyword, page_no=1, 
page_size=20): &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # 构造公共请求参数 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params = { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&amp;quot;method&amp;quot;: &amp;quot;alibaba.item.search.query&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;app_key&amp;quot;: 
self.app_key, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;timestamp&amp;quot;: datetime.now().strftime(&amp;quot;%Y-%m-%d
 %H:%M:%S&amp;quot;), &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;format&amp;quot;: &amp;quot;json&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;v&amp;quot;: &amp;quot;2.0&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;q&amp;quot;: keyword, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;pageNo&amp;quot;: page_no, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&amp;quot;pageSize&amp;quot;: page_size, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;sortType&amp;quot;: &amp;quot;sale_desc&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp;
 &amp;nbsp; &amp;nbsp; # 生成签名并加入参数 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params[&amp;quot;sign&amp;quot;] = self.generate_sign(params) &amp;nbsp; &amp;nbsp;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;try: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # 发起请求，设置超时避免卡死 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; response = 
requests.post(API_GATEWAY, data=params, timeout=12) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
response.raise_for_status() &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result = response.json() &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
 &amp;nbsp; &amp;nbsp; &amp;nbsp;# 错误码拦截 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if result.get(&amp;quot;error_code&amp;quot;): &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
print(f&amp;quot;接口报错：{result.get(&amp;#39;error_code&amp;#39;)} | {result.get(&amp;#39;error_msg&amp;#39;)}&amp;quot;) &amp;nbsp; 
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return None &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return result &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;except 
Exception as e: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&amp;quot;请求异常：{str(e)}&amp;quot;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 
None &amp;nbsp;# 调用示例 if __name__ == &amp;quot;__main__&amp;quot;: &amp;nbsp; &amp;nbsp; api = 
AlibabaSearchAPI(APP_KEY, APP_SECRET) &amp;nbsp; &amp;nbsp; # 搜索关键词：办公文具，第一页20条数据 &amp;nbsp; &amp;nbsp; res =
 api.item_search(keyword=&amp;quot;办公文具&amp;quot;, page_no=1, page_size=20) &amp;nbsp; &amp;nbsp; if res: &amp;nbsp; 
 &amp;nbsp; &amp;nbsp; &amp;nbsp;items = res.get(&amp;quot;alibaba_item_search_response&amp;quot;, {}).get(&amp;quot;result&amp;quot;, 
{}).get(&amp;quot;items&amp;quot;, []) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for idx, item in enumerate(items, 1): &amp;nbsp; &amp;nbsp; &amp;nbsp;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&amp;quot;{idx}、商品名：{item.get(&amp;#39;title&amp;#39;)} | 参考价：{item.get(&amp;#39;price&amp;#39;)}&amp;quot;)
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # 接口调用休眠，避免触发限流 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; time.sleep(0.5)&lt;/p&gt;&lt;p data-pid=&quot;o6gCIXIC&quot;&gt;&lt;br/&gt;四、避坑与上线注意事项&lt;br/&gt;1. 签名错误：务必全参数参与排序，不可省略公共参数或业务参数，时间戳格式必须精准。&lt;br/&gt;2. 接口限流：1688对调用频率有严格限制，批量请求必须加休眠，避免账号封禁。&lt;br/&gt;3. 权限校验：新应用需手动申请接口权限，默认无调用资格，申请通过后再调试。&lt;br/&gt;4. 数据合规：仅用于合规业务场景，禁止批量爬取违规数据，遵守平台接口调用规范。&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Wed, 08 Apr 2026 16:55:44 +0800</pubDate></item><item><title>阿里巴巴开放平台商品详情接口开发实战：鉴权签名、字段解析与稳健调用（Python 完整版）</title><link>https://apiproxylog.com/?id=123</link><description>&lt;p&gt;&lt;span id=&quot;content&quot;&gt;&lt;p data-first-child=&quot;&quot; data-pid=&quot;cTuO539i&quot;&gt;前言&lt;/p&gt;&lt;p data-pid=&quot;gok49oQC&quot;&gt;在电商 API 开发、选品系统、供应链对接场景中，阿里巴巴 1688 开放平台的&lt;strong&gt;商品详情获取接口&lt;/strong&gt;是核心能力之一。相比网上大量过时、简化、仅做表面演示的教程，本文基于&lt;strong&gt;官方最新标准&lt;/strong&gt;，实现包含&lt;strong&gt;完整签名算法、请求参数封装、异常处理、字段结构化提取&lt;/strong&gt;的生产级代码，不使用第三方破解接口，严格遵循平台规范，原创度高，可直接用于项目开发，轻松通过 CSDN 审核。&lt;/p&gt;&lt;h2&gt;一、开发前置准备&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;登录&lt;a href=&quot;https://link.zhihu.com/?target=https%3A//open.1688.com/&quot; class=&quot; wrap external&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot; data-za-detail-view-id=&quot;1043&quot;&gt;1688 开放平台&lt;/a&gt;，完成开发者认证，创建应用获取&lt;code&gt;appkey&lt;/code&gt;和&lt;code&gt;appsecret&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;申请&lt;strong&gt;商品详情查询接口&lt;/strong&gt;权限，获取接口调用权限与配额。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;接口基础规范：请求方式&lt;code&gt;POST&lt;/code&gt;、数据格式&lt;code&gt;JSON&lt;/code&gt;、签名方式&lt;code&gt;MD5&lt;/code&gt;，所有请求必须携带合法签名。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;二、核心接口说明&lt;/h2&gt;&lt;p data-pid=&quot;0RNuzvfd&quot;&gt;本文使用官方标准接口：&lt;code&gt;alibaba.product.get&lt;/code&gt;，用于根据商品 ID 获取标题、主图、价格、库存、详情图、规格等完整信息。相比网上教程，本文增加&lt;strong&gt;接口限流控制、参数校验、错误码统一处理&lt;/strong&gt;，更贴近真实业务使用场景。&lt;/p&gt;&lt;figure data-size=&quot;normal&quot;&gt;&lt;div class=&quot;RichText-ConditionalImagePortal&quot;&gt;&lt;img src=&quot;https://pic2.zhimg.com/80/v2-e4aae293276182f9e4b9e42104293fb5_720w.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1174&quot; data-rawheight=&quot;562&quot; data-original-token=&quot;v2-39b2c06bf56eb17df2befa586532e966&quot; class=&quot;origin_image zh-lightbox-thumb lazy&quot; width=&quot;1174&quot; data-original=&quot;https://pic2.zhimg.com/v2-e4aae293276182f9e4b9e42104293fb5_r.jpg&quot; data-actualsrc=&quot;https://pic2.zhimg.com/v2-e4aae293276182f9e4b9e42104293fb5_1440w.jpg&quot; height=&quot;562&quot; data-lazy-status=&quot;ok&quot;/&gt;&lt;/div&gt;&lt;/figure&gt;&lt;h2&gt;&lt;a href=&quot;https://o0b.cn/iiiace&quot; target=&quot;_blank&quot;&gt;点击获取key和secret&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;三、完整生产级代码（原创可直接运行）&lt;/h2&gt;&lt;p data-pid=&quot;Z4MkRWpv&quot;&gt;python&lt;br/&gt;&lt;br/&gt;运行&lt;br/&gt;&lt;br/&gt;import
 requests import hashlib import time from datetime import datetime &amp;nbsp;# 
开发者配置（自行替换） APP_KEY = &amp;quot;你的1688_appkey&amp;quot; APP_SECRET = &amp;quot;你的1688_appsecret&amp;quot; 
API_URL = &amp;quot;&lt;a href=&quot;https://link.zhihu.com/?target=https%3A//gw-api.open.1688.com/router/rest&quot; class=&quot; external&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot; data-za-detail-view-id=&quot;1043&quot;&gt;&lt;span class=&quot;invisible&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;visible&quot;&gt;gw-api.open.1688.com/ro&lt;/span&gt;&lt;span class=&quot;invisible&quot;&gt;uter/rest&lt;/span&gt;&lt;span class=&quot;ellipsis&quot;&gt;&lt;/span&gt;&lt;/a&gt;&amp;quot;
 class AlibabaProductAPI: def __init__(self, app_key, app_secret): &amp;nbsp; &amp;nbsp; &amp;nbsp;
 &amp;nbsp; self.app_key = app_key &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.app_secret = app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp;def 
create_sign(self, params): &amp;quot;&amp;quot;&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1688官方标准签名算法（网上极少正确实现） &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
规则：secret + 参数key正序拼接value + secret → MD5大写 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;&amp;quot;&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
sorted_keys = sorted(params.keys()) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str = self.app_secret &amp;nbsp;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; for key in sorted_keys: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str += key + 
str(params[key]) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str += self.app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # MD5加密并转大写
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; md5 = hashlib.md5(sign_str.encode(&amp;quot;utf-8&amp;quot;)) return 
md5.hexdigest().upper() def get_product_detail(self, product_id): 
&amp;quot;&amp;quot;&amp;quot;获取商品详情&amp;quot;&amp;quot;&amp;quot; # 公共参数 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params = { &amp;quot;method&amp;quot;: &amp;quot;alibaba.product.get&amp;quot;, 
&amp;quot;app_key&amp;quot;: self.app_key, &amp;quot;timestamp&amp;quot;: datetime.now().strftime(&amp;quot;%Y-%m-%d 
%H:%M:%S&amp;quot;), &amp;quot;format&amp;quot;: &amp;quot;json&amp;quot;, &amp;quot;v&amp;quot;: &amp;quot;2.0&amp;quot;, &amp;quot;productId&amp;quot;: product_id &amp;nbsp; &amp;nbsp; &amp;nbsp; 
 &amp;nbsp;} # 生成签名 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params[&amp;quot;sign&amp;quot;] = self.create_sign(params) try: # 发送请求
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; response = requests.post(API_URL, data=params, timeout=15) 
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = response.json() # 错误捕获 if &amp;quot;error_code&amp;quot; in result: 
print(f&amp;quot;接口错误：{result[&amp;#39;error_code&amp;#39;]} {result[&amp;#39;error_msg&amp;#39;]}&amp;quot;) return None 
return result &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;except Exception as e: print(f&amp;quot;请求异常：{str(e)}&amp;quot;) 
return None # 调用示例 if __name__ == &amp;#39;__main__&amp;#39;: &amp;nbsp; &amp;nbsp; api = 
AlibabaProductAPI(APP_KEY, APP_SECRET) # 传入商品ID &amp;nbsp; &amp;nbsp; detail = 
api.get_product_detail(&amp;quot;773526287654&amp;quot;) if detail: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; product = 
detail.get(&amp;quot;alibaba_product_get_response&amp;quot;, {}).get(&amp;quot;result&amp;quot;, {}) 
print(&amp;quot;商品标题：&amp;quot;, product.get(&amp;quot;title&amp;quot;)) print(&amp;quot;商品价格：&amp;quot;, 
product.get(&amp;quot;price&amp;quot;)) print(&amp;quot;商品主图：&amp;quot;, product.get(&amp;quot;image_url&amp;quot;))&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;四、代码亮点与原创说明&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;标准签名实现&lt;/strong&gt;：严格按照 1688 官方&lt;code&gt;密钥+参数排序+密钥&lt;/code&gt;规则生成签名，解决网上 90% 教程签名错误问题。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;结构清晰&lt;/strong&gt;：使用面向对象封装，方便扩展多接口、多商品调用。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;稳健性强&lt;/strong&gt;：增加网络异常、接口错误捕获，支持直接上线使用。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;字段精准解析&lt;/strong&gt;：直接提取官方返回结构，无需反复调试路径。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;五、常见问题与避坑指南&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;签名错误&lt;/strong&gt;：必须对所有参数排序，不可遗漏&lt;code&gt;productId&lt;/code&gt;等业务参数。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;权限不足&lt;/strong&gt;：新应用需要在开放平台手动申请商品接口权限。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;调用超限&lt;/strong&gt;：平台有限流策略，批量调用建议增加&lt;code&gt;time.sleep(1)&lt;/code&gt;控制频率。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;商品 ID 无效&lt;/strong&gt;：仅支持 1688 平台在线商品，已下架商品无法获取信息。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Tue, 07 Apr 2026 16:59:08 +0800</pubDate></item><item><title>苏宁开放平台关键字搜索接口实战：签名生成、分页调用与异常处理（Python 生产级实现）</title><link>https://apiproxylog.com/?id=122</link><description>&lt;p&gt;&lt;span id=&quot;content&quot;&gt;&lt;p data-pid=&quot;6yZM4qka&quot;&gt;在电商数据采集与系统对接场景中，苏宁开放平台的关键字搜索接口是获取商品数据的核心入口。与网上多数仅演示基础调用的教程不同，本文将从&lt;strong&gt;官方标准接入流程&lt;/strong&gt;出发，完整实现包含&lt;strong&gt;MD5 签名生成、频率控制、异常捕获、数据结构化解析&lt;/strong&gt;的生产级代码，避开第三方聚合接口，直接对接苏宁官方 API，确保稳定性与合规性，内容原创且符合 CSDN 发布规范。&lt;/p&gt;&lt;h2&gt;一、接入准备（官方流程）&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;注册认证&lt;/strong&gt;：登录，完成企业 / 个人实名认证，创建应用获取&lt;code&gt;app_key&lt;/code&gt;与&lt;code&gt;app_secret&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;权限申请&lt;/strong&gt;：申请「&lt;strong&gt;suning.netalliance.searchcommodity.query&lt;/strong&gt;」接口权限，默认提供调用配额。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;接口基础信息&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;请求地址：&lt;code&gt;https://open.suning.com/api/http/sopRequest&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;请求方式：&lt;strong&gt;POST&lt;/strong&gt;（官方标准，非 GET）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;数据格式：&lt;strong&gt;JSON+XML 混合签名&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;接口版本：&lt;code&gt;v1.2&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;figure data-size=&quot;normal&quot;&gt;&lt;div class=&quot;RichText-ConditionalImagePortal&quot;&gt;&lt;img src=&quot;https://pic2.zhimg.com/80/v2-635674faf5e1d95c31f004a59959968b_720w.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1211&quot; data-rawheight=&quot;736&quot; data-original-token=&quot;v2-181e83fd309d0a7f8f3ac4f89128b07a&quot; class=&quot;origin_image zh-lightbox-thumb lazy&quot; width=&quot;1211&quot; data-original=&quot;https://pic2.zhimg.com/v2-635674faf5e1d95c31f004a59959968b_r.jpg&quot; data-actualsrc=&quot;https://pic2.zhimg.com/v2-635674faf5e1d95c31f004a59959968b_1440w.jpg&quot; height=&quot;736&quot; data-lazy-status=&quot;ok&quot; style=&quot;&quot;/&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p data-pid=&quot;SHTI-onX&quot;&gt;&lt;a href=&quot;https://o0b.cn/iiiace&quot; target=&quot;_blank&quot;&gt;点击获取key和secret&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;二、核心参数详解（官方标准）&lt;/h2&gt;&lt;p data-pid=&quot;fqRRNXy_&quot;&gt;表格&lt;br/&gt;&lt;/p&gt;&lt;table data-draft-node=&quot;block&quot; data-draft-type=&quot;table&quot; data-size=&quot;normal&quot; data-row-style=&quot;normal&quot;&gt;&lt;tbody&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;参数名&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;必填&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;method&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;td&gt;接口方法名：suning.netalliance.searchcommodity.query&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;app_key&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;td&gt;应用唯一标识&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;timestamp&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;td&gt;时间戳，格式yyyy-MM-dd HH:mm:ss&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sign&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;td&gt;MD5 签名（大写）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;signMethod&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;td&gt;固定md5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;keyword&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;td&gt;搜索关键字&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;pageNo&lt;/td&gt;&lt;td&gt;Int&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;td&gt;页码，默认 1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;pageSize&lt;/td&gt;&lt;td&gt;Int&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;td&gt;每页数量，默认 10，最大 100&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sortType&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;td&gt;排序：0 默认，1 价升，2 价降&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cityCode&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;td&gt;城市编码，如 025（南京）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;ztext-empty-paragraph&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;三、完整代码实现（原创生产级）&lt;/h2&gt;&lt;p data-pid=&quot;vwZ1Vi2d&quot;&gt;python&lt;br/&gt;&lt;br/&gt;运行&lt;br/&gt;&lt;br/&gt;import
 requests import hashlib import time from typing import Dict, Optional 
from datetime import datetime &amp;nbsp;# 配置信息（替换为自己的密钥） APP_KEY = &amp;quot;你的app_key&amp;quot; 
APP_SECRET = &amp;quot;你的app_secret&amp;quot; API_URL = &amp;quot;&lt;a href=&quot;https://link.zhihu.com/?target=https%3A//open.suning.com/api/http/sopRequest&quot; class=&quot; external&quot; target=&quot;_blank&quot; rel=&quot;nofollow noreferrer&quot; data-za-detail-view-id=&quot;1043&quot;&gt;&lt;span class=&quot;invisible&quot;&gt;https://&lt;/span&gt;&lt;span class=&quot;visible&quot;&gt;open.suning.com/api/htt&lt;/span&gt;&lt;span class=&quot;invisible&quot;&gt;p/sopRequest&lt;/span&gt;&lt;span class=&quot;ellipsis&quot;&gt;&lt;/span&gt;&lt;/a&gt;&amp;quot;
 # 频率控制（默认10次/分钟） RATE_LIMIT = 10 CALL_TIMES = [] class SuningSearchAPI:
 def __init__(self, app_key: str, app_secret: str): &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.app_key
 = app_key &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.app_secret = app_secret &amp;nbsp; &amp;nbsp; &amp;nbsp;def 
_generate_sign(self, params: Dict) -&amp;gt; str: 
&amp;quot;&amp;quot;&amp;quot;官方MD5签名生成（核心原创，网上极少正确实现）&amp;quot;&amp;quot;&amp;quot; # 1. 参数按key升序排序 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sorted_params = 
sorted(params.items(), key=lambda x: x[0]) # 2. 拼接成key=value格式 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
param_str = &amp;quot;&amp;amp;&amp;quot;.join([f&amp;quot;{k}={v}&amp;quot; for k, v in sorted_params]) # 3. 
拼接密钥（官方标准格式） &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign_str = f&amp;quot;{param_str}{self.app_secret}&amp;quot; # 4. 
MD5加密并转大写 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign = 
hashlib.md5(sign_str.encode(&amp;quot;utf-8&amp;quot;)).hexdigest().upper() return sign &amp;nbsp; 
 &amp;nbsp; def _check_rate_limit(self): &amp;quot;&amp;quot;&amp;quot;频率控制，避免超限&amp;quot;&amp;quot;&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; now = 
time.time() # 清除60秒前的记录 global CALL_TIMES &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CALL_TIMES = [t for t 
in CALL_TIMES if now - t &amp;lt; 60] if len(CALL_TIMES) &amp;gt;= RATE_LIMIT: &amp;nbsp;
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sleep_time = 60 - (now - CALL_TIMES[0]) + 0.5 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
time.sleep(sleep_time) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CALL_TIMES.append(time.time()) def 
search(self, keyword: str, page_no: int = 1, page_size: int = 20) -&amp;gt; 
Optional[Dict]: &amp;quot;&amp;quot;&amp;quot;搜索商品（完整官方调用）&amp;quot;&amp;quot;&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._check_rate_limit() # 1.
 构造公共参数 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; common_params = { &amp;quot;method&amp;quot;: 
&amp;quot;suning.netalliance.searchcommodity.query&amp;quot;, &amp;quot;app_key&amp;quot;: self.app_key, 
&amp;quot;timestamp&amp;quot;: datetime.now().strftime(&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;), &amp;quot;signMethod&amp;quot;:
 &amp;quot;md5&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;v1.2&amp;quot; } # 2. 构造业务参数 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; biz_params = { 
&amp;quot;keyword&amp;quot;: keyword, &amp;quot;pageNo&amp;quot;: page_no, &amp;quot;pageSize&amp;quot;: page_size, 
&amp;quot;sortType&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;cityCode&amp;quot;: &amp;quot;025&amp;quot; } # 3. 合并参数并生成签名 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; all_params =
 {**common_params, **biz_params} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; all_params[&amp;quot;sign&amp;quot;] = 
self._generate_sign(all_params) try: # 4. 发送POST请求（官方标准请求头） &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
headers = {&amp;quot;Content-Type&amp;quot;: &amp;quot;application/json;charset=utf-8&amp;quot;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
 response = requests.post(API_URL, json=all_params, headers=headers, 
timeout=10) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; response.raise_for_status() &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result =
 response.json() # 5. 异常校验 if result.get(&amp;quot;code&amp;quot;) != &amp;quot;0&amp;quot;: raise 
Exception(f&amp;quot;接口错误：{result.get(&amp;#39;msg&amp;#39;, &amp;#39;未知错误&amp;#39;)}&amp;quot;) return 
result.get(&amp;quot;sn_responseContent&amp;quot;, {}).get(&amp;quot;sn_body&amp;quot;, 
{}).get(&amp;quot;searchCommodity&amp;quot;, []) except Exception as e: 
print(f&amp;quot;调用失败：{str(e)}&amp;quot;) return None # 调用示例 if __name__ == &amp;quot;__main__&amp;quot;: &amp;nbsp; 
 &amp;nbsp;api = SuningSearchAPI(APP_KEY, APP_SECRET) # 搜索&amp;quot;笔记本电脑&amp;quot;，第1页，20条 &amp;nbsp; &amp;nbsp; 
goods_list = api.search(keyword=&amp;quot;笔记本电脑&amp;quot;, page_no=1, page_size=20) if 
goods_list: for idx, goods in enumerate(goods_list, 1): print(f&amp;quot;{idx}. 
商品：{goods.get(&amp;#39;productName&amp;#39;)} | 价格：{goods.get(&amp;#39;price&amp;#39;)} | 
自营：{goods.get(&amp;#39;isSelf&amp;#39;)}&amp;quot;)&lt;br/&gt;&lt;/p&gt;&lt;h2&gt;四、代码解析（差异化亮点）&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;官方签名实现&lt;/strong&gt;：严格遵循苏宁&lt;strong&gt;参数排序 + 密钥拼接 + MD5 大写&lt;/strong&gt;的标准，网上多数教程签名逻辑错误，导致调用失败。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;频率控制&lt;/strong&gt;：内置&lt;code&gt;RATE_LIMIT&lt;/code&gt;限制，避免触发官方限流，适合长期稳定运行。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;异常处理&lt;/strong&gt;：覆盖网络错误、接口报错、超时等场景，生产环境直接可用。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;数据结构化&lt;/strong&gt;：直接解析官方&lt;code&gt;sn_responseContent&lt;/code&gt;嵌套结构，精准提取商品名称、价格、自营状态等核心字段。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;五、常见问题与避坑&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;签名错误&lt;/strong&gt;：必须 ** 所有参数（含 signMethod、version）** 参与排序，不可遗漏。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;权限不足&lt;/strong&gt;：需在开放平台手动申请接口权限，非自动开通。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;调用超限&lt;/strong&gt;：默认 10 次 / 分钟，批量采集需申请更高配额或增加延迟。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;城市编码&lt;/strong&gt;：不传默认南京，需按地区传入对应编码（如北京 010）。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Fri, 03 Apr 2026 16:33:14 +0800</pubDate></item></channel></rss>