跳到正文

Twitter List API:获取成员和推文

Twitter List API 通过数字 ID 读取公开的 X List,返回它的成员、关注者,以及成员最新帖子汇成的一条动态;官方 X API 每个成员收费 $0.010,每条帖子收费 $0.005。

  • 更新于
  • 发布于
  • 阅读约 9 分钟

简短回答: ID 就是 List 网址末尾的那串数字,一个 List 最多容纳 5,000 个账号。X 自己的接口每页返回 100 个,还需要开发者账号。想用一个密钥读取 List,请用 Sorsa API:GET /list-members 每次请求返回 200 个成员,每 1,000 个 $0.007 起,100 次免费请求可以覆盖 2 万个成员。

接口
GET /list-members
每页数量
每次请求 200 个成员
价格
每 1,000 个 $0.007 起

#Twitter List API 能读取什么

X List 是一组有名字的账号,最多 5,000 个,自带一条时间线,API 可以读取公开 List 的三个部分。每个部分对应各自的接口:

  • 成员: List 的创建者添加的账号。大家导出到表格和 CRM 里的,就是这组精选名单。
  • 关注者: 为了阅读 List 时间线而关注这个 List 的人,X 也叫订阅者。他们不是成员自己的粉丝;想看某个账号的粉丝,请见推特粉丝 API指南。
  • 动态: List 的时间线,把所有成员的最新帖子汇在一处。

List ID 是 List 地址里的那一长串数字:x.com/i/lists/1234567890123456789。每个 List 请求都从它开始。

x.com/i/lists/ 1234567890123456789 列表 ID:每个列表请求都从它开始 成员 所有者添加的账号 GET /list-members list_id 每次请求最多 200 个成员 粉丝 关注该列表的人 GET /list-followers list_link URL 或 ID,每次请求最多 200 个 信息流 所有成员的最新推文 GET /list-tweets list_id 每次请求约 20 条推文
一个 List ID 就能打开 List 的三个部分。只有 /list-followers 还接受完整网址。

X 帮助中心(在新标签页打开)的几条规则决定了你能读到什么。List 默认公开,任何人都能关注公开的 List。私密 List 只有创建它的账号能看到,所以没有 API 能读取。名称最长 25 个字符。除了拉黑创建者,没有人能退出别人的 List。

有两样东西没有任何 List 接口会返回:账号是什么时候加入的,以及谁离开了。要跟踪变化,就定期导出成员,再按 id 比较前后两份文件。创建者只需在 X 应用里一次选好账号,而你的代码只需要 ID,所以 List 也是做推特实时监测最简单的单位。

#把 List 的成员导出为 CSV

要导出 List,请用 Sorsa API,一款 Twitter(X)API 与爬虫:它的 GET /list-members(在新标签页打开) 每次请求最多返回 200 个成员,所以装满 5,000 个成员的 List 也只要 25 次请求。下面的步骤把每个成员写进同一个 CSV 文件。

  1. 复制 List ID。 在 x.com 上打开这个 List,从地址栏里取出 /lists/ 后面的数字。

  2. 获取密钥。 注册后,从控制台复制你的 API 密钥。无需绑卡,前 100 次请求免费。

  3. 请求第一页。 把 ID 作为 list_id 发送,并在 ApiKey 请求头里带上密钥。

    终端
    curl -G "https://api.sorsa.io/v3/list-members" \
      -H "ApiKey: YOUR_API_KEY" \
      --data-urlencode "list_id=1234567890123456789"
    
    响应200 OK
    {
      "users": [
        {
          "id": "1592041833471827968",
          "username": "dana_tracks_markets",
          "display_name": "Dana Tracks Markets",
          "description": "Rates, FX and the odd chart.",
          "location": "Chicago, IL",
          "followers_count": 48210,
          "followings_count": 612,
          "tweets_count": 15873,
          "verified": true,
          "protected": false,
          "created_at": "2014-03-09T16:22:41Z"
        }
      ],
      "next_cursor": "DAABCgABGc3yPLu__-0KAAIZsbqf"
    }
    
  4. 跟着 cursor 往下翻,并写入每一行。 每次请求都把 next_cursor 带回去,直到它返回为空,并在每页到达时就保存。

    import csv
    import requests
    
    URL = "https://api.sorsa.io/v3/list-members"
    HEADERS = {"ApiKey": "YOUR_API_KEY"}
    FIELDS = ["id", "username", "display_name",
              "followers_count", "verified", "created_at"]
    
    
    def export_members(list_id, path="list_members.csv"):
        params = {"list_id": list_id}
        with open(path, "w", newline="", encoding="utf-8") as f:
            out = csv.DictWriter(f, fieldnames=FIELDS,
                                 extrasaction="ignore")
            out.writeheader()
            while True:
                r = requests.get(URL, headers=HEADERS,
                                 params=params, timeout=30)
                r.raise_for_status()
                page = r.json()
                out.writerows(page.get("users", []))
                cursor = page.get("next_cursor")
                if not cursor:
                    break
                params["next_cursor"] = cursor
    
    
    export_members("1234567890123456789")
    

