Skip to content

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ldo-tui

LINUX DO(Discourse)终端客户端。用键盘在终端里刷帖、看楼、搜索。

站点 https://linux.do(不做多站点)
技术 Go + Charm(bubbletea / bubbles / lipgloss)
能力 最新帖列表(含标签)、主题楼层、搜索、Cookie / 浏览器登录
不做 发帖、回帖、点赞、通知、私信

目录

  1. 快速开始
  2. 配置文件
  3. 登录与 Cloudflare
  4. 命令行
  5. TUI 快捷键
  6. 日常使用流程
  7. 环境变量
  8. 常见问题
  9. 开发

快速开始

依赖

  • Go(见 go.mod
  • 能访问 linux.do 的网络(若用代理,终端与浏览器尽量同一节点)
  • (可选)本机 Chrome / Chromium:用于 login --browser 自动抓 Cookie

安装与运行

git clone <本仓库>
cd ldo-tui

# 直接运行
go run ./cmd/ldo-tui

# 或安装到 $GOBIN
go install ./cmd/ldo-tui
ldo-tui

首次运行会自动创建配置目录与模板文件(不会覆盖已有内容),并提示你去编辑 Cookie:

~/.config/ldo-tui/
├── cookie.txt          # Cookie 只放这里(主要填写)
├── user-agent.txt      # UA 只放这里(已有默认值)
├── credentials.json    # 仅可选 API key / username(不含 cookie/ua)
└── README.txt

最短可用路径

# 1. 写入 Cookie(三选一,见下文「登录」)
go run ./cmd/ldo-tui login --browser
# 或手动编辑 ~/.config/ldo-tui/cookie.txt

# 2. 检查是否打得通 API
go run ./cmd/ldo-tui doctor
# 期望: status 200 · json true · cloudflare false

# 3. 进入 TUI
go run ./cmd/ldo-tui

配置文件

路径查看:

go run ./cmd/ldo-tui path

默认目录:~/.config/ldo-tui/
(若设置了 XDG_CONFIG_HOME,则为 $XDG_CONFIG_HOME/ldo-tui/

文件 存什么 谁来写
cookie.txt Request Cookie 你填,或 login --browser
user-agent.txt User-Agent 默认已有;建议与浏览器一致
credentials.json user_api_key / username(可选) 一般不用管
README.txt 说明 首次自动生成

Cookie / UA 不会再写进 credentials.json,避免两处不一致。旧版若 JSON 里还有这两个字段,启动时会自动迁到 .txt 并清掉 JSON 里的副本。

cookie.txt 怎么写

  1. 浏览器打开 https://linux.do 并完成验证(能正常刷帖)。
  2. F12Network → 点开一条成功请求(如 latest.json)。
  3. Request Headers(请求头)→ 复制 Cookie 整段。
  4. 粘贴到 cookie.txt非注释行# 开头行为注释,会被忽略)。

正确示例:

# 下面一行才是有效内容
cf_clearance=xxx; _forum_session=yyy; _t=zzz; ...

错误示例(不要这样):

# 这是 Response 的 Set-Cookie,带属性,会导致持续 429
cf_clearance=xxx; HttpOnly; Path=/; Domain=linux.do; Expires=...

程序会尽量自动剥掉 HttpOnly / Path / Domain 等属性,但请优先复制 Request Cookie

权限:目录建议 700,凭证文件 600login / 自动保存时会设置)。


登录与 Cloudflare

linux.do 在 Cloudflare 后。终端客户端不像完整浏览器,匿名或错误 Cookie 时经常出现:

  • HTTP 429
  • 页面 “Just a moment…” / “请稍候…”
  • 响应头 cf-mitigated: challenge

本客户端会:

  • 使用 Chrome TLS 指纹 访问
  • 携带你保存的 Cookie + User-Agent
  • 控制请求频率、短缓存、避免对 CF 挑战无意义重试

方式 A:浏览器自动抓取(推荐)

需本机已装 Chrome / Chromium。

go run ./cmd/ldo-tui login --browser
  1. 弹出浏览器窗口,打开 linux.do
  2. 你完成 Cloudflare / 如需可登录账号
  3. 检测到 cf_clearance 后,自动写入配置并探测 API

TUI 内遇到 429 时按 b,效果相同。

方式 B:手写 cookie.txt

编辑 ~/.config/ldo-tui/cookie.txt,按上一节从浏览器复制 Request Cookie。
可选同步修改 user-agent.txt(与复制 Cookie 的那次请求 UA 一致更稳)。

方式 C:从文件导入

# 先把 Cookie / UA 放到临时文件
pbpaste > /tmp/ldo-cookie.txt
echo 'Mozilla/5.0 ...' > /tmp/ldo-ua.txt

go run ./cmd/ldo-tui login \
  --cookie-file /tmp/ldo-cookie.txt \
  --user-agent-file /tmp/ldo-ua.txt

默认会先 probe,成功才保存。强制保存:--no-probe

方式 D:User-Api-Key(可选)

若你有 Discourse User API Key,可在 TUI 按 n 粘贴,或:

go run ./cmd/ldo-tui login --api-key '你的key'

对 Cloudflare 边缘挑战,通常仍需要有效的 cf_clearance Cookie,不能只靠 API Key。

清除登录

go run ./cmd/ldo-tui logout

或 TUI 列表页按 L


命令行

ldo-tui                 启动 TUI(自动加载配置)
ldo-tui login --browser 打开浏览器,过 CF 后自动保存 Cookie/UA
ldo-tui login [flags]   从参数/文件/环境变量保存凭证
ldo-tui logout          清除本地凭证
ldo-tui path            打印配置文件路径
ldo-tui doctor          探测 /latest.json 是否可达
ldo-tui help            帮助

login 常用参数

参数 说明
--browser 浏览器自动抓 Cookie
--cookie Cookie 字符串
--cookie-file 从文件读 Cookie
--user-agent User-Agent 字符串
--user-agent-file 从文件读 UA
--api-key User-Api-Key
--no-probe 不探测,直接保存

doctor 成功示例

cookie:    set (...), cf_clearance=true
status:    200
json:      true
cloudflare:false
OK — API reachable.

TUI 快捷键

作用
j / k / 列表:移动光标
j / l / / ] 主题内下一楼(整楼跳转,类似右滑翻评论)
k / h / / [ 主题内上一楼
/ 主题内:细滚一行(长帖内部)
Enter 打开主题
r 刷新当前列表或主题(Latest 保持当前页)
] / / Ctrl+F 列表下一页(Latest)
[ / / Ctrl+B 列表上一页(Latest)
o 用系统浏览器打开当前主题
/ 搜索
b 浏览器登录(自动抓 Cookie,应对 429)
n 手动粘贴 Cookie 或 User-Api-Key
L 登出(列表页)
g / G 到顶 / 到底
Esc 返回上一层
q 列表页退出;主题页也可返回
? 帮助
Ctrl+C 强制退出

状态栏会显示当前页,例如:30 topics · p.1 ([ prev ] next)

界面结构

列表 Latest / 搜索结果
   │ Enter
   ▼
主题楼层(滚动阅读)
   │ Esc
   ▼
列表

正文以文本显示(Discourse cooked HTML 会转成纯文本),长段落会自动按终端宽度换行。图片等富内容用 o 在浏览器中查看。

列表行会显示话题标签,例如:

> 分享一个 Go 的 TUI 框架…  #go #tui  12r  2h

标签过多时自动截断(如 +3),窄终端上优先显示标题。


日常使用流程

首次
  go run ./cmd/ldo-tui          → 生成 ~/.config/ldo-tui/
  填写 cookie.txt
    或 login --browser / TUI 按 b
  go run ./cmd/ldo-tui doctor   → 确认 200
  go run ./cmd/ldo-tui          → 刷帖

之后
  直接 go run ./cmd/ldo-tui
  Cookie 过期或又 429 → 更新 cookie.txt 或按 b / login --browser

建议:

  • 终端代理与浏览器同一出口(例如都走 http://localhost:7890
  • 少连续狂按 r(已有间隔与短缓存,仍不必刷爆)
  • Cookie 换代理节点后通常会失效,需重新获取

环境变量

均可选;会覆盖配置文件中的对应项(适合临时调试,不必每次 export)。

变量 含义
LDO_COOKIE Cookie 字符串
LDO_USER_AGENT User-Agent
LDO_USER_API_KEY User-Api-Key
HTTPS_PROXY / HTTP_PROXY HTTP 代理(与浏览器一致)
XDG_CONFIG_HOME 配置根目录(默认 ~/.config

示例:

export HTTPS_PROXY=http://localhost:7890
export HTTP_PROXY=http://localhost:7890
go run ./cmd/ldo-tui doctor

常见问题

一直 429 / Cloudflare

按顺序检查:

  1. cookie.txt 是否为 Request Cookie
    • doctornames 应类似:cf_clearance, _forum_session, _t, ...
    • 不应出现:Path, Domain, Expires, SameSite(那是 Set-Cookie 属性)
  2. 是否含 cf_clearance
    • doctor 显示 cf_clearance=true
  3. 代理是否与浏览器一致
    • 节点一变,clearance 常立刻失效
  4. UA 是否大致一致
    • user-agent.txt 或与浏览器对齐
  5. 重新抓取
    • login --browser 或 TUI 按 b

doctor 显示 json true 但 TUI 仍失败

  • 确认跑的是同一套二进制 / 同一配置目录
  • 重启 TUI(会重新读配置)
  • 看是否改过 XDG_CONFIG_HOME

只有 cf_clearance、没有 _t / _forum_session

通常仍可读公开帖;若异常,请从已登录且能刷帖的页面复制完整 Request Cookie。

浏览器自动登录打不开 / 超时

  • 确认已安装 Chrome 或 Chromium
  • 在弹出窗口里手动完成验证,勿立即关闭
  • 最多等待约 3 分钟;失败可改手写 cookie.txt

Cookie 要保管吗?

要。其中含会话信息,文件权限为 600。勿提交到 Git,勿发到公开聊天。


开发

# 测试
go test ./...

# 构建
go build -o ldo-tui ./cmd/ldo-tui

主要包结构:

cmd/ldo-tui/          入口与子命令
internal/linuxdo/     HTTP 客户端、JSON 解析、Cookie 清洗
internal/auth/        凭证读写、浏览器抓 Cookie、首次配置生成
internal/ui/          bubbletea 界面
internal/render/      列表行、HTML→文本
internal/config/      路径与常量

Agent / 设计交接见本地 .agent/(仅本地维护,不随仓库入库)。


范围说明

  • 专用 linux.do,不做通用 Discourse 多站点客户端
  • 当前版本以阅读为主;发帖/回帖等不在范围内
  • 请正当使用:礼貌请求频率,勿做批量爬取或绕过站点安全策略的工具

致谢

本项目灵感来自 lhpqaq/ldo(linux.do 终端客户端),在其思路上按个人使用习惯重写。


License

MIT License,见 LICENSE

About

Terminal (TUI) client for browsing LINUX DO — latest posts, thread reading, and search.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages