yixi-cli
一席命令行工具,参考 geektime_cli 的 Typer + Rich 结构,支持浏览器登录、课程与章节查询、图文/音视频下载及用户级配置。使用当前官网 v3 API。
安装
需要 Python 3.10+。从 PyPI 安装:
uv tool install 'yixi-cli[browser]'
yixi --help
更新已安装的 CLI:
uv tool upgrade yixi-cli
也可以从源码安装到虚拟环境:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[browser]'
yixi --version
浏览器登录需要 Google Chrome,browser extra 安装 Selenium。直接导入 token 时可只安装 uv tool install yixi-cli。HLS(m3u8)下载需要 PATH 中的 ffmpeg,直接 MP4/音频下载不需要。
登录
yixi login # 在 Chrome 中手动完成官网登录
yixi login --check # 向服务端验证登录状态
yixi login --token # 隐藏输入官网 token
yixi login --token-file /path/to/token.txt
yixi logout
--token-file 支持纯文本、{"token": "..."},也支持包含 Authorization 或 Cookie 的 header JSON。验证成功才保存新凭据;登录失败不会覆盖旧凭据。工具不发送短信或代填密码。
配置和凭据保存在 platformdirs 返回的用户配置目录;yixi config path 可查看路径。凭据文件通过原子替换保存,Unix 权限为 0600,不写入仓库。可用 YIXI_CONFIG_DIR 指定配置目录,YIXI_TOKEN 提供临时 token;环境变量优先于已保存的凭据,因此 logout 不会取消环境变量。
查询
yixi course list
yixi course list --type all --limit 3
yixi course list --type wanxiang,zhiya --json
yixi course info 39 --type wanxiang
yixi course chapters 39 --type wanxiang
yixi course chapters 'https://www.yixi.tv/#/wanxiang/detail?id=39&episodeId=261' --json
yixi article detail 261 --type wanxiang
栏目:speech 演讲、record 记录、wanxiang 万象、zhiya 枝桠、activity 现场。activity 即旧脚本下载的“现场”;record 是官网新增的“记录”栏目。查询目录默认列出 20 个演讲;--limit 0 获取全部,多个栏目的查询限制分别计算。
course info/chapters 使用课程 ID;article detail 使用章节 ID。万象、枝桠的两类 ID 不可混用。数字课程 ID 必须带 --type;官网详情链接可自动识别栏目,也支持 https://yixi.tv/h5/speech/1447/ 这样的演讲分享链接。
下载
yixi download 1450 --type speech --text-only
yixi download 'https://yixi.tv/h5/speech/1447/' --video-only
yixi download 79 --type zhiya --audio-only --with-media
yixi download 'https://www.yixi.tv/#/wanxiang/detail?id=39&episodeId=261' --text-only
yixi download --type all --limit 3 --dry-run
yixi download --type speech --limit 1 --quality best -o ~/Downloads/Yixi
yixi download --type record --quality all -o .
默认下载“演讲、现场、记录、万象、枝桠”,输出至 ./Yixi。省略 TARGET 会分页遍历选定栏目;下载的 --limit 是所有栏目的总课程数上限,0 表示不限。课程 ID 下载全部章节;带 episodeId 的官网链接只下载指定章节。
旧版已保存的 types 配置继续生效。要将演讲加入默认下载,可执行 yixi config set types speech,activity,record,wanxiang,zhiya;也可用 yixi download --type speech -o /path/to/一席 单独补下载,文件保存到 演讲/。
默认保存 Markdown 图文、可用音频和最高可用清晰度视频。--text-only 仅保存图文;--audio-only、--video-only 选择媒体类型,--with-media 可覆盖配置中的图文模式。--quality 可选 best、all、高清、标清。服务端提供文稿时附在 Markdown 中,保留原始 HTML 排版;没有文稿时保存介绍。工具按当前账号权限获取服务端返回的链接。
已有非空媒体文件默认跳过,--force 重新下载。新文件下载完成后才替换目标,中断不会把半成品当成已完成。HLS 由 ffmpeg 处理播放列表和加密分片。媒体失败或所选媒体不可用时,汇总原因并返回非零退出码;已保存的图文仍保留。--dry-run 只读取目录与详情,不写配置或下载文件。
输出按栏目分目录,万象、枝桠再按课程分目录。指定 -o . 可复用原目录中路径、名称和扩展名一致的媒体文件。旧版枝桠的平铺文件、音频扩展名或课程名称不一致时不会自动搬迁。“现场”输出至 现场/,“记录”输出至 记录/。现场接口现在只返回单个视频地址(保存为 视频.mp4);同一条目已有旧版 高清/标清/超清 视频时默认跳过,--force 才重新下载。
配置
yixi config show
yixi config show --json
yixi config set output_dir ~/Downloads/Yixi
yixi config set types speech,record
yixi config set text_only true
yixi config set quality all
yixi config set limit 3
yixi config reset --confirm
| 配置项 | 默认值 | 含义 |
|---|---|---|
output_dir |
./Yixi |
下载目录 |
types |
speech,activity,record,wanxiang,zhiya |
默认下载栏目 |
limit |
0 |
下载总课程上限 |
text_only |
false |
仅图文 |
quality |
best |
视频清晰度 |
timeout |
30 |
HTTP 超时秒数 |
retries |
3 |
GET 请求重试次数,0–10 |
interval |
1 |
API 请求间隔秒数 |
page_size |
50 |
分页大小,1–200 |
命令行选项覆盖本次运行的配置,不更改保存的配置。非法值和损坏的 JSON 明确报错。
开发
uv venv --python 3.13
uv pip install -e '.[dev,browser]'
.venv/bin/python -m pytest -q
.venv/bin/ruff check .
.venv/bin/python -m yixi_dl --help
代码位于 src/yixi_dl,分为 CLI、配置、HTTP、认证、API 和下载模块。测试使用模拟响应及临时目录,不需要账号,不修改用户配置。HLS 集成测试使用本地 HTTP 服务和 ffmpeg 生成的一秒静音素材,验证加密播放列表合并;没有 ffmpeg 时跳过。
原始三个 Python 文件保存在被 Git 忽略的 .legacy-backup/,其中可能包含原始凭据。旧入口 yixi_downloader.py 现在只转发到 CLI,不再在导入时启动批量下载。已有课程目录、音视频、缓存、虚拟环境及本地凭据不纳入 Git;发布包仅包含项目源码和文档。
官网接口没有稳定性承诺;若返回格式变更,工具会提示错误。浏览器登录需由使用者完成真实账户验证。
发布
GitHub 仓库为 QinGeneral/yixi-cli,PyPI 包名为 yixi-cli,安装后提供 yixi 命令。
.github/workflows/release.yml 在推送 v<版本> 标签时运行测试、检查代码、构建并验证 wheel 和源码包,再通过 GitHub 的 pypi environment 和 PyPI Trusted Publishing 发布。首次发布需要在 PyPI 注册对应的 GitHub publisher,字段为 owner QinGeneral、repository yixi-cli、workflow release.yml、environment pypi。后续发布同时更新 pyproject.toml 与 src/yixi_dl/__init__.py 中的版本,再推送对应标签。已发布版本不可覆盖。
Metadata
Release files for yixi-cli 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| yixi_cli-0.1.0.tar.gz | 23.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yixi_cli-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 45.4 kB
Release files / yixi_cli-0.1.0.tar.gz
| Download URL | yixi_cli-0.1.0.tar.gz |
|---|---|
| Size | 23.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4c0523c4e9e357f5824e7f8fe4b824d0d80bd4f927692bfcb5e7ff271c076c5f
|
|
BLAKE2b-256 checksum How to use checksums |
6d6201e4b1f98279ee0c14d6228b7a325f66d5178f83472e6a132679e04555aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / yixi_cli-0.1.0-py3-none-any.whl
| Download URL | yixi_cli-0.1.0-py3-none-any.whl |
|---|---|
| Size | 22.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fbe75123513005920c828b9c0871c56cdac4bf62a85838d80a342283817944d1
|
|
BLAKE2b-256 checksum How to use checksums |
a7331b54b269efb43fc962a50a070498084acc399572d247c1c9957559a0db83
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for yixi-cli 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.