tamnd/x-cli
GitHub: tamnd/x-cli
一个纯 Go 实现的 X(Twitter)只读命令行工具,无需付费 API 即可读取并导出推文、时间线和搜索结果为多种结构化格式。
Stars: 2 | Forks: 0
# x
[](https://github.com/tamnd/x-cli/actions/workflows/ci.yml)
[](https://github.com/tamnd/x-cli/releases/latest)
[](https://pkg.go.dev/github.com/tamnd/x-cli)
[](https://goreportcard.com/report/github.com/tamnd/x-cli)
[](./LICENSE)
一个快速、友好的 X (Twitter) 命令行工具。单一纯 Go 二进制文件,可读取推文、个人资料、时间线、讨论串,并通过 X 的免费公开接口进行搜索,还能将账户抓取到本地 SQLite 存储中。严格只读:绝不会写入您的账户。无需付费 API,无需注册。
[安装](#install) • [命令](#commands) • [输出](#output) • [会话](#your-own-session) • [指南](#guides)

文档: (镜像:)
```
x tweet 20 # a single tweet
x user nasa # a profile
x timeline nasa --guest -n 20 # a user's recent tweets
x search "from:nasa filter:media" --guest -o jsonl
x download https://x.com/nasa/status/2064422103416238295 -O .
```
## 工作原理
x 仅通过 X 自带的免费公开接口(与未登录浏览器使用的接口相同)进行通信,分为三个层级。它会针对每次调用选择成本最低的层级:
- **Tier 0,syndication。** 公共嵌入/syndication endpoint。完全不需要认证。提供单条推文、个人资料和最近时间线窗口的访问。
- **Tier 1,guest GraphQL。** 可选(`--guest`)的 guest token,其生成方式与 Web 客户端生成方式相同。可深入翻阅时间线页面并解析更多内容。
- **Tier 2,session GraphQL。** 使用您自己的浏览器会话 cookie,通过 `x auth import` 导入。解锁 X 专为已登录客户端保留的读取权限:搜索、粉丝/关注列表、您的主页时间线以及书签。
整个工具中没有任何开发者 API key,也不涉及任何付费计划,且该工具仅执行读取操作。它没有任何用于发推、点赞、关注或以其他方式更改您账户的命令。
## 安装
```
go install github.com/tamnd/x-cli/cmd/x@latest
```
或者从源码构建:
```
git clone https://github.com/tamnd/x-cli
cd x-cli
make build # produces ./bin/x
```
x 是纯 Go 编写的(`CGO_ENABLED=0`);该二进制文件没有任何运行时依赖。
内置了 Shell 自动补全:`x completion bash|zsh|fish|powershell`。
## 命令
日常读取操作。Tier 列显示了能够响应该请求的最低层级:
Tier 0 无需任何条件,`g` 需要 `--guest` 或会话,`s` 需要会话。
| 命令 | 读取内容 | Tier |
| --- | --- | --- |
| `x tweet ` | 单条推文 | 0 |
| `x user ` | 个人资料 | 0 |
| `x timeline ` | 用户的推文(使用 `--guest` 可获取更早内容) | 0 |
| `x thread ` | 围绕某条推文的对话 | g |
| `x replies ` | 用户的推文(包含回复) | s |
| `x media ` | 附加在用户推文上的媒体 | s |
| `x search ` | 搜索推文 | g |
| `x counts ` | 搜索结果的每日推文计数 | g |
| `x followers ` / `x following ` | 关注关系图 | g |
| `x likers ` / `x retweeters ` | 点赞或转发者 | g |
| `x home` / `x bookmarks` | 您的主页时间线、您的书签 | s |
| `x download ` | 将推文的媒体下载到磁盘 | 0 |
| `x crawl ...` | 广度优先地抓取到本地存储中 | g |
| `x db ` | 查询您已收集的内容 | local |
`x serve` 通过 HTTP 以 NDJSON 格式公开每一次读取,`x mcp` 则将相同的集合公开为 MCP 工具。请参阅 [CLI 参考手册](https://x-cli.tamnd.com/reference/cli/)以获取完整的接口列表和所有 flag。
## 输出
每个命令都使用统一的标准化数据模型,并根据您的 pipeline 需求进行渲染。默认情况下,在终端中输出可读的分区列表,而在通过管道传输时输出 JSONL。
```
x timeline nasa --guest # each tweet as a section (default)
x timeline nasa --guest -o table # aligned columns in a grid
x timeline nasa --guest -o jsonl # one JSON object per line
x timeline nasa --guest -o csv --fields id,likes,text
x timeline nasa --guest -o url # just the permalinks
x user nasa -o template --template '{{.username}} {{.metrics.followers}}'
```
推文和账户 ID 始终为字符串,因此 snowflake ID 在 `jq` 或电子表格中绝不会丢失精度。
## 您专属的会话
某些读取操作是 X 专为已登录客户端保留的(搜索、粉丝/关注列表、您的主页时间线、书签)。只需从浏览器 cookie 中导入一次您的会话即可:
```
x auth import --auth-token --ct0
x auth status
```
例如,导入后:
```
x search "site reliability" -n 50 -o jsonl
x followers nasa -n 100 -o csv --fields username,name,followers
x home -n 50 -o jsonl
```
您的会话仅用于读取。该工具没有任何用于发推、点赞、关注或以其他方式更改您账户的命令。
## 本地存储
在任何读取操作中指定 `--db`,数据就会同时存入本地 SQLite 存储中,因此读取操作也可兼任抓取任务。`x crawl` 以广度优先方式遍历账户,`x db` 则用于查询您已收集的内容。
```
x timeline nasa --guest -n 200 --db x.db
x crawl nasa --depth 1 --db x.db
x db stats --db x.db
x db query "select username, count(*) from tweets group by author" --db x.db
```
## 指南
完整文档位于 [x-cli.tamnd.com](https://x-cli.tamnd.com)。指南深入介绍了每个功能领域:
- [读取推文](https://x-cli.tamnd.com/guides/reading-tweets/):推文、个人资料、时间线和讨论串,以及各自所需的层级。
- [搜索与发现](https://x-cli.tamnd.com/guides/search-and-discovery/):搜索、计数、关注关系图、点赞者和转发者。
- [您的会话](https://x-cli.tamnd.com/guides/your-account/):导入浏览器 cookie 以解锁仅限会话的读取操作。
- [输出与 pipeline](https://x-cli.tamnd.com/guides/output-and-pipelines/):各种格式、`--fields`、模板,以及如何与 `jq` 配合使用。
- [本地存储](https://x-cli.tamnd.com/guides/local-store/):将任何读取操作转化为抓取任务,并使用 SQL 进行查询。
如需完整的命令和 flag 映射表,请参阅
[CLI 参考手册](https://x-cli.tamnd.com/reference/cli/)以及
[输出格式](https://x-cli.tamnd.com/reference/output/)。
## 许可证
x 衍生自 [nitter](https://github.com/zedeus/nitter),并基于 **GNU AGPL-3.0** 协议授权。请参阅 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。
标签:EVTX分析, Go, JSONL, Ruby工具, SQLite, URL抓取, X/Twitter, 数据抓取, 数据爬虫, 日志审计