作者:Sorsa 编辑部

2026 年 7 月更新:新增了新 API 密钥可用的 100 次免费请求入门优惠,并对照当前 Sorsa 费率卡刷新了定价与速率限制引用。

要点: 要查询一个 Twitter (X) 账号是否关注另一个账号,打开疑似关注者的资料页,在其关注(Following)列表里搜索另一个用户名。X 没有直接的“A 是否关注 B”按钮,且关注是单向的。这项查询是只读的,所以不会有人被通知。批量查询需要工具或 API。

烦人的地方在于,X 从未做过干净的方式来问“这个账号是否关注了那个账号?”没有对应的按钮。你要么滚动一个粉丝或关注列表、指望某个用户名冒出来。要么依赖那个小小的“关注了你”(Follows you)徽章,它只在某人关注了你当前登录账号时才出现。查一次这样还行。可一旦你需要批量核验关注,比如为了一个活动核验流程、一次合作审计,或你自己 App 里的一项功能,手动路线就崩了。

那个缺口正是我们打造 Sorsa API 的原因,一个替代性的 Twitter/X API 提供方。/check-follow 接口为任意两个公开资料在单次请求里回答“账号 B 是否关注账号 A?”,以大约 300 毫秒返回朴素的 truefalse,无需 OAuth 折腾、也无需以任一用户身份认证。每个套餐都跑在固定的每秒 20 次请求上,即时开通、没有审批队列,一次关注查询是一次请求、而非一堆逐用户读取。新密钥自带 100 次免费请求,一次性、无需绑卡,所以核验第一批关注试起来毫无成本。对一次性查找你甚至不需要 API:我们免费的 Twitter 关注查询器在浏览器里就返回答案。本指南覆盖每一种方法,从手动逐点操作到一个每小时核验数千段关系的 Python 循环。

目录

