chore: 初始化 123yunpan skill 仓库 (v1.3.0)

- 完整 skill 本体:SKILL.md / README.md / manifest.json / config.json
- scripts/123yunpan.py:零依赖 CLI(含空间双配额、QPS 限流、零依赖 XLSX)
- references/ 参考资料
- 排除 .workbuddy/ 开发目录与 __pycache__
This commit is contained in:
2026-09-27 22:41:43 +08:00
commit f0ecfa6de0
8 changed files with 5124 additions and 0 deletions
+368
View File
@@ -0,0 +1,368 @@
# 123云盘 (123 Cloud Drive) CLI
> 🚀 123云盘开放平台 API 命令行工具 v1.3.0
一站式管理 123 云盘:文件管理、上传下载、分享链接、离线下载、直链、图床、视频转码、专业/标准双空间配额报告。纯 Python 标准库实现,零依赖(**Excel 导出也不需要 openpyxl**)。
---
## 📋 功能一览
| 分类 | 功能 |
|------|------|
| 📁 文件管理 | 浏览、创建目录、重命名、移动、复制、回收站、下载 |
| 🔎 递归搜索 | 跨文件夹深度搜索文件名,支持自定义搜索深度 |
| ⬆️ 上传 | V2 分片上传(>100MB 自动分片)、单步上传、**秒传检测** |
| 🔗 分享 | 普通分享 / 付费分享 / **批量创建**,支持密码、有效期、流量控制 |
| 📊 分享统计 | 一键查看分享总数、预览/下载/转存次数、流量 Top N |
| 📄 分享导出 | 批量创建分享,超过 10 个链接自动生成**三列 Excel**(文件名称 / 链接 / 路径) |
| 🗑️ 分享管理 | 批量删除分享链接 / 断点续跑 |
| 📥 离线下载 | HTTP / FTP / 磁力链接离线下载 |
| 🌐 直链 | 启用直链、**短直链生成**、IP 白名单、缓存刷新、流量日志 |
| 🖼️ 图床 | 图片存储、移动、复制、离线迁移 |
| 🎬 视频转码 | 多分辨率转码、MP4/M3U8 下载 |
| 🔒 保险箱 | 解锁保险箱 |
| ⚙️ 配置管理 | 配置查看、**Token 有效性验证** |
| 🌲 目录树 | 文件夹树形结构展示 |
| ⬇️ 批量下载 | 多文件并行下载 |
| 📊 存储分析 | 按文件夹统计空间占用 |
| 📤 分享导出 | 分享链接批量导出 Excel |
| 🔄 配置迁移 | 配置导入/导出 |
| 💾 空间报告 | 专业空间 / 标准空间**双配额**明细、使用率预警、清理倒计时 |
---
## 🧮 空间规则:专业空间 / 标准空间
官方 2026-09-24 公告后,账号空间拆分为**两套独立配额**:
| 空间 | 存放内容 | 超额后果 |
|------|----------|----------|
| **专业空间** | 本人持有的文件、≥10GB 文件、直链文件、转码文件、图床文件 | 阻断开放平台的**上传 / 离线下载 / 转码** |
| **标准空间** | 转存的文件(<10GB);重复文件与回收站文件不计入 | 同样阻断上传 |
```bash
python3 scripts/123yunpan.py space
```
- 使用率 ≥ 90% → 红色预警
- 专业空间剩余天数 > 0 → 打印清理倒计时(超出后配额不可恢复)
- `config check` 与 `upload` 执行前自动预检,专业空间已满会直接给出阻断提示
---
## 🚀 快速开始
### 1. 获取凭证
1. 访问 [123pan.com/member](https://www.123pan.com/member) 购买**开发者权益包**
2. 通过站内信获取 `client_id` 和 `client_secret`
### 2. 配置
```bash
# 一键配置(推荐)
python3 scripts/123yunpan.py setup --client-id YOUR_ID --client-secret YOUR_SECRET
# 验证配置是否有效
python3 scripts/123yunpan.py config check
```
输出示例:
```
🔍 正在验证配置...
✅ Client ID: 已配置
✅ Client Secret: 已配置
✅ Access Token: 已配置
✅ Token 有效!
{
"用户ID": 1812749510,
"昵称": "暖心向阳335",
"VIP": "是",
"总容量": "21.56 TB",
"已用": "859.33 GB"
}
```
---
## 📖 完整命令参考
### 文件管理
```bash
# 浏览文件夹
python3 scripts/123yunpan.py file list --parent-id 0 --limit 100
# 只看回收站中的文件
python3 scripts/123yunpan.py file list --parent-id 0 --trashed
# 同时显示回收站文件(带 🗑️ 标记)
python3 scripts/123yunpan.py file list --parent-id 0 --show-trashed
# 跨文件夹递归搜索(最大深度 5 层)
python3 scripts/123yunpan.py file search "Photoshop" --parent-id 27172609 --max-depth 3
# 存储报告(按文件夹统计空间占用)
python3 scripts/123yunpan.py file storage-report --parent-id 0
# 获取文件详情
python3 scripts/123yunpan.py file detail --file-id 12345
# 批量获取文件详情
python3 scripts/123yunpan.py file details-multi --file-ids "123,456,789"
# 创建文件夹
python3 scripts/123yunpan.py file mkdir --name "新文件夹" --parent-id 0
# 目录树展示
python3 scripts/123yunpan.py file tree --parent-id 0
# 重命名
python3 scripts/123yunpan.py file rename --file-id 12345 --new-name "新名称.txt"
# 批量重命名
python3 scripts/123yunpan.py file rename-batch --file-ids 123 456 --new-names "a.txt" "b.txt"
# 移动文件
python3 scripts/123yunpan.py file move --file-ids "123,456" --target-parent-id 0
# 复制文件
python3 scripts/123yunpan.py file copy --file-id 12345 --target-parent-id 0
# 移入回收站
python3 scripts/123yunpan.py file trash --file-ids "123,456"
# 从回收站恢复
python3 scripts/123yunpan.py file recover --file-ids "123,456"
# 下载文件
python3 scripts/123yunpan.py file download --file-id 12345 --output /path/to/save
# 批量下载文件
python3 scripts/123yunpan.py file download-batch --file-ids "123,456,789" --output /path/to/save
```
### 上传
```bash
# 上传文件(自动选择单次/分片上传,自动检测秒传)
python3 scripts/123yunpan.py upload --file /path/to/file.txt --parent-id 0
# 上传并指定文件名
python3 scripts/123yunpan.py upload --file /path/to/file.txt --parent-id 0 --filename "自定义名.zip"
# 重复文件处理:1=重命名 2=覆盖(默认不传=覆盖)
python3 scripts/123yunpan.py upload --file /path/to/file.txt --parent-id 0 --duplicate 2
```
秒传时会显示:`⚡ 秒传成功!文件已存在,跳过上传 (fileID: 12345)`
### 分享管理
```bash
# 创建单个分享
python3 scripts/123yunpan.py share create --name "分享名" --file-ids "123,456" --expire 0
# 分享导出(批量导出分享链接到 Excel)
python3 scripts/123yunpan.py share export --output shares.xlsx
# ⭐ 查看空间占用(专业空间 / 标准空间)
python3 scripts/123yunpan.py space
# ⭐ 批量创建分享(递归遍历文件夹,导出 Excel)
python3 scripts/123yunpan.py share create-batch --parent-id 27172609 --expire 0 -o result.xlsx
# 批量创建分享(导出 JSON)
python3 scripts/123yunpan.py share create-batch --parent-id 27172609 -o result.json
# 超过 10 个链接自动生成 Excel;可用以下参数调整
python3 scripts/123yunpan.py share create-batch --parent-id 27172609 --excel-threshold 50
python3 scripts/123yunpan.py share create-batch --parent-id 27172609 --no-excel
python3 scripts/123yunpan.py share create-batch --parent-id 27172609 --resume # 断点续跑
# 列出分享
python3 scripts/123yunpan.py share list --limit 10
python3 scripts/123yunpan.py share list --all-pages
# ⭐ 分享统计(查看下载量 Top N)
python3 scripts/123yunpan.py share stats --top 10
# 更新分享设置
python3 scripts/123yunpan.py share update --share-ids "1,2" --traffic-switch 2
# 批量删除分享
python3 scripts/123yunpan.py share delete-batch --share-ids "1,2,3"
# 删除所有分享(跳过确认)
python3 scripts/123yunpan.py share delete-batch --all -y
# 创建付费分享
python3 scripts/123yunpan.py share pay-create --name "付费资源" --file-ids "123,456" --amount 10
# 列出付费分享
python3 scripts/123yunpan.py share pay-list --limit 10
```
### 直链管理
```bash
# 启用文件直链
python3 scripts/123yunpan.py direct-link enable --file-id 12345
# 获取完整直链
python3 scripts/123yunpan.py direct-link url --file-id 12345
# ⭐ 生成短直链(更隐私,不暴露文件名)
python3 scripts/123yunpan.py direct-link short-url --file-id 12345
# 输出: https://1812749510.v.123pan.cn/1812749510/12345
# 刷新直链缓存
python3 scripts/123yunpan.py direct-link cache-refresh --file-id 12345
# 禁用直链
python3 scripts/123yunpan.py direct-link disable --file-id 12345
# IP 白名单管理
python3 scripts/123yunpan.py direct-link ip-list
python3 scripts/123yunpan.py direct-link ip-switch --switch 1
python3 scripts/123yunpan.py direct-link ip-update --ips "1.1.1.1" "2.2.2.2"
# 流量日志
python3 scripts/123yunpan.py direct-link traffic-logs --file-id 12345
```
### 离线下载
```bash
# 创建离线下载任务
python3 scripts/123yunpan.py offline create --url "https://example.com/file.zip" --parent-id 0
# 查询下载进度
python3 scripts/123yunpan.py offline progress --task-id abc123
```
### 图床 (OSS)
```bash
python3 scripts/123yunpan.py oss list --parent-id 0 --limit 100
python3 scripts/123yunpan.py oss detail --file-id 12345
python3 scripts/123yunpan.py oss delete --file-id 12345
python3 scripts/123yunpan.py oss move --file-id 12345 --target-parent-id 0
python3 scripts/123yunpan.py oss copy --file-ids "123,456" --target-parent-id 0
```
### 视频转码
```bash
python3 scripts/123yunpan.py transcode list --parent-file-id 0 --limit 100
python3 scripts/123yunpan.py transcode resolutions --file-id 12345
python3 scripts/123yunpan.py transcode transcode --file-id 12345 --resolution 1080p
python3 scripts/123yunpan.py transcode download --file-id 12345 --output /path/
python3 scripts/123yunpan.py transcode download-m3u8 --file-id 12345 --output /path/
```
### 其他
```bash
# 查看配置
python3 scripts/123yunpan.py config
# 验证配置有效性
python3 scripts/123yunpan.py config check
# 配置导出
python3 scripts/123yunpan.py config export --output config.json
# 配置导入
python3 scripts/123yunpan.py config import --file config.json
# 获取用户信息
python3 scripts/123yunpan.py user-info
# 解锁保险箱
python3 scripts/123yunpan.py safebox unlock --password "your_password"
# ⭐ 空间占用报告(专业空间 + 标准空间)
python3 scripts/123yunpan.py space
```
---
## 📄 分享 Excel 列结构
`share create-batch` 在**有效链接数 > 10** 时自动生成 Excel,固定三列:
| 列名 | 说明 | 示例 |
|------|------|------|
| **文件名称** | 去分类前缀、去扩展名 | `Cinema 4D R20` |
| **链接** | 分享/直链 URL,可点击超链接 | `https://www.123pan.com/s/JyAKVv-o6bI` |
| **路径** | 云盘内完整相对路径(含文件名) | `软件/office/离线安装包/2021/ProPlus2021Retail.img` |
名称解析规则:`Cinema 4D/Cinema 4D R20.zip` → 名称 `Cinema 4D R20`、路径 `Cinema 4D/Cinema 4D R20.zip`。
> xlsx 由 `zipfile` + 手写 OOXML 生成,**不需要安装 openpyxl**。
---
## ⚡ 限流保护
CLI 内置端点级 QPS 表,自动限速,无需手动 `sleep`:
| 端点 | QPS |
|------|-----|
| `/api/v2/file/list` | **1.5**(最严格) |
| `/api/v1/user/info` | 10 |
| `/api/v1/access_token` | 10 |
| `/api/v1/share/create` | 3 |
- **429 / 5xx** → 指数退避重试(最多 4 次)
- **401** → 自动刷新 Token 后重试一次
- 错误码会翻译为「原因 + 处置建议」再打印,不会只丢裸码
---
## ⚠️ 注意事项
| 项目 | 说明 |
|------|------|
| 文件名限制 | 不能包含 `\\\"/:*?|><`,长度 < 256 字符 |
| 上传限制 | 单文件最大 10GB(API 限制) |
| 分享有效期 | 仅支持 0(永久)/ 1 / 7 / 30 天 |
| 分享名称长度 | 付费分享要求 < 35 字符,CLI 自动截断 |
| 多 ID 写法 | `--file-ids` / `--share-ids` 只接受一个值,多个 ID 要写成 `--file-ids "1,2,3"` |
| `--json` 位置 | 全局选项,必须写在子命令之前(`--json config check`) |
| transcode 参数 | 用 `--parent-file-id`,与 file 系列的 `--parent-id` 不同 |
| 空间双配额 | **专业空间 / 标准空间独立**,任一超额都阻断上传,先看 `space` |
| 审核驳回文件 | `status > 100` 无法分享,批量分享时自动剔除 |
| Token 刷新 | 过期时自动刷新,无需手动处理 |
| `fileIDList` 格式 | 必须是逗号分隔的**字符串**(`"123,456"`),不是数组 |
| 分享链接格式 | `https://www.123pan.com/s/{shareKey}` |
| 回收站 | v2 API 默认包含回收站文件,用 `--trashed` / `--show-trashed` 过滤 |
| Excel 阈值 | 默认超过 **10** 个链接自动生成,可用 `--excel-threshold` / `--no-excel` 调整 |
| `--no-color` | 禁用彩色输出,适用于日志记录和管道操作 |
| `--json` | 所有命令支持 `--json` 输出 JSON 格式,便于脚本解析 |
---
## 📁 文件结构
```
123yunpan/
├── SKILL.md # AI 技能文档(完整 API 参考,含 Changelog)
├── README.md # 用户文档(本文件)
├── manifest.json # 技能清单(命令 / 参数 / 输出字段契约)
├── scripts/
│ └── 123yunpan.py # CLI 主程序(纯 Python 标准库)
└── references/
├── bulk-operations.md # 批量操作指南
└── competitor-upload-patterns.md # 上传模式参考
```
---
## 📚 相关链接
- [123云盘开放平台文档](https://123yunpan.yuque.com/org-wiki-123yunpan-muaork/cr6ced)
- [123云盘官网](https://www.123pan.com)