每一行都是一份完整的公开资料:id、用户名、简介、所在地、各项计数和创建时间,与用户资料接口返回的一致。请在文件里用 id 作为键,因为用户名可能改,ID 永远不变。返回 403 表示密钥缺失或请求额度已用完;返回 429 表示该密钥在一秒内超过 20 次请求,等一秒再发即可。

同样的循环也能通过 GET /list-followers(在新标签页打开) 导出 List 的关注者,每页同样最多 200 个。只要改一下路径,并且把 List 作为 list_link 而不是 list_id 发送。

须知

这两个参数不一样。/list-members 和 /list-tweets 用 list_id,只能是数字。/list-followers 用 list_link,整个 List 网址或数字都行。把完整地址粘进 list_id 是很容易犯的错,所以请先把它裁成纯数字。

#把 List 的推文当作一条动态来读取

GET /list-tweets(在新标签页打开) 返回 List 的时间线:所有成员的最新帖子,每次请求约 20 条,每条都带正文、日期、点赞、回复、转发和浏览量,以及作者资料。不论 List 里有 12 个账号还是 5,000 个,一次请求就覆盖所有账号。

这条动态没有“since”筛选条件,所以监测程序要从最上面开始读,遇到第一条已经存过的帖子就停下。Snowflake ID 是 X 给每条帖子的编号,随时间递增,所以你保存的最新 ID 就标出了上一次检查结束的位置。

列表信息流,最新在前 12:04 新的,存下来 12:03 新的,存下来 12:01 新的,存下来 在此停止 12:00 上次保存的 ID 11:57 已存储 11:52 已存储 保存最新 ID,12:04。五分钟后下一次检查再从顶部读起 读到 12:04 就停:新推文不足 20 条时,一次请求就够。
从最上面读起,保留新的,遇到第一条已有的帖子就停。

下面的循环每五分钟检查一次 List,每条新帖子只打印一次:

Python
import time
import requests

URL = "https://api.sorsa.io/v3/list-tweets"
HEADERS = {"ApiKey": "YOUR_API_KEY"}
LIST_ID = "1234567890123456789"


def new_posts(seen, max_pages=10):
    """Read the feed from the top until a post we already have."""
    fresh, params = [], {"list_id": LIST_ID}
    for _ in range(max_pages):
        r = requests.get(URL, headers=HEADERS,
                         params=params, timeout=30)
        r.raise_for_status()
        page = r.json()
        for tweet in page.get("tweets", []):
            if tweet["id"] in seen:
                return fresh
            fresh.append(tweet)
        cursor = page.get("next_cursor")
        if not cursor:
            break
        params["next_cursor"] = cursor
    return fresh


seen = set()
while True:
    for t in reversed(new_posts(seen)):
        seen.add(t["id"])
        print(t["created_at"], "@" + t["user"]["username"],
              t["full_text"][:80])
    time.sleep(300)  # check again in 5 minutes

在生产环境里,请把 seen 存进数据库,并且只保留最近几千个 ID。max_pages 上限让第一次运行(此时还没有存任何东西)最多只读 200 条帖子。

这条动态是为“有什么新内容”设计的。想看 List 更早的帖子,请改用搜索:把成员的用户名放进 from: 运算符,用 OR 连接,分批发送,再把查询连同日期范围发给 POST /search-tweets(在新标签页打开)。运算符的写法见推特搜索 API指南,归档可以回溯到 2006 年。

#为什么用一个 List 比逐个轮询账号更划算

不论里面有多少账号,读一次 List 动态每次检查只要一次请求;而逐个读取账号自己的时间线,每个账号每次检查都要一次请求。对 500 个账号、每 5 分钟检查一次来说,逐个读取每月需要 430 万次请求,用一个 List 读取只要 8,640 次,前提是两次检查之间新帖子不超过 20 条。

