tamnd/x-cli

GitHub: tamnd/x-cli

一个纯 Go 实现的 X(Twitter)只读命令行工具,无需付费 API 即可读取并导出推文、时间线和搜索结果为多种结构化格式。

Stars: 2 | Forks: 0

# x [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d4c719e205092054.svg)](https://github.com/tamnd/x-cli/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/tamnd/x-cli)](https://github.com/tamnd/x-cli/releases/latest) [![Go Reference](https://pkg.go.dev/badge/github.com/tamnd/x-cli.svg)](https://pkg.go.dev/github.com/tamnd/x-cli) [![Go Report Card](https://goreportcard.com/badge/github.com/tamnd/x-cli)](https://goreportcard.com/report/github.com/tamnd/x-cli) [![License](https://img.shields.io/github/license/tamnd/x-cli)](./LICENSE) 一个快速、友好的 X (Twitter) 命令行工具。单一纯 Go 二进制文件,可读取推文、个人资料、时间线、讨论串,并通过 X 的免费公开接口进行搜索,还能将账户抓取到本地 SQLite 存储中。严格只读:绝不会写入您的账户。无需付费 API,无需注册。 [安装](#install) • [命令](#commands) • [输出](#output) • [会话](#your-own-session) • [指南](#guides) ![x 将推文和时间线读取到彩色表格中,然后通过 jq 处理](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e69b397b2d092100.gif) 文档: (镜像:) ``` 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, 数据抓取, 数据爬虫, 日志审计