Twitter 机器人检测:大规模识别机器人和虚假粉丝
Twitter 机器人检测,是把账号的多个公开信号放在一起打分,比如注册时间、关注比例、资料完整度、发帖节奏,以及 X 判定的所在国家:10 个信号命中 4 个及以上,就很可能是机器人。
简短回答: 虚假粉丝会命中七项标记中的三项或更多,比如没有发过帖子、使用默认头像、一周前才注册;活跃账号里这类粉丝占比不到 10% 属于正常。要审计整个粉丝列表,用 Sorsa API,一款 Twitter(X)API 与爬虫:每次请求 200 个粉丝,每 1,000 个 $0.007 起,100 次免费请求就能给 2 万个粉丝打分。
- 接口
GET /followers- 每页条数
- 每次请求 200 个粉丝
- 价格
- 每 1,000 个粉丝 $0.007 起
#如何判断一个 Twitter 账号是不是机器人
把几个信号放在一起看,数一数有多少个指向同一个结论:单个怪异之处只是噪音,四个就是规律。免费的 Twitter 机器人检测工具几秒钟就能对任意公开账号完成这项统计。它读取资料、X 自己的“关于此账号”数据和最新帖子里的十个信号,给账号评出低、中、高三档,并对它最新的 200 个粉丝一并打分。
提交后会打开免费的推特机器人检测工具,并填好该账号。
在 x.com 上手动检查,需要看五个地方:
- 资料。 默认头像、空白简介,以及末尾带着一长串数字的用户名。
- 数字。 关注了几千个账号,回关的只有几十个,而且一个注册不久的账号却发了几千条帖子。
- 关于此账号。 打开资料页上的菜单:X 会显示它判定的账号所在国家、用户名改过几次,以及 Premium 从何时开始。简介写着 Miami,而 X 把账号判定在别处,就值得再看一眼。
- 帖子。 只有转发,在许多串里回复同一句话,或者全天候不间断地发帖。
- 标签。 主动声明身份的机器人,会在名称和用户名下带有 X 的自动化账号标签(在新标签页打开)。蓝标说明不了什么:它只表示这是付费的 Premium 账号,不代表背后是真人。
#什么算 X 上的机器人或虚假粉丝
机器人是至少部分由软件运行的账号;虚假粉丝是为了抬高别人的粉丝数而存在的账号。两者有重叠,但检查方式不同:机器人暴露在发了什么上,虚假粉丝暴露在资料有多空上。
| 类型 | 是什么 | 表现 |
|---|---|---|
| 自动化账号 | 按计划发帖的软件:提醒、资讯源、天气 | 发帖时间规律,话题单一,常带 X 的“Automated”标签 |
| 垃圾机器人 | 大量推送链接、诈骗或回复的自动化账号 | 到处都是同一句回复,只转发,资料几乎空白 |
| 虚假粉丝 | 为抬高粉丝数而购买或批量养出来的账号 | 刚注册,没有帖子、没有点赞、没有头像,成批注册 |
| 不活跃粉丝 | 停止发帖或只看不发的真人 | 命中一两项标记,注册时间较早 |
| 协同账号 | 人或脚本运营大量账号来伪造声势 | 话术雷同,注册时间相近,所在地对不上 |
自动化账号
- 是什么
- 按计划发帖的软件:提醒、资讯源、天气
- 表现
- 发帖时间规律,话题单一,常带 X 的“Automated”标签
垃圾机器人
- 是什么
- 大量推送链接、诈骗或回复的自动化账号
- 表现
- 到处都是同一句回复,只转发,资料几乎空白
虚假粉丝
- 是什么
- 为抬高粉丝数而购买或批量养出来的账号
- 表现
- 刚注册,没有帖子、没有点赞、没有头像,成批注册
不活跃粉丝
- 是什么
- 停止发帖或只看不发的真人
- 表现
- 命中一两项标记,注册时间较早
协同账号
- 是什么
- 人或脚本运营大量账号来伪造声势
- 表现
- 话术雷同,注册时间相近,所在地对不上
X 的真实性政策(在新标签页打开)禁止付费换取关注、点赞或浏览量,也禁止反复关注再取关。不活跃粉丝不违反任何规则,所以一份好的审计会把他们和虚假粉丝分开。
#暴露机器人的信号
来自三处公开位置的十个信号,能把大多数机器人和真人区分开:资料、X 的“关于此账号”面板,以及账号最新的帖子。每个信号都只有和其他信号放在一起才有意义,下表也列出了还有谁会命中它。
| 信号 | 在哪里看 | 什么情况下值得留意 | 还有谁会命中 |
|---|---|---|---|
| 资料完整度 | 资料 | 三项中占两项:默认头像、空白简介、用户名末尾有六位及以上数字 | 从没设置过资料的普通人 |
| 关注数与粉丝数 | 资料 | 关注 1,000 个以上,回关的不到 1/20 | 新账号、只看新闻的读者 |
| 账号年龄与受众 | 资料 | 注册不满六个月,粉丝却有 1 万以上 | 突然爆红的人 |
| 发帖节奏 | 资料 | 注册以来平均每天发 50 条以上 | 新闻编辑部、现场直播的人 |
| 所在地 | 关于此账号 | X 判定的国家与简介里的所在地或 App Store 地区不同 | 出差的人、VPN 用户、外派人员 |
| 用户名变更 | 关于此账号 | 改过三次及以上,或粉丝 1 万以上的账号最近 90 天内改过一次 | 品牌改名 |
| Premium 开通时间 | 关于此账号 | 注册一周内就买了 Premium | 为了发长视频才注册的创作者 |
| 发帖时段 | 最新帖子 | 最活跃的七个小时,在账号声称所在的每个国家都是夜里 | 上夜班的人、定时发帖工具 |
| 内容构成 | 最新帖子 | 转发占 80% 以上,回复占 90% 以上,或自己发的帖子 90% 以上带链接 | 内容整理者、链接订阅号 |
| AI 标签 | 最新帖子 | 最新帖子里有一半或更多带“Made with AI”标签 | 公开标注 AI 作品的艺术家 |
资料完整度
- 在哪里看
- 资料
- 什么情况下值得留意
- 三项中占两项:默认头像、空白简介、用户名末尾有六位及以上数字
- 还有谁会命中
- 从没设置过资料的普通人
关注数与粉丝数
- 在哪里看
- 资料
- 什么情况下值得留意
- 关注 1,000 个以上,回关的不到 1/20
- 还有谁会命中
- 新账号、只看新闻的读者
账号年龄与受众
- 在哪里看
- 资料
- 什么情况下值得留意
- 注册不满六个月,粉丝却有 1 万以上
- 还有谁会命中
- 突然爆红的人
发帖节奏
- 在哪里看
- 资料
- 什么情况下值得留意
- 注册以来平均每天发 50 条以上
- 还有谁会命中
- 新闻编辑部、现场直播的人
所在地
- 在哪里看
- 关于此账号
- 什么情况下值得留意
- X 判定的国家与简介里的所在地或 App Store 地区不同
- 还有谁会命中
- 出差的人、VPN 用户、外派人员
用户名变更
- 在哪里看
- 关于此账号
- 什么情况下值得留意
- 改过三次及以上,或粉丝 1 万以上的账号最近 90 天内改过一次
- 还有谁会命中
- 品牌改名
Premium 开通时间
- 在哪里看
- 关于此账号
- 什么情况下值得留意
- 注册一周内就买了 Premium
- 还有谁会命中
- 为了发长视频才注册的创作者
发帖时段
- 在哪里看
- 最新帖子
- 什么情况下值得留意
- 最活跃的七个小时,在账号声称所在的每个国家都是夜里
- 还有谁会命中
- 上夜班的人、定时发帖工具
内容构成
- 在哪里看
- 最新帖子
- 什么情况下值得留意
- 转发占 80% 以上,回复占 90% 以上,或自己发的帖子 90% 以上带链接
- 还有谁会命中
- 内容整理者、链接订阅号
AI 标签
- 在哪里看
- 最新帖子
- 什么情况下值得留意
- 最新帖子里有一半或更多带“Made with AI”标签
- 还有谁会命中
- 公开标注 AI 作品的艺术家
三个“关于此账号”信号,是大多数指南都略过的部分。X 在每个公开资料页的“关于此账号”下都会显示它们:X 判定的账号所在国家、用户名改过几次,以及 Premium 从何时开始。这个国家代表什么、从哪里来,请看 X 上的“账号所在地”是什么意思。
数一数值得留意的信号:没有或只有一个算低,两三个算中,四个及以上算高。这和 Twitter 机器人检测工具显示的档位一致,所以按这张表写出的脚本,和免费工具对每个账号的结论都相同。
#如何找出任意账号的虚假粉丝
用每个粉丝自己的资料,按七项标记给他打分,再看看起来像虚假粉丝的占比:命中三项及以上,很可能是虚假粉丝;命中两项,通常是不活跃的真人;命中一项或没有,就是真实粉丝。七项标记全部来自 GET /followers 为每个粉丝返回的字段:
- 最近 30 天内注册,看
created_at。 - 关注 1,000 个以上,回关的不到 1/20,看
followings_count和followers_count。 - 没有帖子:
tweets_count为 0。 - 没有点赞:
favourites_count为 0。 - 默认头像:
profile_image_url指向 X 的默认图片。 - 简介为空:
description为空白。 - 名字加数字的用户名:
username末尾有六位及以上数字。
要盯的是“看起来像虚假粉丝”的占比,我们这样解读它:
| 看起来像虚假粉丝的占比 | 通常意味着什么 |
|---|---|
| 不到 10% | 活跃账号的正常水平:机器人会关注热门账号来伪装成真人 |
| 10% 到 30% | 值得细看;和同一领域、规模相近的账号对比 |
| 超过 30% | 买来的粉丝或一波机器人潮,尤其是很多粉丝在相同的几周内注册 X |
不到 10%
- 通常意味着什么
- 活跃账号的正常水平:机器人会关注热门账号来伪装成真人
10% 到 30%
- 通常意味着什么
- 值得细看;和同一领域、规模相近的账号对比
超过 30%
- 通常意味着什么
- 买来的粉丝或一波机器人潮,尤其是很多粉丝在相同的几周内注册 X
这些档位是我们对七项标记的解读,不是 X 发布的规则。注册日期能消除大部分疑虑:X 把粉丝按最新在前排列,而买来的粉丝是成批到达的,所以一次购买会在列表顶部表现为一群刚注册的新账号。
须知
不活跃不等于虚假。很多真人关注了账号之后从不发帖、点赞,也不填简介,所以会命中两项标记。要把他们单独计算:如果把他们和虚假粉丝混在一起,受众更老、更安静的账号就会被误报成两倍的风险。
#用 Python 审计每一个粉丝
粉丝审计会翻遍一个账号的整个粉丝列表,并按七项标记给每份资料打分。做这件事用 Sorsa API:GET /followers 每次请求返回 200 个粉丝,并带上标记需要的所有字段,每 1,000 个 $0.007 起,所以一个 5 万粉丝的账号 $0.35 起。从拿到密钥到出报告,一共五步。
-
拿到密钥。 注册后,在控制台里复制你的 API 密钥。前 100 次请求免费。
-
请求第一页。 把用户名发送给
GET /followers(在新标签页打开),并在ApiKey请求头里带上密钥。最新的粉丝排在最前面。Terminal curl -G "https://api.sorsa.io/v3/followers" \ -H "ApiKey: YOUR_API_KEY" \ --data-urlencode "username=gulfcoast_wire_news"Response200 OK { "users": [ { "id": "1981374420583055360", "username": "dana_k_2042719983", "display_name": "Dana K", "description": "Crypto | NFTs | DM for promo", "location": "", "created_at": "2026-10-24T03:12:51Z", "followers_count": 12, "followings_count": 2140, "tweets_count": 0, "favourites_count": 37, "media_count": 0, "profile_image_url": "https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png", "verified": false, "protected": false }, { "id": "1204958817730289664", "username": "harborlight_reads", "display_name": "Harborlight Reads", "description": "Coastal history, one book at a time.", "location": "Mobile, Alabama", "created_at": "2019-12-12T15:40:02Z", "followers_count": 3871, "followings_count": 512, "tweets_count": 9420, "favourites_count": 18233, "media_count": 611, "profile_image_url": "https://pbs.twimg.com/profile_images/1204961/h.jpg", "verified": false, "protected": false } ], "next_cursor": "1849212213712385091" } -
给每份资料打分。 数出每个粉丝命中的七项标记,把他归入“看起来像虚假粉丝”“看起来不活跃”或“看起来是真人”。
-
沿着游标翻页。 游标是每一页返回的书签:把
next_cursor作为参数发回去,直到返回的某一页不再带它,列表就读完了。 -
跑完整个审计。 下面的脚本对任意账号完成第 2 步到第 4 步,并输出三个占比、注册最集中的月份和五个示例。传入
max_pages=1,就只给最新的 200 个粉丝打分,和免费检测工具一样。import re import time from collections import Counter from datetime import datetime, timezone import requests API = "https://api.sorsa.io/v3" HEADERS = {"ApiKey": "YOUR_API_KEY"} NOW = datetime.now(timezone.utc) def flags(user): """The seven fake-follower flags of one profile.""" joined = datetime.fromisoformat(user["created_at"].replace("Z", "+00:00")) following = user["followings_count"] photo = user.get("profile_image_url") or "" found = [] if (NOW - joined).days < 30: found.append("joined in the last 30 days") if following >= 1000 and user["followers_count"] * 20 < following: found.append("follows 1,000+, few follow back") if user["tweets_count"] == 0: found.append("no posts") if user["favourites_count"] == 0: found.append("no likes") if not photo or "default_profile" in photo: found.append("default photo") if not (user.get("description") or "").strip(): found.append("empty bio") if re.search(r"\d{6,}$", user["username"]): found.append("name-and-digits handle") return found def audit(username, max_pages=None): """Score every follower of one account, 200 per request.""" params, pages = {"username": username}, 0 groups, months, examples = Counter(), Counter(), [] while True: r = requests.get(f"{API}/followers", headers=HEADERS, params=params) if r.status_code == 429: # over 20 requests in one second time.sleep(1) continue r.raise_for_status() page = r.json() for user in page["users"]: found = flags(user) n = len(found) group = "fake" if n >= 3 else "inactive" if n == 2 else "real" groups[group] += 1 months[user["created_at"][:7]] += 1 if group == "fake" and len(examples) < 5: examples.append((user["username"], found)) pages += 1 cursor = page.get("next_cursor") if not cursor or pages == max_pages: break params["next_cursor"] = cursor total = sum(groups.values()) for group in ("fake", "inactive", "real"): print(f"looks {group}: {groups[group]} ({groups[group] / total:.0%})") month, count = months.most_common(1)[0] print(f"busiest join month: {month}, {count / total:.0%} of followers") for handle, found in examples: print(f" @{handle}: {', '.join(found)}") audit("gulfcoast_wire_news")
返回 401 或 403,说明密钥缺失、有误或请求额度已用完;返回 429,说明 1 秒内发了超过 20 次请求,Python 脚本会等待 1 秒后重试。同一个账号的各页只能依次读取,因为每一页都要用到上一页的游标;多个账号则可以并行审计,每个密钥最高 20 次请求/秒。想把资料本身存成文件,请看如何导出 Twitter 粉丝到 CSV。
不写代码,直接给响应打分
把任意一页 GET /followers 的 JSON 粘贴到下面,可以来自上面的 curl 请求,也可以来自 API Playground,页面会在你的浏览器里按同样的七项标记给它打分。
一页最多包含 200 位粉丝。要给更多粉丝打分,请把多页粘贴为一个 JSON 数组: [page1, page2].
示例:@gulfcoast_wire_news 最新的 200 位粉丝
17% 疑似虚假
- 疑似虚假 34 17%
- 疑似不活跃 30 15%
- 看起来真实 136 68%
41 位在最近 30 天内加入 X。加入最集中的月份:2026 年 10 月,占这些粉丝的 21%。
被标记的示例
- @dana_k_2042719983 最近 30 天内加入, 关注 1,000+, 回关者少, 无帖子, 默认头像, 名字加数字的用户名
- @mira_lopez_88310274 最近 30 天内加入, 无帖子, 无点赞, 默认头像, 简介为空, 名字加数字的用户名
- @gainsdaily_alerts_x 最近 30 天内加入, 关注 1,000+, 回关者少, 无帖子, 简介为空
- @t_ward_4471902366 无帖子, 无点赞, 默认头像, 名字加数字的用户名
打分在你的浏览器中运行;粘贴的内容不会离开本页。
#每 100 个一批,审查一份账号名单
要筛查一份创作者、合作方或回复账号的名单,可以通过 GET /info-batch(在新标签页打开) 每次读取 100 份资料,再从 GET /about(在新标签页打开) 补上每个账号的“关于此账号”数据。下面的脚本会算出十个信号中的六个,并把 X 判定的国家和简介里的所在地并排输出,方便快速浏览。
“关于此账号”这部分,正是官方 X API 的短板:它的用户对象有自由填写的所在地,但没有国家、没有用户名历史,也没有 Premium 开通日期,其数据字典(在新标签页打开)里写得很清楚。Sorsa API 的 GET /about 则返回 country、username_change_count、last_username_change_at、premium_start_at,以及 source 里的 App Store 地区。
from datetime import datetime, timezone
import requests
API = "https://api.sorsa.io/v3"
HEADERS = {"ApiKey": "YOUR_API_KEY"}
NOW = datetime.now(timezone.utc)
def when(stamp):
return datetime.fromisoformat(stamp.replace("Z", "+00:00"))
def profiles(handles):
"""Profiles of up to 100 accounts per request."""
for i in range(0, len(handles), 100):
r = requests.get(f"{API}/info-batch", headers=HEADERS,
params={"usernames": handles[i:i + 100]})
r.raise_for_status()
yield from r.json()["users"]
def about(handle):
"""X's About this account data: country, renames, Premium."""
r = requests.get(f"{API}/about", headers=HEADERS,
params={"username": handle})
r.raise_for_status()
return r.json()
def signals(p, a):
age = max((NOW - when(p["created_at"])).days, 1)
fans, follows = p["followers_count"], p["followings_count"]
photo = p.get("profile_image_url") or ""
setup = [not photo or "default_profile" in photo,
not (p.get("description") or "").strip(),
p["username"][-6:].isdigit()]
renamed = a.get("last_username_change_at")
premium = a.get("premium_start_at")
return {
"profile setup": sum(setup) >= 2,
"follow ratio": follows >= 1000 and fans * 20 < follows,
"young, big audience": age < 183 and fans >= 10000,
"50+ posts a day": p["tweets_count"] / age >= 50,
"username changes": (a.get("username_change_count") or 0) >= 3
or (bool(renamed) and (NOW - when(renamed)).days < 90
and fans >= 10000),
"Premium in week one": bool(premium)
and (when(premium) - when(p["created_at"])).days < 7,
}
for p in profiles(["gulfcoast_wire_news", "harborlight_reads"]):
a = about(p["username"])
hits = [name for name, hit in signals(p, a).items() if hit]
print(f"@{p['username']}: {len(hits)} of 6 {hits}")
print(f" X places it in {a.get('country')}; bio: {p.get('location')}")
每个账号的 About 请求彼此独立,所以整份名单可以并行运行:以 20 次请求/秒计,1,000 个账号用不到一分钟。另外三个信号,发帖时段、内容构成和 AI 标签,来自 POST /user-tweets(在新标签页打开),它会返回最新的 20 条帖子,带 created_at、回复、转发、链接和 made_with_ai 标签。只对已经得分两项以上的账号运行它,深度检查的成本就能保持在很低的水平。
#机器人审计要花多少钱
通过 Sorsa API 检查粉丝,每 1,000 个 $0.007 起;官方 X API 则是每 1,000 个 $10.00,因为它按 $0.010 的用户读取,对返回的每个粉丝计费,见其按量付费价目表(在新标签页打开)。一个 5 万粉丝的账号,用 Sorsa API 是 $0.35,用官方 API 是 $500。
官方 X API
$1,000
10 万 个粉丝
每个粉丝 $0.010
Sorsa API
$0.70 起
10 万 个粉丝
每 1,000 个 $0.007 起
便宜 1,000 倍
审查一份账号名单的计价方式相同。1,000 个账号的资料和 About 信号,在 Sorsa API 上 $1.41 起;再加上每个账号最新的 20 条帖子用于行为信号,则是 $2.81 起。同样的 1,000 份资料各带 20 条帖子,官方 X API 要收 $110.00,而且它的用户对象完全不含 About 数据。
为机器人检测选数据源时,决定因素有五个,Sorsa API 的数字如下:
- 每 1,000 条价格: 粉丝 $0.007 起,用户资料 $0.014 起,失败的请求从不收费。
- 字段: 每个粉丝的完整公开资料,外加官方 X API 不提供的 X“关于此账号”数据。
- 速度: 所有套餐一律 20 次请求/秒,免费账号也一样。
- 接入: 请求头里放一个 API 密钥即可,不需要 X 开发者账号,不需要 OAuth,也不需要审批。
- 你自己的账号: 完全不涉及。Sorsa API 不要求 X 登录或 Cookie,所以检查几千个账号,也不会让你的任何东西面临风险。
#为什么老牌免费机器人检测工具不再好用
大多数指南仍在推荐的检测工具,依赖的是 Twitter 的免费 API,2023 年 API 关闭后,它们就失去了数据。Botometer 由印第安纳大学社交媒体观测站开发,现在以存档模式运行 Botometer X:其自述说明(在新标签页打开)写明,分数来自 2023 年 5 月 31 日之前收集的数据,此后创建的账号没有任何记录,而且这个模型早于生成式 AI,识别不了由 AI 驱动的机器人。
它最后仍在实时打分的 API 接口 Botometer v4 和 BotometerLite,已于 2026 年 11 月 2 日停止服务,依据是 Botometer Pro 的 API 页面(在新标签页打开)上的通知;只剩存档接口还在。SparkToro 的免费虚假粉丝审计工具也没了:它的地址现在会跳转到 SparkToro 的首页。
留下来的是这些工具所用的方法:把公开信号放在一起数。只要有东西能大规模读取资料,这个方法就能在实时数据上运行,而这正是 API 提供的部分。本指南里的检查,对昨天刚创建的账号也能运行,这是任何存档都打不了分的。
#基于信号的检测做不到什么
信号能找出粗心的机器人和大部分买来的粉丝,但证明不了谁在运营一个账号、出于什么目的。实际使用中有四个局限:
- 做得好的假账号能过关。 一个注册已久、头像真实、发帖节奏稳定、回复由 AI 撰写的账号,可能一项都不命中。协同网络更多是在账号之间暴露出来(相同的注册周、相同的话术),而不是在单个账号内部。
- 真人也会命中标记。 新闻编辑部一天发 80 条,外派人员的简介里写着老家,潜水的人从不发帖。上表的每个信号,都列出了还有谁会命中它。
- 私密列表依然私密。 受保护账号的粉丝,任何人都读不到,Sorsa API 也只返回公开数据。
- 很久以前的购买会沉底。 最新的 200 个粉丝能显示近期的一批;两年前的购买则深埋在列表里,所以历史重要时,要审计整个列表。
信号,不是裁决
把高分当作值得去看的理由,而不是证据。在移除、拉黑或举报任何账号之前,先打开几个被标记的账号看看,也不要让脚本仅凭分数就代你操作。如果是 X 一直把你自己的账号当成机器人,那是另一个问题:请看当 X 提示请求看起来是自动化的时该怎么办。
#运行你的第一次粉丝审计
从你最不信任的那个账号开始,在它上面运行脚本:Sorsa API 每次请求读取它的 200 个粉丝,每 1,000 个 $0.007 起,七项标记需要的每个字段都有。你的 100 次免费请求能覆盖最初的 2 万个粉丝;只查单个账号的话,Twitter 机器人检测工具不用写代码就能给出答案。粉丝相关接口返回的其他内容,请看 Twitter 粉丝 API 指南。
#常见问题
Twitter 机器人检测该用哪个 API?
用 Sorsa API。GET /followers 每次请求返回 200 个粉丝及其完整资料,每 1,000 个 $0.007 起,官方 X API 则是 $10.00;GET /about 还会补上 X 的“关于此账号”数据,这是官方 X API 不返回的。它只需要一个 API 密钥,不需要开发者账号,所有套餐都是 20 次请求/秒,也从不碰你的 X 登录。
在 X 上,虚假粉丝占多少算正常?
活跃账号最新的粉丝里,看起来像虚假的占不到 10% 是常见情况,因为机器人会关注热门账号来伪装成真人。占 10% 到 30%,值得和类似账号对比细看。超过 30%,同时有很多粉丝在相同的几周内注册 X,就指向买来的粉丝或一波机器人潮。这个判断来自七项标记;X 并没有发布官方基准。
为什么我没买过,却有机器人粉丝?
机器人关注真人账号,是为了伪装成真人、骗取回关,或把你引向骗局,所以几乎每个账号都会收到一些。少量不会造成任何影响。想去掉某一个,先拉黑再解除拉黑:它会从你的粉丝里消失,而拉黑不会保留。真正要担心的,是列表顶部突然出现一批刚注册的新账号。
怎么判断一条帖子的互动是不是刷出来的?
要给互动背后的账号打分,而不是看数字。Sorsa API 的 POST /retweeters(在新标签页打开) 会返回转发某条帖子的账号及其完整资料,POST /comments 则返回回复及其作者,所以七项标记可以像用在粉丝上一样用在他们身上。其中出现一群刚注册的空账号,就说明互动是买来的。Sorsa API 不返回谁点赞了某条帖子。
有没有免费的方法检测 X 上的机器人?
有。Twitter 机器人检测工具会读取任意公开账号的十个信号,并给它最新的 200 个粉丝打分,免费,无需注册。账号更多或要查全部粉丝时,Sorsa API 先送你 100 次免费请求:无需绑卡,永不过期,用本指南里的脚本最多能给 2 万个粉丝打分。
不用官方 X API 也能检测机器人吗?
可以。这里的每个信号都是公开的资料数据,而 Sorsa API 只要请求头里放一个密钥就能返回:不需要 X 开发者账号,不需要 OAuth,也不需要审批。官方 X API 三样都要,它每返回一个用户收费 $0.010,并把按量付费限制在每月 300 万次帖子读取。
#我们如何核实
2026 年 11 月 2 日,我们把本指南里的每个接口、字段和每页条数,与 Sorsa API 的在线参考文档逐一核对,并对照 docs.x.com 核对了官方 X API 的价格和用户字段。我们读了 Botometer 的说明及其 API 页面、X 帮助中心关于自动化标签和真实性的页面,并顺着 SparkToro 旧审计工具的地址,看了它现在跳转到哪里。七项标记、十个信号及其阈值,与免费的 Twitter 机器人检测工具所用的完全一致;示例里的账号都是虚构的。
来源
- Sorsa API reference: Followers(在新标签页打开)
- Sorsa API reference: Account About Info(在新标签页打开)
- X API pricing (docs.x.com)(在新标签页打开)
- X API data dictionary: user fields (docs.x.com)(在新标签页打开)
- About automated account labels (X Help Center)(在新标签页打开)
- Authenticity policy (X Help Center)(在新标签页打开)
- About Botometer (OSoMe, Indiana University)(在新标签页打开)
- Botometer Pro: deprecation and sunset notice(在新标签页打开)