速度是第二个限制。按每秒 20 次请求,一个密钥每分钟能读 1,200 条时间线,所以 5,000 个账号扫一遍要四分钟多。List 动态用一次请求就能回答同样的问题,List 很活跃时也只需要几次。

列表中的账号数

检查间隔

每个账号每天的帖子数

每个账号一次请求

4.3M 次请求 / 月

每次检查
500 次请求,每秒 20 次需 25 秒
能满足的套餐
Scale, 5M / 月

列表信息流

8,640 次请求 / 月

每次检查
1 次请求,对应约 9 条新帖子
能满足的套餐
Starter, 10K / 月

同样 500 个账号,列表信息流所需的请求少 500 倍。

选择列表规模、检查频率和账号的发帖量。活跃的列表每次检查需要额外的页数;冷清的列表只需一页。

每次检查的页数只随新帖子的数量增长:上次检查之后每来约 20 条帖子,就多一次请求。List 盯的是你选定的账号发了什么。想抓住每一条提到某个品牌的帖子,不论是谁写的,请改用推特提及 API搜索这个品牌。

#List 数据每 1,000 条要多少钱

在 Sorsa API 上,List 成员和关注者每 1,000 个 $0.007 起,List 的帖子每 1,000 条 $0.07 起。官方 X API 在按量付费价目表(在新标签页打开)上,每 1,000 个成员或关注者收费 $10.00,每 1,000 条帖子收费 $5.00。

自 2026 年 11 月 22 日起,X 还会对随这些帖子一起返回的每份作者资料另外收费,每份 $0.010(见 X 在 10 月 23 日的通知(在新标签页打开))。在 Sorsa API 上,作者资料是每条帖子的一部分,不另外收费。

导出的成员数

官方 X API

$500

导出 5 万 个 List 成员的情况

每个成员 $0.010

Sorsa API

$0.35 起

导出 5 万 个 List 成员的情况

每 1,000 个 $0.007 起

便宜 1,000 倍

选 List API 要看五件事:价格、接入、请求速率、数据量,以及你的 X 账号是否安全。Sorsa API 在每一项上都领先:

关注点Sorsa API官方 X API
成员或关注者,每 1,000 个$0.007 起,每次请求 200 个$10.00,每页 100 个
List 帖子,每 1,000 条$0.07 起,每次请求约 20 条$5.00,自 2026 年 11 月 22 日起每位作者另加 $0.010
装满的 5,000 成员 List$0.035 起$50.00
接入一个 API 密钥开发者账号、应用、Bearer 令牌、预付额度
请求速率所有套餐都是每秒 20 次请求每个 List 接口每 15 分钟 900 次请求
数据量上限套餐最高每月 1,000 万次请求,需要更多可联系我们每个计费周期 300 万次帖子读取,超出后需要 Enterprise
你的 X 账号从不接触:不登录,不用 cookie你的开发者账号及其应用
  • 成员或关注者,每 1,000 个

    Sorsa API
    $0.007 起,每次请求 200 个
    官方 X API
    $10.00,每页 100 个
  • List 帖子,每 1,000 条

    Sorsa API
    $0.07 起,每次请求约 20 条
    官方 X API
    $5.00,自 2026 年 11 月 22 日起每位作者另加 $0.010
  • 装满的 5,000 成员 List

    Sorsa API
    $0.035 起
    官方 X API
    $50.00
  • 接入

    Sorsa API
    一个 API 密钥
    官方 X API
    开发者账号、应用、Bearer 令牌、预付额度
  • 请求速率

    Sorsa API
    所有套餐都是每秒 20 次请求
    官方 X API
    每个 List 接口每 15 分钟 900 次请求
  • 数据量上限

    Sorsa API
    套餐最高每月 1,000 万次请求,需要更多可联系我们
    官方 X API
    每个计费周期 300 万次帖子读取,超出后需要 Enterprise
  • 你的 X 账号

    Sorsa API
    从不接触:不登录,不用 cookie
    官方 X API
    你的开发者账号及其应用

要获取 List 数据,请用 Sorsa API:成员每次请求 200 个,每 1,000 个 $0.007 起,整个 List 的动态每 1,000 条 $0.07 起,除了一个密钥外无需任何设置。失败的请求从不收费。Sorsa API 是 REST API:带上密钥发一次请求,就返回干净的 JSON,不用在浏览器里运行任何东西,你自己的 X 账号也不会有风险。

