问答

不用官方 API,怎么查推特账号的粉丝数?

简短回答

把用户名传给 X 账号信息接口,就能拿到粉丝数、关注数、发帖总数、简介、认证状态和头像,每个账号 $0.001,不需要 X 开发者账号。给 300 个账号按粉丝排序要 $0.30,一个季度里每周刷新一次共 $3.90。

手上有一张表,300 个可能合作的 X 博主账号,周一开会前要按粉丝数排好。X 账号信息传入用户名,带不带 @ 都行,把主页上的数字整理成字段返回。Stack Overflow 上的老回答会教你不用 token 的办法,比如直接读主页或者小组件链接。X 收紧未登录访问之后,这些办法大多已经失效,别指望它们。

能拿到的字段

字段 含义
followers 粉丝数
following 关注数
posts 发帖总数,含回复和转发
likes 点赞过的帖子数,有的话返回
verified 蓝标或旧版认证
bio、name、avatar_url、url 主页基本信息

加上 view=full,还会返回 ext.created_at(注册时间)、ext.location、ext.media_count 和 ext.verified_type。

从用户名 CSV 到排好序的名单

import csv, os, requests

API = "https://api.okdata.online/v1"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

rows = []
for handle in [r[0] for r in csv.reader(open("handles.csv")) if r]:
    body = requests.get(f"{API}/x/users/get", headers=H,
                        params={"username": handle, "view": "full"}, timeout=60).json()
    if body["code"] != "ok":
        rows.append([handle, body["code"]])  # not_found:改名、被封或不存在
        continue
    u = body["data"]["item"]
    rows.append([u["username"], u["followers"], u["following"], u["posts"], u["verified"], u["ext"]["created_at"]])

found = sorted((r for r in rows if len(r) > 2), key=lambda r: r[1] or 0, reverse=True)
with open("ranked.csv", "w", newline="", encoding="utf-8") as f:
    csv.writer(f).writerows(found + [r for r in rows if len(r) == 2])

费用

任务 调用次数 费用
一个账号 1 $0.001
300 个账号 300 $0.30
300 个账号,每周一次,13 周 3,900 $3.90

不存在的用户名返回 not_found,不扣费。

需要知道的几点

  • 粉丝数是某一时刻的快照。想看增长,每次跑完连同日期一起存下来,X 不提供粉丝数的历史记录。
  • 用户名会变。博主改名后旧用户名会返回 not_found,所以第一次查到时就把账号 id 存下来,当作不变的主键。
  • 接口目录里只有总数,没有粉丝列表,查不到具体谁关注了谁。
  • 被封禁的账号同样返回 not_found,筛选合作博主时这本身也是个有用的信号。

其他办法

X 官方 API 的用户公开指标里也有这些数,按量付费下每读一个用户 0.010 美元。已经有开发者账号,或者需要粉丝列表,就用官方的。只看几个账号的话,手动打开主页看一眼就行,不花钱。跨平台筛选博主的完整做法见博主发现方案。

更新于