{"id":49416193,"url":"https://github.com/ayest0/gpt2json","last_synced_at":"2026-04-29T03:06:58.475Z","repository":{"id":354203785,"uuid":"1222495257","full_name":"AyeSt0/gpt2json","owner":"AyeSt0","description":"协议优先的 Sub2API / CPA JSON 导出工具","archived":false,"fork":false,"pushed_at":"2026-04-27T16:28:22.000Z","size":3465,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-27T16:28:24.910Z","etag":null,"topics":["api","cpa","desktop","graph","imap","jmap","json","oauth","pop3","pyside6","python","sub2api"],"latest_commit_sha":null,"homepage":"https://github.com/AyeSt0/gpt2json#readme","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AyeSt0.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-27T12:24:13.000Z","updated_at":"2026-04-27T16:15:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AyeSt0/gpt2json","commit_stats":null,"previous_names":["ayest0/gpt2json"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/AyeSt0/gpt2json","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AyeSt0%2Fgpt2json","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AyeSt0%2Fgpt2json/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AyeSt0%2Fgpt2json/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AyeSt0%2Fgpt2json/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AyeSt0","download_url":"https://codeload.github.com/AyeSt0/gpt2json/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AyeSt0%2Fgpt2json/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32408464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T02:37:21.628Z","status":"ssl_error","status_checked_at":"2026-04-29T02:36:50.947Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","cpa","desktop","graph","imap","jmap","json","oauth","pop3","pyside6","python","sub2api"],"created_at":"2026-04-29T03:06:57.354Z","updated_at":"2026-04-29T03:06:58.468Z","avatar_url":"https://github.com/AyeSt0.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/hero.png\" alt=\"GPT2JSON - Sub2API / CPA JSON 导出工具\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eGPT2JSON\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  面向中文交付场景的 \u003cb\u003eSub2API / CPA JSON 导出工具\u003c/b\u003e。协议优先、本地生成、批次隔离，不直接写入后台。\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/AyeSt0/gpt2json/releases/latest\"\u003e\u003cimg alt=\"最新版本\" src=\"https://img.shields.io/badge/version-v0.1.7-60A5FA?style=for-the-badge\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/AyeSt0/gpt2json/releases/latest\"\u003e\u003cimg alt=\"下载 Windows 安装器\" src=\"https://img.shields.io/badge/Windows-%E5%AE%89%E8%A3%85%E5%99%A8-38BDF8?style=for-the-badge\u0026logo=windows11\u0026logoColor=white\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/AyeSt0/gpt2json/releases/latest\"\u003e\u003cimg alt=\"下载 ZIP 便携包\" src=\"https://img.shields.io/badge/ZIP-%E4%BE%BF%E6%90%BA%E5%8C%85-8B5CF6?style=for-the-badge\u0026logo=github\u0026logoColor=white\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/AyeSt0/gpt2json/actions/workflows/ci.yml\"\u003e\u003cimg alt=\"CI\" src=\"https://img.shields.io/github/actions/workflow/status/AyeSt0/gpt2json/ci.yml?branch=main\u0026style=for-the-badge\u0026label=tests\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/AyeSt0/gpt2json?style=for-the-badge\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-为什么用-gpt2json\"\u003e为什么用\u003c/a\u003e ·\n  \u003ca href=\"#-v017-更新重点\"\u003e更新重点\u003c/a\u003e ·\n  \u003ca href=\"#-界面预览\"\u003e界面预览\u003c/a\u003e ·\n  \u003ca href=\"#-快速开始\"\u003e快速开始\u003c/a\u003e ·\n  \u003ca href=\"#-当前支持的输入\"\u003e输入格式\u003c/a\u003e ·\n  \u003ca href=\"#-输出结果\"\u003e输出结果\u003c/a\u003e ·\n  \u003ca href=\"#-开发与发版\"\u003e开发\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## ✦ 为什么用 GPT2JSON\n\n很多账号交付流程里，真正需要的不是“把账号直接塞进某个后台”，而是先把可导入的 JSON 文件稳定生成出来，再由你检查、归档、导入。GPT2JSON 做的就是这一步：把账号文本转换为 **Sub2API JSON** 和 / 或 **CPA 单账号 JSON**。\n\n| 设计点 | 用户收益 |\n| --- | --- |\n| **协议优先** | 默认走 HTTP/OAuth 流程，尽量不依赖浏览器自动化，速度更快、资源占用更低。 |\n| **本地生成** | 只在本机处理账号文本与导出文件；不直接写入你的 Sub2API 管理后台。 |\n| **批次隔离** | 每次运行创建唯一结果目录，CPA 子目录也带唯一批次名，避免老文件被覆盖或误用。 |\n| **客户端事客户端毕** | 可恢复失败会先走单账号自动重试与自动重跑补救；批次结束后还可触发批次级自动补跑，用户不用靠手工翻日志兜底。 |\n| **中文桌面体验** | 粘贴、导入、导出、日志、失败报告都按中文使用习惯组织。 |\n| **可扩展输入** | 当前先适配 LDXP Plus7 三段式；后续 parser / OTP backend 可持续接入。 |\n\n```mermaid\nflowchart LR\n  A[\"粘贴 / 导入账号文本\"] --\u003e B[\"自动识别格式\"]\n  B --\u003e C[\"协议登录\"]\n  C --\u003e D{\"是否需要验证码\"}\n  D -- \"大多数账号\" --\u003e F[\"换取 JSON\"]\n  D -- \"少数跳验证\" --\u003e E[\"免登录取码源 / OTP backend\"]\n  E --\u003e F\n  F --\u003e G[\"Sub2API JSON\"]\n  F --\u003e H[\"CPA_\u003c批次\u003e/ 单账号 JSON\"]\n  G --\u003e I[\"打开本次结果目录\"]\n  H --\u003e I\n```\n\n## ✦ v0.1.7 更新重点\n\n| 类型 | 变化 |\n| --- | --- |\n| 安装体验 | 安装器可识别本机已有 GPT2JSON，自动切换为升级 / 修复模式并沿用原安装目录。 |\n| 账号级恢复 | 可恢复失败会先执行自动重试；仍未成功时进入单账号自动重跑补救。 |\n| 批次级自动补跑 | 批次结束后若生成 `failed_rerun.secret.txt`，客户端默认自动读取 1 次，只把可恢复失败账号作为新批次补跑；高级选项可关闭或调到最多 3 次。 |\n| 手动补跑入口 | GUI 仍保留“重跑失败账号”，批次级自动补跑后仍失败时可继续手动读取同一清单。 |\n| 升级保护 | 安装器升级前会关闭旧版 GPT2JSON；客户端也会阻止同一用户目录下重复打开多个窗口。 |\n| 终态收敛 | 账号停用、锁定、不存在、凭据无效等服务端明确终态不写入重跑清单，避免无意义消耗。 |\n| 文档与素材 | README、GUI 预览图、Hero 图和版本号同步到 v0.1.7。 |\n\n## ✦ 当前能力\n\n| 模块 | 状态 | 说明 |\n| --- | --- | --- |\n| 账号输入 | ✅ 已实现 | 支持粘贴多行，也支持导入 `.txt` 文件。 |\n| 自动识别 | ✅ 已实现 | 默认 `自动识别（推荐）`；未实现格式在界面中置灰展示。 |\n| 登录流程 | ✅ 已实现 | 账密优先；只有服务端要求时才进入验证码阶段。 |\n| 免登录取码 URL | ✅ 已实现 | 支持从 JSON / 文本 / HTML 中提取验证码或发现接口。 |\n| 并发与重试 | ✅ 已实现 | 默认自动并发；高级选项可调整并发、超时、自动重试和自动重跑补救。 |\n| Sub2API 导出 | ✅ 已实现 | 生成 `sub2api_accounts.secret.json` 总包。 |\n| CPA 导出 | ✅ 已实现 | 每个账号一个 JSON，统一放在唯一 `CPA_\u003c批次\u003e/` 文件夹，并生成 manifest。 |\n| 导出校验 | ✅ 已实现 | 导出完成后校验 Sub2API / CPA JSON 结构，日志标记“可导入”或“不建议导入”。 |\n| 输出追踪 | ✅ 已实现 | 默认输出到程序目录下的 `output/`；手动改过输出目录后会记住。`summary.json`、`results.safe.jsonl`、`failure_report.safe.json` 均为脱敏诊断信息。 |\n| 失败清单 | ✅ 已实现 | 仍可恢复的失败账号会写入 `failed_rerun.secret.txt`；批次级自动补跑默认 1 次，GUI “重跑失败账号”可继续手动补跑同一清单。 |\n| 取码源解析 | ✅ 持续增强 | 支持 JSON / 文本 / HTML API 取码；多验证码会优先选择最新验证码，并过滤登录前旧码。 |\n| 邮箱协议 backend | 🧭 规划中 | IMAP / IMAP XOAUTH2 / Graph / JMAP / POP3 / Provider API。 |\n\n\u003e GPT2JSON 只负责生成 JSON 文件，不直接导入 Sub2API 后台。这样更安全，也更适合批量交付前检查。\n\n## ✦ 界面预览\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs/assets/gui-zh-preview-dark.png\"\u003e\n    \u003cimg src=\"docs/assets/gui-zh-preview.png\" alt=\"GPT2JSON 中文桌面界面预览\" width=\"88%\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n界面重点放在四件事：**账号输入、导出格式、输出目录、过程日志**。日志会带账号序号和阶段提示，让用户知道当前卡在登录、取码、回调、写文件还是自动重试。\n\n## ✦ 快速开始\n\n### 方式 A：下载 Windows 发行包（推荐）\n\n1. 打开 [GitHub Releases](https://github.com/AyeSt0/gpt2json/releases/latest)。\n2. 普通用户下载 `GPT2JSON-Setup-v0.1.7.exe`。\n3. 免安装用户下载 `GPT2JSON-v0.1.7-windows-x64.zip`。\n4. 启动后粘贴账号文本，选择 `Sub2API JSON`、`CPA JSON` 或二者同时导出。\n5. 任务完成后点击“所在位置”，检查本次结果目录后再导入目标系统。\n\n### 方式 B：从源码运行\n\n```bash\ngit clone https://github.com/AyeSt0/gpt2json.git\ncd gpt2json\npython -m pip install -e .[gui]\ngpt2json-gui\n```\n\nCLI 也可直接批处理：\n\n```bash\ngpt2json --input accounts.txt --out-dir output --concurrency 0 --input-format auto\n```\n\n从标准输入读取：\n\n```bash\ncat accounts.txt | gpt2json --stdin --out-dir output --no-cpa\n```\n\n## ✦ 当前支持的输入\n\n当前版本优先适配 **LDXP Plus7** 的三段式账号格式：\n\n\u003e 格式来源：[`pay.ldxp.cn/shop/plus7`](https://pay.ldxp.cn/shop/plus7)\n\n```text\nGPT邮箱----GPT密码----OTP取码源\n```\n\n示例（合成数据）：\n\n```text\nuser@example.test----example-gpt-password----https://otp-service.test/latest?mail={email}\n```\n\n| 字段 | 含义 | 注意 |\n| --- | --- | --- |\n| `GPT邮箱` | GPT / OpenAI 登录邮箱 | 只作为 GPT 账号使用。 |\n| `GPT密码` | GPT / OpenAI 登录密码 | 不是邮箱密码。 |\n| `OTP取码源` | 免登录验证码 URL、取码邮箱或其它取码源 | 当前实现免登录 URL；其它类型会通过后续 backend 接入。 |\n\n后续新增格式时会明确区分：`GPT 密码`、`邮箱密码`、`邮箱 app-password`、`access token`、`refresh token`、`API key` 等字段，避免不同凭据语义混在一起。详细扩展说明见 [`docs/input-formats.md`](docs/input-formats.md)。\n\n## ✦ 输出结果\n\n桌面版默认会把结果放到程序所在目录下的 `output/`；如果你手动选择过其它输出目录，之后会记住该目录。每次运行都会在输出根目录下创建唯一批次目录：\n\n```text\noutput/\n└─ GPT2JSON_20260429_043512_a1b2c3/\n   ├─ CPA_20260429_043512_a1b2c3/\n   │  ├─ user01@example.test.json\n   │  └─ user02@example.test.json\n   ├─ cpa_manifest.json\n   ├─ failed_rerun.secret.txt        # 可选：仍有可恢复失败时生成\n   ├─ failure_report.safe.json\n   ├─ progress.json\n   ├─ results.safe.jsonl\n   ├─ sub2api_accounts.secret.json\n   └─ summary.json\n```\n\n| 文件 | 用途 |\n| --- | --- |\n| `sub2api_accounts.secret.json` | Sub2API 导入用总包。 |\n| `CPA_\u003c批次\u003e/\u003caccount-email\u003e.json` | CPA 单账号 token 文件；一个账号一个 JSON；目录名随批次唯一化，避免误覆盖。 |\n| `cpa_manifest.json` | CPA 文件夹索引，只记录 CPA 目录名、文件列表和脱敏元数据。 |\n| `failed_rerun.secret.txt` | 可恢复失败账号的原始行清单，仅在仍有可恢复失败时生成；包含敏感账号信息，供批次级自动补跑和 GUI “重跑失败账号”读取。 |\n| `failure_report.safe.json` | 失败诊断报告，不包含原始密码、token 或取码源明文。 |\n| `summary.json` | 本次统计；包含输出根目录、结果目录、批次 ID 和导出路径。 |\n| `results.safe.jsonl` | 脱敏过程记录，方便定位每个账号的阶段和最终状态。 |\n\n`summary.json` 中还会写入 `export_validation`：GUI 会把结果翻译成“导出校验：可导入 / 不建议导入”。如果出现“不建议导入”，请先查看 `summary.json` 中的问题列表，修正后重新导出。\n\n## ✦ 自动重试与失败诊断\n\nGPT2JSON 的目标是让客户端尽可能通过自动重试、自动重跑补救和批次级自动补跑处理可恢复问题：\n\n### 术语说明\n\n- **自动重试**：单账号常规 retry，用于同一次账号处理中的网络波动、验证码等待等短暂问题。\n- **自动重跑补救**：单账号额外补救 attempt；只有自动重试仍未成功、且失败仍属于可恢复失败时才会进入。\n- **批次级自动补跑**：批次结束后自动读取本批次 `failed_rerun.secret.txt`，只把可恢复失败账号作为新批次补跑；默认 1 次，高级选项可关闭或调到最多 3 次。\n- **重跑失败账号**：GUI 手动入口，读取同一份 `failed_rerun.secret.txt`；批次级自动补跑结束后仍可保留给用户手动触发。\n- **可恢复失败 / 终态失败**：前者适合继续补救，例如验证码旧码、OTP 超时、Callback 超时、HTTP 429/5xx；后者是账号停用、锁定、不存在、凭据无效等服务端明确结论。\n- **导出校验 / 可导入 / 不建议导入**：导出完成后检查 Sub2API / CPA JSON 结构；通过时显示“可导入”，发现结构问题时显示“不建议导入”。\n\n| 场景 | 处理方式 |\n| --- | --- |\n| 取码源慢、验证码旧码、OTP 超时 | 先走自动重试，再进入自动重跑补救。 |\n| Callback / OAuth 换 JSON 超时 | 视为可恢复失败，按配置继续自动重试；仍未成功时进入自动重跑补救，批次结束后可由批次级自动补跑接手。 |\n| HTTP 429 / 5xx / 临时网络错误 | 先自动重试；必要时进入自动重跑补救，批次结束后还可由批次级自动补跑接手，避免用户手动重跑整批。 |\n| 账号停用、锁定、不存在、凭据无效 | 归类为终态失败，不写入 `failed_rerun.secret.txt`，也不消耗批次级自动补跑次数。 |\n| 仍失败的账号 | 终态失败只写入 `failure_report.safe.json`；可恢复失败额外写入 `failed_rerun.secret.txt`，供批次级自动补跑和 GUI “重跑失败账号”读取。 |\n\n批次级自动补跑不会重新处理整批账号，只读取 `failed_rerun.secret.txt` 中的可恢复失败账号并创建新批次；默认 1 次，高级选项可关闭或调到最多 3 次。若批次级自动补跑后仍有可恢复失败，用户仍可通过 GUI “重跑失败账号”手动入口继续补跑同一份失败清单。\n\n取码源如果一次返回多个验证码，GPT2JSON 会优先按 `created_at` / `received_at` / `timestamp` 等时间字段选择最新验证码；没有时间字段时优先选择更靠后的验证码，避免误提交历史旧码。\n\n## ✦ Windows 发行包\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/installer-preview.png\" alt=\"GPT2JSON 深色安装器预览\" width=\"82%\"\u003e\n\u003c/p\u003e\n\n| 产物 | 适合场景 | 说明 |\n| --- | --- | --- |\n| `GPT2JSON-Setup-v0.1.7.exe` | 普通用户 | 定制安装界面 + 标准安装核心；安装到所选目录下的 `GPT2JSON` 子目录。 |\n| `GPT2JSON-v0.1.7-windows-x64.zip` | 便携 / 临时使用 | 解压后运行 `GPT2JSON.exe`，不需要安装。 |\n\n安装器会读取 Windows 标准卸载项：如果检测到本机已安装 GPT2JSON，会默认使用原安装目录，并切换为升级 / 修复模式。\n\n运行偏好保存到 `%LOCALAPPDATA%\\GPT2JSON\\settings.ini`。GUI 本身不写入业务注册表；安装器只创建 Windows 标准卸载项和快捷方式。需要完全免安装时，使用 ZIP 便携包即可。\n\n## ✦ 路线图\n\nGPT2JSON 的长期方向是 **backend-first**：优先沉到 IMAP / Graph / JMAP / POP3 / API 这类可复用协议层，而不是把能力写死在某个邮箱品牌名里。\n\n- [x] 协议优先 OAuth → JSON 导出\n- [x] 中文 GUI：粘贴 / 文件输入、深浅色主题、输出目录打开\n- [x] 自动并发、自动重试、自动重跑补救、批次级自动补跑、失败诊断报告\n- [x] 唯一批次输出目录与唯一 CPA 子目录，避免覆盖历史导出\n- [x] 可恢复失败账号手动补跑入口（GUI “重跑失败账号”）\n- [ ] IMAP / IMAP XOAUTH2 取码 backend\n- [ ] Graph / JMAP / POP3 backend\n- [ ] CSV / 表格列映射导入\n\n更完整的 backend 规划见 [`docs/mail-backends.md`](docs/mail-backends.md)。\n\n## ✦ 隐私与安全\n\n- 不要把真实账号、密码、token、cookie、导出 JSON、邮箱内容提交到 GitHub。\n- 日志、失败报告、manifest 默认只写脱敏信息。\n- `*.secret.json`、`*.secret.txt`、`output/`、本地构建产物已经加入 `.gitignore`。\n- 反馈问题请使用合成示例，或先完成脱敏。\n\n更多见 [`SECURITY.md`](SECURITY.md) 与 [`docs/privacy.md`](docs/privacy.md)。\n\n## ✦ 文档索引\n\n| 文档 | 内容 |\n| --- | --- |\n| [`docs/input-formats.md`](docs/input-formats.md) | 输入 parser 设计、字段语义和后续格式扩展约定。 |\n| [`docs/mail-backends.md`](docs/mail-backends.md) | IMAP / Graph / JMAP / POP3 / API 取码 backend 规划。 |\n| [`docs/troubleshooting.md`](docs/troubleshooting.md) | 常见失败、验证码超时、输出目录和注册表说明。 |\n| [`docs/privacy.md`](docs/privacy.md) | 本地保存、输出文件、日志脱敏和 GitHub 反馈注意事项。 |\n| [`docs/release.md`](docs/release.md) | 本地检查、Windows 打包、GitHub Release 流程。 |\n\n## ✦ 开发与发版\n\n```bash\npython -m pip install -e .[dev,gui,release]\npython -m ruff check gpt2json tests scripts\npython -m pytest -q\n```\n\n重新生成 README 视觉素材：\n\n```bash\npython scripts/generate_docs_assets.py\n```\n\n发版检查：\n\n```bash\npython scripts/check_release.py\n```\n\n完整流程见 [`docs/release.md`](docs/release.md)，贡献说明见 [`CONTRIBUTING.md`](CONTRIBUTING.md)。\n\n## ✦ 许可证\n\nMIT，详见 [`LICENSE`](LICENSE)。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fayest0%2Fgpt2json","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fayest0%2Fgpt2json","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fayest0%2Fgpt2json/lists"}