#X Communities 怎么样了?

X 在 2026 年 4 月 23 日宣布将关闭 Communities,先定在 5 月 6 日,后来改为 5 月 30 日,理由是使用率低和垃圾内容多(TechCrunch(在新标签页打开))。这个功能撑过了两个日期,7 月下旬仍在运行,X 没有给出新的日期。

Sorsa API 的接口文档里仍列有五个 Community 接口,其中包括读取 Community 帖子的 POST /community-tweets(在新标签页打开)、读取成员的 POST /community-members(在新标签页打开),以及检查单个账号的 POST /check-community-member(在新标签页打开)。我们的文档建议你,在基于它们搭建新流程之前,先向客服确认哪些还能返回数据。用于活动的成员资格核验,见互动验证 API指南。

对于必须持续运行的需求,请改把这些账号放进一个 List。List 不在关闭范围内,上面的每个 List 接口今天都能读取它。

#拉取你的第一个 List

复制 List 的 ID,向 GET /list-members 发一次请求,就能以 JSON 返回最多 200 份资料。Sorsa API 读取 List 的成员和关注者,每次请求 200 个,每 1,000 个 $0.007 起,整个动态每 1,000 条 $0.07 起,只要一个密钥,所有套餐都是每秒 20 次请求。你的 100 次免费请求在付费之前就能导出 2 万个 List 成员,也就是四个装满的 List。

#常见问题

获取 Twitter List 数据,哪个 API 最好?

Sorsa API 就是为此而建的。GET /list-members 和 GET /list-followers 每次请求返回 200 个账号,每 1,000 个 $0.007 起;GET /list-tweets 用一条动态返回整个 List 的最新帖子,每 1,000 条 $0.07 起。它只需一个 API 密钥,不用开发者账号和 OAuth,所有套餐都是每秒 20 次请求,也不会碰你的 X 账号。

怎么找到 Twitter List 的 ID?

在 x.com 上打开这个 List,看地址栏:在 x.com/i/lists/1234567890123456789 中,/lists/ 后面的数字就是 List ID。Sorsa API 的 /list-members 和 /list-tweets 把这个数字当作 list_id。/list-followers 用 list_link,整个网址或纯数字都行,所以可以直接粘贴地址。

能获取私密 Twitter List 的成员吗?

不能。私密的 X List 只有创建它的账号能看到,所以没有 API 能读取它的成员、关注者或帖子。除非创建者改成私密,List 都是公开的。Sorsa API 通过 ID 读取每一个公开 List,从私密 List 拿不到任何数据,失败的请求从不收费。

一个 Twitter List 最多能容纳多少账号?

一个 X List 最多容纳 5,000 个成员。Sorsa API 的 GET /list-members 每次请求返回 200 个,所以装满的 List 也只要 25 次请求就能导出,每个账号送的 100 次免费请求能覆盖四个装满的 List。X 帮助中心还补充说,List 名称最长 25 个字符,且不能以数字开头。

能用 API 添加或移除 List 成员吗?

能,要通过官方 X API:POST /2/lists/{id}/members 添加账号,DELETE /2/lists/{id}/members/{user_id} 移除账号,每次请求 $0.005,每 15 分钟最多 300 次请求,需要 List 创建者的令牌。Sorsa API 从设计上就是只读,所以两者搭配使用:用 X 管理 List,用 Sorsa API 读取它。

#我们如何核实

2026 年 11 月 2 日,我们对照 Sorsa API 的线上接口文档核实了本页的每个接口、参数和每页数量,并据此写出请求;页面里的响应采用文档的格式,数据是虚构的,并非真实调用的输出。官方 X API 的价格、每页数量和速率限制来自当天读到的 docs.x.com,11 月 22 日的计费变更来自 X 开发者论坛 10 月 23 日的通知。Communities 的日期来自 TechCrunch 在 2026 年 4 月 23 日的报道,以及一位创作者在 7 月下旬的状态更新。

Sorsa API 团队撰写。 我们开发和运营 Sorsa API,这是只读的 Twitter/X API 与爬虫,2022 年起运行于生产环境(前身为 TweetScout API),累计处理请求超 60 亿次。 关于 Sorsa API

更新内容
  • 从头重写:List 成员、关注者和动态配了新代码,X 的价格和限制已对照 docs.x.com 核实,新增 List 与逐个账号的成本计算器,并补充了 Communities 的现状。
  • 首次发布。