在 X 上手动查询关注 {#check-follows-manually-on-x}

要手动查一段关注关系,打开你认为正在关注的那个账号的资料页,点击关注(Following),用列表内搜索查找另一个账号的用户名。如果出现,关注就存在。要确认某人具体是否关注了你,打开你自己的粉丝(Followers)列表在那里搜索,或在你访问其资料页时看其名字下方的“关注了你”(Follows you)徽章。

原生方式不需要工具、不需要密钥、不需要第三方访问,而且只要你操作仔细,双向都能用。

要查询某个特定账号是否关注了你:

  1. 在 X(x.com 或手机 App)上打开你自己的资料页。
  2. 点击 粉丝(Followers)
  3. 在列表顶部的搜索框里输入用户名。
  4. 如果他们出现,就是关注了你。如果搜索返回为空,就是没有。

要查询账号 A 是否关注账号 B(当两者都不是你):

  1. 打开账号 A 的资料页,即你怀疑正在关注的那个。
  2. 点击 关注(Following)
  3. 在那个列表里搜索账号 B 的用户名。

有两个值得知道的视觉捷径。当你访问关注了你的资料页时,X 在用户名旁显示一个“关注了你”(Follows you)徽章。当你打开一个你已关注的若干账号也关注的资料页时,X 在简介下方浮现一行“被……关注”(Followed by ...)。两者都是快速信号,但都无法回答两个你毫无关系的账号之间任意的“A 是否关注 B”问题。

手动方式有一个我们不断撞上的真实局限:列表内搜索只查询你浏览器已经加载的那一段列表。X 分块拉取粉丝和关注列表,所以对有数十万关注的账号,搜索可能漏掉只是尚未加载的用户名。对小账号可靠。对大账号,一个否定结果不是“未关注”的证据。那就是你停止点击、切到工具或 API 的时候。

免费的 Twitter 关注查询工具还能用吗? {#do-free-twitter-follow-checker-tools-still-work}

有些免费的 Twitter 关注查询工具还能用,但许多单一用途的在 X 于 2023 年限制非官方数据访问后就坏了。以真实数据源为后盾的浏览器查询器仍能返回快速的是或否。依赖爬虫或开放 API 访问的老工具则往往悄然失败、抛错、或什么都不返回。可靠性时好时坏,所以幸存的选项是一个跑在自有数据管线上的查询器。

如果你搜索 "twitter follow checker",你会撞上一堆免费网页工具、承诺给“A 是否关注 B?”单字段答案。最知名的单一用途工具 HackTrix 多年稳居排名前列,但这一类整体上参差不齐。那些依赖免费 Twitter API 访问的简单查询器,在那种访问被切、付费层级取而代之时失去了数据源。

你会看到的更大的名字,如 Circleboom 和 Audiense Connect,是完整的管理与分析平台、而非关注查询器。这类平台能显示粉丝关系,但要求你登录并授权一个账号;当你只想要单一布尔答案时,注册一整套社交媒体套件是杀鸡用牛刀。

为了不会坏的快速查询,我们在站点上保留一个免费的浏览器关注查询器。这个查询器跑在我们自己的基础设施上、而非直接爬 X,所以不消耗你账号的速率限制、也不触发自动化标记,而且不需要登录。输入两个用户名,读结果。当你需要重复得到那个答案、或在软件内部得到它时,下面的 API 方法是更进一步的选择。

用 API 查询关注关系 {#check-follow-relationships-with-an-api}

官方 X API 没有针对“某个任意账号是否关注另一个”的简单调用。其 v2 connection_status 字段返回关注中和被关注状态,但只针对你认证的那个账号、且只在更高的付费访问层级上。要查任何其他一对,你得翻遍一侧完整的粉丝或关注列表并搜索它,这对大账号又慢又贵。一个专门打造的核验接口在一次请求里直接回答这个问题。

你可以在官方 X API 关注文档里确认这个局限:关系查找被限定在认证用户,而在官方 API 上,关注和关注中接口位于付费层级之后。所以一旦你想在你不掌控任一账号时知道 @alice 是否关注 @bob,官方 API 就把你推向以逐用户读取成本枚举一整份列表。

Sorsa API 用单个接口合上那个缺口。发送两个标识符,拿回 truefalse,适用于任意两个公开账号,用请求头里一个 API 密钥认证、而非一套 OAuth 流程。

快速查询(cURL)

bash
curl -X POST https://api.sorsa.io/v3/check-follow \
  -H "ApiKey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "username_1": "TargetAccount",
    "username_2": "PossibleFollower"
  }'

响应:

json
{
  "follow": true,
  "user_protected": false
}

这个逻辑读作“username_2 是否关注 username_1?”当 followtrue 时,第二个账号关注第一个。user_protected 字段标记一个私密账号,其关注数据无法被已批准粉丝列表之外的任何人读取。

Python

python
import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.sorsa.io/v3"

def check_follow(target: str, possible_follower: str) -> bool:
    """查询 possible_follower 是否关注 target。返回 True 或 False。"""
    resp = requests.post(
        f"{BASE_URL}/check-follow",
        headers={"ApiKey": API_KEY, "Content-Type": "application/json"},
        json={
            "username_1": target,
            "username_2": possible_follower,
        },
    )
    resp.raise_for_status()
    return resp.json().get("follow", False)

follows = check_follow("YourBrand", "some_user")
print(f"Follows: {follows}")

你可以传一个用户名、一个数字用户 ID,或一个完整资料 URL,看你的数据里已有哪种。完整参数细节见接口参考

在成本上,差异是结构性的、而非边际的。Sorsa 使用按请求计费的定价:一次关注查询是一次请求,在 Pro 套餐($199 换 10 万次请求)上折合约 $0.00199,在 Enterprise 上约 $0.0018。在官方 API 上,对着一个大账号核验一段关注意味着按大约每次用户读取 $0.010 翻其粉丝列表,所以在你找到那个用户名之前(如果你找得到的话),一个答案就可能花掉数美元的读取。一次请求对一个布尔值,是差距悬殊的更便宜单位。

如何查询两个账号是否互相关注 {#how-to-check-if-two-accounts-follow-each-other}

没有 API 或工具在单次调用里返回互关状态,因为一次“互相关注”是两段独立的单向关注。要确认两个账号互相关注,你跑两次查询:A 是否关注 B,以及 B 是否关注 A。如果两者都返回 true,这段关系就是互相的。

python
def check_mutual_follow(user_a: str, user_b: str) -> dict:
    """查询两个账号是否互相关注。"""
    a_follows_b = check_follow(target=user_b, possible_follower=user_a)
    b_follows_a = check_follow(target=user_a, possible_follower=user_b)

    if a_follows_b and b_follows_a:
        relationship = "mutual"
    elif a_follows_b:
        relationship = "one_way_a_to_b"
    elif b_follows_a:
        relationship = "one_way_b_to_a"
    else:
        relationship = "none"

    return {
        "a_follows_b": a_follows_b,
        "b_follows_a": b_follows_a,
        "relationship": relationship,
    }

result = check_mutual_follow("user_one", "user_two")
print(result)
# {'a_follows_b': True, 'b_follows_a': False, 'relationship': 'one_way_a_to_b'}

两次调用、从你配额里两次请求,端到端不到一秒。同样的模式通过循环第二个用户名,可扩展到查询一个列表里哪些账号与某个给定账号互相关注。

大规模查询关注 {#checking-follows-at-scale}

在大规模下,手动方式和坏掉的免费工具都不再是选项,而 API 成了唯一可行的路。要跨数百或数千个账号核验关注,为每个账号循环一次关注查询调用、把结果写进一个文件。在固定每秒 20 次请求下,那每小时清掉大约 7.2 万次查询,每个结果都是你可据以行动的干净布尔值。

这是批量模式:

python
import time
import csv

def verify_followers_batch(brand: str, usernames: list, output_file: str = "results.csv"):
    """核验一个账号列表是否关注某个特定账号。"""
    with open(output_file, "w", newline="") as f:
        writer = csv.writer(f)
        writer.writerow(["username", "follows"])

        for i, username in enumerate(usernames):
            follows = check_follow(brand, username)
            writer.writerow([username, follows])

            if (i + 1) % 100 == 0:
                print(f"Checked {i + 1}/{len(usernames)}")

            time.sleep(0.05)  # 保持在每秒 20 次请求的速率限制内

    print(f"Done. Results saved to {output_file}")

participants = ["user1", "user2", "user3"]  # 从你的参与者列表加载
verify_followers_batch("YourBrand", participants)

每秒 20 次请求的速率限制在每个套餐上都相同,对高流量工作可通过联系销售提高。以多于一个动作为门槛的活动可以把关注查询与其他核验接口混用:/check-follow/check-retweet/check-comment/check-quoted/check-community-member,每个都是一次单布尔调用。完整的活动核验指南覆盖把这些串起来。

实战中。 我们合作过的一家 Web3 游戏工作室跑了一场代币发行抽奖活动,要求参与者关注主账号、转发公告,并加入它的 X 社区。他们有大约 8,400 份参与。在自动化之前,一位社区经理手动抽查了两天参与、却仍只过完其中一小部分,未查的余下部分恰恰是马甲和机器人账号藏身之处,其中许多在截完图那一刻就取关了。把三项查询接进一个脚本后,他们在不到一个小时里跨三项任务核验了全部 8,400 名参与者、在 Pro 套餐上约花 $50,每一份参与都是以编程方式确认、而非抽样。那就是按请求计费带来的差别:成本随查询数扩展、而非随任何账号粉丝列表的大小。

你该用哪种方法? {#which-method-should-you-use}

方法最适合速度成本可靠性
在 X 上手动一次性个人查询30 到 60 秒免费对大账号不可靠
免费关注查询工具快速一次性查询、免搭建数秒免费取决于工具的数据源
API(/check-follow自动化、批量或产品内使用每次查询约 300 毫秒每次查询 $0.0018 到 $0.0049一致、结构化 JSON

如果你只想知道一个朋友是否回关了你,打开 X 找“关注了你”徽章。对一次无需任何搭建的快速一次性查询,免费关注查询器就够了。对任何以编程方式进行的场景(一个活动、一个机器人、一块看板、一项分析功能),API 是唯一在流量增长时仍保持准确与快速的方法。

常见问题 {#faq}

能在对方不知情下查询他们是否关注你吗?

能。在 X 上查看粉丝或关注列表是一个被动的、只读的动作,另一个账号从不会被通知。无论你在 X 上手动查、通过一个第三方关注查询器查,还是经由一个 API 查,这都成立。读取一段公开关注关系不触发任何提醒、任何私信、也在对方账号上不留痕迹。

官方 X API 有关注查询接口吗?

没有一个直接的。X API v2 暴露一个 connection_status 字段,但只报告你认证的那个账号的关系、且只在更高付费层级。要查任何其他一对,你必须翻一整份粉丝或关注列表。Sorsa API 的 /check-follow 接口则在单次请求里为任意两个公开账号返回 truefalse

如何查询两个 Twitter 账号是否互相关注?

跑两次独立查询。一次“互相关注”是两段单向关注,所以你确认账号 A 关注账号 B、且账号 B 关注账号 A;如果两者都为真,就是互相的。没有工具或 API 在一次调用里返回互关状态。用像 Sorsa 的 /check-follow 这样的 API,这是两次请求、每个方向一次。

能查询一个私密(受保护)账号的粉丝吗?

不能。一个受保护账号对除已批准粉丝以外的所有人隐藏其粉丝和关注列表,所以没有外部工具或 API(包括官方 X API)能读取其关注关系。当你通过 Sorsa API 查询一个私密账号时,响应返回 "user_protected": true,这样你的代码可以干净地处理那种情况、而非靠猜。

有免费工具查询一个 Twitter 账号是否关注另一个吗?

有。Sorsa 跑一个不需要登录的免费关注查询器:输入两个用户名、读出第一个是否关注第二个。这个查询器跑在 Sorsa 自己的数据基础设施上、而非爬 X,所以绕开了那些拖垮老式单一用途查询站点的速率限制和自动化标记。

如何随时间追踪新粉丝或取关者?

X 除了基础的“关注了你”通知外,不给原生的取关提醒。要追踪变化,按计划拉取粉丝列表、把每份快照与上一份做差分,浮现出新关注和取关。Sorsa API 的 /followers 接口每次请求返回最多 200 个账号,这让每小时或每天做差分即便对大账号也切实可行。

开始上手 {#getting-started}

如果你需要在偶尔的手动查询之外核验关注关系,最快的路很短:

  1. 先试免费工具。关注查询工具里跑几次查询,无需密钥、无需登录。
  2. 拿一个 API 密钥,从控制台开始并用上 100 次免费请求:一次性、无需绑卡、永不过期、跨全部 40 个接口有效。在 API playground 里测试 /check-follow、无需写代码。
  3. 把它接进你的工作流。 复制上面的 Python 或 cURL,或跟着快速上手在其他语言里完成搭建。

每个套餐固定每秒 20 次请求、一次关注查询按套餐从大约 $0.0018 到 $0.0049,以及一套约三分钟、没有审批队列的搭建。一次请求、一个答案、不到 300 毫秒。


审校:Keksich(Sorsa 创始人,X API 研究者)

本指南是如何汇成的:它取材于我们打造并运营 Sorsa API 的自身工作、以及支撑这些示例的实时接口。我们为这次更新直接重走了 X 上的手动关注查询,并对照 X 的开发者平台关注文档核验了官方 X API 的关注关系局限。接口名、参数和定价来自 Sorsa API 文档和我们当前的费率卡;关于我们搭建的问题请见关于页contacts@sorsa.io。最后核验于 2026 年 7 月 6 日。