做亚马逊广告的,迟早会遇到一个坎:数据量大了,后台报表看不过来,想自动化优化广告,却发现官方后台的导出功能根本不够用。这时候,你就得认识一下亚马逊广告接口(Amazon Advertising API)。这个接口就是亚马逊给开发者和运营者开的一扇门,让你可以通过代码直接拉取广告数据、管理广告活动、生成报告,甚至做自动化竞价调整。它不是那种“锦上添花”的工具,而是广告规模上来之后,真正能提升效率、减少人工失误的关键设施。
这篇文章是给谁看的?主要三类人:一是做电商运营的朋友,手里好几个站点、几十个广告活动,后台点来点去已经快把鼠标点坏了;二是做广告优化和数据分析的,需要把广告数据对接到自己的看板或报表系统里;三是技术背景的开发者和数据工程师,负责搭建和维护广告自动化系统。文章会从接口的基础概念、认证流程、实际操作到常见问题排查,一步步拆开讲清楚,保证你看完能少走很多弯路。
我自己的经验是,这套接口熟悉之后,过去需要一个下午手动整理的数据,现在一条请求几分钟就搞定了,而且还不容易出错。更重要的是,很多广告优化的“骚操作”,比如根据ACOS自动调价、批量否定关键词,不靠API是根本玩不转的。废话不多说,下面直接上干货。
1. 内容整体设计与思路拆解
1.1 亚马逊广告接口到底是个什么玩意
先给不熟悉的同学建立个基本概念。API,也就是应用程序编程接口,通俗点说就是系统之间对话的“服务窗口”。你不需要知道亚马逊后台是怎么运行的,只需要按照它给出的规则发请求,就能拿到想要的数据或者执行某个操作。打个比方,你去餐厅吃饭,菜单就是API文档,服务员是接口执行者,厨房是亚马逊的广告系统。你照着菜单点菜(发请求),服务员把菜端上来(返回数据),就这么简单。
亚马逊广告接口,官方叫法是Amazon Advertising API,目前主流版本是v3。它覆盖了亚马逊广告体系里的主要业务,包括:
- 广告活动管理:创建、修改、暂停广告组和广告活动,调整预算和竞价。
- 报告生成:生成点击、花费、转化等指标的详细报告,支持按天、按小时、按广告活动等维度。
- 产品广告:也就是Sponsored Products(SP),最常见的一类广告。
- 品牌广告:Sponsored Brands(SB),用于品牌推广。
- 展示型广告:Sponsored Display(SD),覆盖站内站外展示位置。
- 受众与定向数据:获取受众标签、搜索词报告等,用于优化投放策略。
对大多数运营和开发来说,日常高频使用的是报告接口和管理接口这两类。报告接口用来拉数据,管理接口用来调策略,两个配合起来,基本就能实现广告的“半自动化”甚至“全自动化”。
1.2 为什么要用接口:从手工操作到程序化广告的转变
我见过不少卖家,广告账户里只有几十个活动,每天手动调整还勉强忙得过来。但一旦你开始做精细化运营,比如按SKU维度拆分广告组、每天优化搜索词、每周做周期报告,后台那套手工操作就完全招架不住了。举个例子,假设你有10个广告组,每个组每天有几百个搜索词,你要从后台一个个导出表格,再筛选出高ACOS的词进行否定,这个过程至少耗费两到三个小时,而且容易漏词、点错按钮。
用接口之后,你可以在飞书或钉钉的机器人上输入一条指令,系统自动调取前一天的所有转化数据,自动对比ACOS阈值,自动把超过阈值的搜索词加入否定关键词列表。整个过程不到五分钟,还全程可追溯。这不只是效率的差异,更是操作思路的转变:从“人跟着广告跑”变成“广告跟着数据跑”。
所以,接口并不是那些“技术大牛”才需要的东西。但凡广告账户每月花费超过几万块,或者需要同时管理多个站点,接口带来的收益就会远高于接入和学习的成本。它能做的东西很多,但最核心的价值就是两个词:效率和准确率。
1.3 技术选型与方案设计:用哪种语言、怎么设计架构
做技术选型时,常见的选择是Python和Java。我个人的建议是优先Python,原因很简单:亚马逊广告API返回的数据基本是JSON格式,Python处理JSON有天然优势;同时你后续想做数据分析、机器学习调价,Python生态里的大多数库都能无缝衔接,像pandas、scikit-learn这些,直接用就可以。
架构设计上,核心是“任务队列”思路。因为亚马逊广告API很多接口是异步的,比如报告生成,你发一个请求它不马上给你数据,而是先创建一个任务,你得轮询任务状态,等任务完成后才能下载结果。所以比较稳妥的方案是:
- 用定时任务(比如Celery或APScheduler)去触发数据拉取。
- 拉取任务放进消息队列,消费者进程负责调用API和轮询状态。
- 数据拿到之后存到数据库(MySQL、PostgreSQL或ClickHouse,看数据量和查询需求)。
- 然后对数据做清洗、聚合,输出报表或触发规则引擎。
这套架构听起来挺传统,但胜在稳定、好扩展。我见过有些人一开始就整Kafka、Flink这些重型组件,小规模数据根本用不上,反而把自己搞得很累。先把链路跑通,后续再逐步升级,才是务实的做法。
2. 核心细节解析与实操要点
2.1 账户与权限配置:开发商账号和广告账户的关联
想把API用起来,第一步是准备好访问凭证。这一块看似简单,实际操作中还是有不少坑的。
首先,你需要一个亚马逊开发者账号,可以在Amazon Developer Portal注册。注册时需要绑定一个亚马逊买家账号,建议用主账号去注册。然后,在开发者后台创建一个“安全配置文件”(Security Profile),它会生成两样东西:Client ID和Client Secret,也就是客户端ID和客户端密钥。这两个信息后面认证时要用到,一定要保管好。
接着,在安全配置文件里配置“允许的返回URN”,也就是OAuth2.0认证后的回调地址。如果你是本地测试,可以填http://localhost:8080之类的本地地址;如果线上环境,就填你服务器的回调接口。这个配置很关键,填错了认证时会报“redirect_uri mismatch”之类的错误。
之后,你需要把广告账户和这个开发者账号关联起来。在Amazon Advertising控制台里,有一个“API访问”或是“集成”的选项,选择关联开发者账号,授权后系统会生成一个“刷新令牌”(Refresh Token)。这个刷新令牌是长期有效的,用来获取临时的访问令牌(Access Token)。
注意:Refresh Token一定要妥善保存,它相当于你API访问的“主钥匙”。泄露给第三方,别人就能控制你的广告账户。建议放在环境变量或专门的密钥管理服务里,不要硬编码到代码中。
2.2 认证流程详解:OAuth 2.0的坑与解法
亚马逊广告API使用OAuth 2.0认证,整体流程不复杂,但有几个容易出错的点。
标准流程是:
- 用Refresh Token请求Access Token。
- Access Token有效期一般是一小时,过期后需要用Refresh Token重新获取。
- Access Token放在HTTP请求头的
Authorization: Bearer {token}里。
下面是一段Python代码示例,演示如何从Refresh Token获取Access Token:
import requests CLIENT_ID = "your_client_id" CLIENT_SECRET = "your_client_secret" REFRESH_TOKEN = "your_refresh_token" url = "https://api.amazon.com/auth/o2/token" payload = { "grant_type": "refresh_token", "refresh_token": REFRESH_TOKEN, "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET } resp = requests.post(url, data=payload) if resp.status_code == 200: access_token = resp.json()["access_token"] expires_in = resp.json()["expires_in"] print(f"获取Access Token成功,有效期{expires_in}秒") else: print(f"认证失败: {resp.status_code} {resp.text}")这里有个很容易踩的坑:亚马逊的认证端点是https://api.amazon.com/auth/o2/token,而不是广告接口的域名https://advertising-api.amazon.com。不少人一开始搞混,直接往广告域名上发认证请求,结果一直报404。记住,认证走的是Amazon统一认证服务,拿完Token再调广告接口。
另外,不同站点的广告接口域名不同,比如美国站是advertising-api.amazon.com,欧洲站是advertising-api-eu.amazon.com,远东站是advertising-api-fe.amazon.com。你获取Token的方式是一样的,但调用广告接口时的Base URL不同。这个细节容易忽略,但错了任何请求都发不出去。
2.3 核心端点与数据结构:常用接口认一遍
简单过一遍常用的几个接口端点,方便后续实操时“见名知意”。在v3版本中,核心接口大致分为几类:
| 功能分类 | 接口路径 | 用途 |
|---|---|---|
| 广告活动管理 | /sp/campaigns、/sb/campaigns、/sd/campaigns | 查询、创建、更新不同广告类型的活动 |
| 广告组管理 | /sp/adGroups、/sd/adGroups | 管理广告组信息 |
| 关键词管理 | /sp/negativeKeywords、/sp/productAds | 管理关键词和否定关键词 |
| 报告生成 | /reporting/reports | 创建报告任务 |
| 报告状态与下载 | /reporting/reports/{reportId} | 查询报告状态,下载报告文件 |
| 快照接口 | /sp/campaigns加?includeExtendedDataFields=false | 获取快照数据,常用于全量导出 |
每一个请求都需要在Header里带上必要的参数,最基本的就是Authorization和Amazon-Advertising-API-ClientId。
举个例子,查询美国站SP广告活动列表的请求,大概是这样的:
GET https://advertising-api.amazon.com/sp/campaigns?startIndex=0&count=100Header里面要带:
Authorization: Bearer {access_token} Amazon-Advertising-API-ClientId: {client_id} Amazon-Advertising-API-Scope: {profile_id}其中Amazon-Advertising-API-Scope是你绑定的广告账户的Profile ID,这个ID可以在广告控制台里找,也可以调用接口去查询。每个广告账户都有唯一的Profile ID,调用前必须先确认这个ID,否则接口会报“Missing scope”错误。
数据结构方面,以广告活动对象为例,返回的JSON大致长这样:
{ "campaignId": 123456789, "name": "夏日大促-主推款", "campaignState": "ENABLED", "dailyBudget": 50.0, "startDate": "2024-06-01", "endDate": "2024-07-01", "targetingType": "AUTO", "advertisingChannelType": "SPONSORED_PRODUCTS" }字段含义比较直白,dailyBudget是每日预算,targetingType是投放方式,AUTO是自动定向,MANUAL是手动定向。搞清楚数据结构,后面做批量更新就很顺手了。
2.4 报告生成与下载:异步处理机制解读
报告接口是日常使用最频繁的接口之一,但它的流程和普通查询接口不太一样,是异步的,不能发了请求立刻拿数据。
标准流程是三步:
- 发送创建报告的请求,带上报告类型、日期范围、聚合粒度等信息。
- 拿到一个
reportId,然后用这个ID去轮询报告生成状态。 - 状态变成
COMPLETED后,通过提供的location字段去下载报告文件。
创建报告请求示例:
import requests headers = { "Authorization": f"Bearer {access_token}", "Amazon-Advertising-API-ClientId": CLIENT_ID, "Amazon-Advertising-API-Scope": PROFILE_ID, "Content-Type": "application/vnd.api+json" } body = { "name": "SP-Search-Term-Report", "startDate": "2024-12-01", "endDate": "2024-12-07", "configuration": { "adProduct": "SPONSORED_PRODUCTS", "groupBy": ["campaign"], "columns": ["campaignName", "campaignId", "impressions", "clicks", "cost"] } } url = "https://advertising-api.amazon.com/reporting/reports" resp = requests.post(url, headers=headers, json=body) print(resp.json())返回结果里有一个reportId,对应一个报告任务。然后你隔几秒查询一次状态:
report_id = resp.json()["reportId"] status_url = f"https://advertising-api.amazon.com/reporting/reports/{report_id}" resp = requests.get(status_url, headers=headers) status = resp.json()["status"] print(status)当状态变成COMPLETED时,再取报告下载链接,下载到本地。整个过程中有几个要点:
- 报告不是即时生成,数据量大的情况下可能需要几十秒甚至几分钟,建议轮询间隔设成10秒到30秒。
- 报告字段可以自定义,但要注意,
campaignId这些是必须字段,不能去掉。 - 报告类型不同,支持的时间范围和聚合粒度不同,比如某些报告支持小时级数据,某些只支持以天为单位。
这个异步设计一开始用会觉得麻烦,但习惯之后就明白了,它其实是为了防止超大报告把服务器拖垮,让系统可以用更稳健的方式处理海量数据。所以在写自动化脚本时,一定要把“异步等待”机制考虑进去,别天真地以为发个请求就能立刻拿到数据。
3. 实操过程与核心环节实现
3.1 环境准备与依赖安装
建议用Python 3.9以上版本,建一个虚拟环境来隔离依赖。需要安装的主要库是requests,如果你后续要做数据处理,也顺手装上pandas和python-dotenv,python-dotenv用来管理环境变量,避免把密钥写死在代码里。
安装命令很简单:
pip install requests pandas python-dotenv在项目根目录创建一个.env文件,把刚才说到的几个敏感信息放进去:
CLIENT_ID=your_client_id CLIENT_SECRET=your_client_secret REFRESH_TOKEN=your_refresh_token PROFILE_ID=your_profile_id然后代码里用load_dotenv()把这些变量加载到环境变量里,后续就可以安全使用了。
3.2 第一个API调用:获取广告组列表
从最简单的“读取”类接口开始。我们调用SP广告组的查询接口,把当前账户下前100个广告组拉出来看看。
import os import requests from dotenv import load_dotenv load_dotenv() CLIENT_ID = os.getenv("CLIENT_ID") CLIENT_SECRET = os.getenv("CLIENT_SECRET") REFRESH_TOKEN = os.getenv("REFRESH_TOKEN") PROFILE_ID = os.getenv("PROFILE_ID") def get_access_token(): url = "https://api.amazon.com/auth/o2/token" payload = { "grant_type": "refresh_token", "refresh_token": REFRESH_TOKEN, "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET } resp = requests.post(url, data=payload) return resp.json()["access_token"] def get_ad_groups(): token = get_access_token() url = "https://advertising-api.amazon.com/sp/adGroups" headers = { "Authorization": f"Bearer {token}", "Amazon-Advertising-API-ClientId": CLIENT_ID, "Amazon-Advertising-API-Scope": PROFILE_ID } resp = requests.get(url, params={"startIndex": 0, "count": 100}, headers=headers) return resp.json() if __name__ == "__main__": data = get_ad_groups() print(f"共返回 {len(data)} 个广告组") print(data[:3])这段代码非常简单,但跑通之后,你就走进了亚马逊广告自动化的门槛。输出结果是一个JSON数组,每个元素是一个广告组对象,包含广告组ID、名称、广告活动ID、状态等信息。
跑通这个步骤,验证了三件事:
- OAuth认证流程是否配置正确。
- Profile ID是否有效。
- 网络环境是否能访问亚马逊广告接口。
如果是本地开发,网络环境通常没问题;但如果你在服务器或容器里跑,需要确保能够正常访问外网,并且没有防火墙把亚马逊的域名封掉。
3.3 数据报告自动化:从创建任务到下载结果
读列表比较基础,真正有实战价值的是自动化生成报告。我把整个流程封装成了一个Python类,方便反复调用。
import time import requests class AmazonAdsReporter: def __init__(self, access_token, client_id, profile_id): self.access_token = access_token self.client_id = client_id self.profile_id = profile_id self.headers = { "Authorization": f"Bearer {self.access_token}", "Amazon-Advertising-API-ClientId": self.client_id, "Amazon-Advertising-API-Scope": self.profile_id, "Content-Type": "application/vnd.api+json" } def create_report(self, report_name, start_date, end_date, columns, group_by=None): body = { "name": report_name, "startDate": start_date, "endDate": end_date, "configuration": { "adProduct": "SPONSORED_PRODUCTS", "groupBy": group_by or ["campaign"], "columns": columns } } url = "https://advertising-api.amazon.com/reporting/reports" resp = requests.post(url, headers=self.headers, json=body) if resp.status_code != 200: raise Exception(f"创建报告失败: {resp.text}") return resp.json()["reportId"] def wait_for_report(self, report_id, timeout=300): url = f"https://advertising-api.amazon.com/reporting/reports/{report_id}" start = time.time() while time.time() - start < timeout: resp = requests.get(url, headers=self.headers) status = resp.json()["status"] if status == "COMPLETED": return resp.json()["url"] elif status == "FAILED": raise Exception(f"报告生成失败: {resp.text}") time.sleep(10) raise TimeoutError("等待报告超时") def download_report(self, report_url): resp = requests.get(report_url) if resp.status_code != 200: raise Exception("报告下载失败") return resp.content reporter = AmazonAdsReporter(access_token, CLIENT_ID, PROFILE_ID) report_id = reporter.create_report( report_name="Daily-Campaign-Performance", start_date="2024-12-01", end_date="2024-12-07", columns=["campaignName", "campaignId", "impressions", "clicks", "cost", "purchases"] ) report_url = reporter.wait_for_report(report_id) data = reporter.download_report(report_url) with open("campaign_report.txt", "wb") as f: f.write(data)下载下来的报告一般是CSV格式,用pandas直接就能读进去做分析:
import pandas as pd from io import BytesIO df = pd.read_csv(BytesIO(data)) print(df.head())到这里,你已经实现了最核心的“数据拉取”能力。接下来想做什么,就完全看你的想象力了。你可以每天定时拉取数据,存储到数据库,然后做成可视化看板;也可以把数据交给规则引擎,自动调整竞价。
3.4 优化建议:批处理、并发与错误处理
接口用熟了之后,你可能会开始考虑“怎么跑得更快、更稳”的问题。这里分享几个我踩过坑之后总结出来的经验。
第一,请求要带指数退避的重试机制。亚马逊广告API有严格的速率限制(Rate Limit),单位时间内请求次数超了会返回429错误。我遇到过最夸张的情况是,并发拉取一下午数据,触发了限流,然后同一批任务反复重试,最后还是有一小部分报告没拿到。后来我做了个简单的重试封装:遇到429或者5xx错误,延迟1秒、2秒、4秒这样指数递增地重试,最多重试5次,明显稳了很多。
第二,能合并的请求尽量合并。比如你要查询多个广告活动的详细信息,官方支持用campaignIdFilter在请求体里批量查询,一次拉100个活动,比循环100次单个查询要高效得多。接口的速率限制是按请求次数算的,单位时间内并发的请求越少,越不容易被限流。
第三,注意时区和日期边界。亚马逊广告后台默认使用广告账户所在站点的时区,但API里有时可以指定时区。如果你同时管理美国站和欧洲站,报告的日期范围一定要明确是哪个时区的,否则很容易出现数据对不上、日报少一天的问题。建议在创建报告时显式指定时区参数,别用默认值。
3.5 安全与合规:密钥管理和权限最小化
使用API过程中,安全永远是不能忽视的。亚马逊广告API的权限范围比较大,一旦密钥泄露,攻击者可以完全控制你的广告账户,乱花钱、乱删活动,后果不堪设想。
我的做法是:
- 密钥不放在代码仓库里,使用环境变量或专门的密钥管理服务(比如AWS Secrets Manager、Vault)。
- 定期轮换Refresh Token,比如每三个月换一次,换掉之后旧密钥立即作废。
- 给不同的开发环境建不同的安全配置文件,生产和测试用不同的Client ID,避免测试环境操作影响了线上数据。
- 开启API调用的日志记录,日志里脱敏掉Token信息,只保留请求ID、时间和操作类型。一旦有异常调用,可以快速追溯。
另外,亚马逊有明确的API使用协议,不允许利用接口做违规操作,比如批量创建大量垃圾广告、恶意抓取竞争对手数据等。合规使用,长期来看才是稳妥的。
4. 常见问题与排查技巧实录
4.1 认证失败:Access Token总是获取不到
新手最常遇到的问题就是认证环节。症状通常有两种:一是获取Access Token时报400或401,二是获取成功了但调用广告接口时提示“Invalid credentials”。
排查思路:
- 确认Client ID和Client Secret是否与安全配置文件里的完全一致,注意不要有多余空格。
- 确认Refresh Token是否和广告账户正确关联,如果不确定,可以回到广告控制台重新关联一次,刷新Token。
- 确认回调地址(Redirect URI)配置正确,有时本地测试时用了不太标准的地址,也会导致整个认证链认证不过去。
- 获取Token的请求,参数
grant_type必须是refresh_token,不能是其他值。
如果以上都排查过,还是认证失败,那就抓一下请求日志,看看具体的错误描述是“invalid_client”还是“invalid_grant”。前者通常是Client ID/Secret出错,后者基本是Refresh Token过期或不匹配。
4.2 请求被限流、超时的处理方案
用完一段时间接口后,很多人都会遇到“明明代码没问题,但它就是不工作”的诡异情况。最常见的就是请求超时,或者返回429。
亚马逊的限流策略不是单一的每分钟请求数限制,而是多个维度叠加的,比如单个接口的调用频率、每天的请求总量等。官方文档里有具体的参考值,但实际数值会动态调整。
我的处理办法是:
- 客户端本地做简单的限速,比如用
time.sleep()控制请求间隔,或者用信号量限制并发数。 - 使用上面提到的指数退避重试机制,对429和5xx进行重试。
- 如果发现某个请求总是超时,检查是不是报告数据量太大。亚马逊接口对单个报告的数据量也有限制,建议拆小请求范围,比如按天拆,而不是一次拉一个月。
另外,下午的某些时间段(美国站白天)是API调用高峰,响应可能明显变慢。如果特别注重实时性,可以考虑在服务器上部署在美国东部等距离亚马逊数据中心更近的位置,延迟会有所降低。
4.3 数据不一致与延迟处理
使用API拉报告时,有时会发现数据和后台页面对不上。这往往不是接口Bug,而是数据同步延迟的问题。
比如,当天的实时数据和后台看到的“今日”数字有延迟,因为广告数据从点击发生到报表数据可用,中间有个处理窗口。经验规律是:SP广告的数据延迟通常在1小时以内,SB和SD可能稍微久一点。如果你做的是小时级监控,要注意这个延迟,别因为某小时数据为0就紧张。
对于跨天对比,建议用“T+1”的数据来做正式报表,头一天的数据在第二天凌晨拉取,通常都是完整且稳定的。当天实时数据仅供参考,不用于对账和结算。
4.4 实用日志与监控配置
最后分享一个我坚持了很久的习惯:给所有API调用加上日志和监控。日志不光用于排查问题,还能让你对API的整体调用情况心里有数。
日志至少记录以下信息:
- 请求时间、接口路径、请求参数(脱敏后的)。
- 响应状态码、耗时。
- 如果出错,记录错误体和请求ID。
另外,设置一个“失败率报警”的监控。比如,如果10分钟内API调用失败率超过20%,就推送消息到钉钉或企业微信。这样能在第一时间发现问题,而不是等老板来问你“广告数据怎么三天没更新了”。
我用这类方法,至少提前发现过两次Token过期和一次限流策略变化的问题,避免了自动化任务长期静默失败。真正做自动化的朋友应该都懂,最怕的不是报错,而是“什么都不报错,但数据一直不对”。
5. 进阶:从数据拉取到智能优化
把报告拉下来只是第一步。你可能更关心的是:既然有了这些数据,能不能让系统自动做点什么?
拿高频场景来说,最实用的是“根据ACOS自动调整竞价”。思路很简单:
- 每天定时拉取前一天的搜索词报告,按关键词维度统计ACOS。
- 如果某个关键词ACOS超过你设定的阈值(比如35%),就把竞价下调5%。
- 如果ACOS低于目标值(比如15%),说明出价还有提升空间,可以试试上调3%。
这套逻辑不需要机器学习,用一条简单的规则脚本就能实现。再进一步,你还可以增加“预算平滑”策略,比如每天只消耗预算的60%左右,剩下40%留给波动较大的日期使用,避免预算在上午就烧完。
再复杂一点,你可以把报告数据和库存数据关联起来。广告推的产品如果显示“即将断货”,就自动降低该广告组的预算,防止把钱烧在无货可卖的商品上。这些都是从“数据拉取”到“业务决策”的进阶玩法。
接口只是工具,关键还是看你怎么用它来解决实际问题。多想想你的广告业务有哪些重复性高的操作,哪些决策可以规则化、数据化,API的价值就会越来越大。
最后再分享一个我在实际项目里的小技巧:一定要把“幂等性”设计好。比如创建广告活动之前,先查一次是否已存在同名活动,如果存在就不要重复创建;更新竞价时带上版本号或更新时间,避免旧数据覆盖新操作。这些细节能让你的自动化系统跑得很稳,不会因为重复执行任务而搞乱广告账户。
关于亚马逊广告接口的实操,核心的东西大概就是这些了。接口文档虽然厚,但高频使用到的功能就这么几个。先把认证流程打通,再把报告拉取做顺,最后把数据用到业务优化中,你就已经跑赢了大多数还在手工操作的人了。如果后面你遇到了其他坑,欢迎在评论区留言,我们一起交流。