技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

项目背景与痛点

在当前社交媒体泛滥的年代,QQ 空间仍然是很多用户存储个人照片和视频的重要场所。然而,随着互联网和设备更新换代的速度加快,照片和视频丢失的风险并不小。“qinjintian/qq-zone” 项目解决了这一痛点,通过手机扫码登录,用户可以一键备份自己的 QQ 空间照片和视频到本地,保障数据的安全性。这个项目的存在,填补了用户对零散社交数据进行系统备份的空白,大大减少了数据丢失给用户带来的情感和经济损失。

核心技术揭秘

项目 “qinjintian/qq-zone” 的架构设计与实现细节非常仔细,其中包括扫码登录、数据获取和本地存储等关键步骤。核心技术栈包括但不限于 Python 语言进行网络爬虫的开发以及 JSON 格式的数据处理等。此外,项目采用了 SMTB 协议将 QQ 空间的 URL 转化为可识别的本地文件路径。

graph TD A[用户扫码登录] --> B[调用爬虫获取数据] B --> C{"数据类型?"} C -->|"图片"| D[保存图片到本地] C -->|"视频"| E[下载视频到本地] C -->|"其他"| F[跳过处理]

从这个简明的数据流图中可以看到,扫码登录成功后,爬虫会拉取用户存储在 QQ 空间的图片和视频数据,经过类型判断后,将图片保存至本地指定路径,视频则转由下载模块进行单独下载处理。这种模块化的设计思路具有扩展性和灵活性,也为今后开发者的迭代优化留足了空间。

功能亮点与差异

相较于其他的备份应用,“qinjintian/qq-zone” 的独特之处在于它支持原图、视频以及实况图的备份,并可以在单独配置文件中定制化备份的路径。此外,扫码登录机制也让这个备份过程极为简便,只需几秒钟就可以完成用户身份验证和相关权限开放,极大提升了用户体验。

不同于市面上其它的产品完全依赖于浏览器插件或者复杂的介面设定,本项目依赖简洁的交互设计与直观的操作流程。所以,这也是一个非常吸引人的功能点,对于习惯利用手机扫码操作的用户而言非常方便。

应用场景与落地建议

该项目非常适合有保存社交数据备份需求的用户。在生产环境中使用时,建议关注备份规模。基础网络环境尤为关键,不稳定的网络环境可能会影响到数据下载的效率与完整性。在一个高效稳定的网络环境下,该系统可以达到良好的使用体验。

生产环境中还须留意权限问题,例如 API 接口的访问题限制或权限使用户丧失某些功能。解法是开发者对 API 进行额外筛选与适配,不断优化和完善。

综合评价

“qinjintian/qq-zone” 项目用扎实的技术实现力提供了一个简洁而高效的数据备份方案。但从实现细节上,仍存在一定实现和扩展上的不足。例如支持的类型相对有限,较多其他媒体数据类型还需纳入支持。其优点在于其功能简洁,易于使用,且实现在节点清晰的模块化结构上。虽然在使用中可能会遇到二维码生成与时效性的问题,但这些亦可以通过后续项目迭代解决。总的说来,该项目在简化 QQ 空间数据备份流程,规避数据丢失方面表现优异。

README

QQ 空间备份(相册原图 / 原视频 / 群相册 / 说说 / 留言板 / 个人中心动态)

扫码登录,一键备份到本地。 个人相册和群相册下原图和原视频;说说和留言板连同配图一起保存,并生成可双击打开的网页。

Release Go License Platform

终端扫码登录后备份相册、群相册、说说或留言板

💡 不会写代码也能用

不要点右上角绿色 Code 按钮下载源码。 请到 Release 下载已经打包好的程序,双击即可运行:

👉 下载最新版

系统 下载文件
Windows qq-zone-win.exe
macOS(Apple 芯片) qq-zone-macos-m-series
macOS(Intel) qq-zone-macos-intel
Linux qq-zone-linux

不确定是哪款 Mac:左上角苹果菜单 →「关于本机」,芯片写着 Apple 就选 M 系列。Windows 若提示「已保护你的电脑」,点「更多信息」→「仍要运行」即可。


🌟 简介

QQ 空间里堆着很多人的照片、视频、说说和留言,群里也常有多年聚会和班级照片。手动保存又慢,相册还经常变成压缩图,说说和留言板更是只能在网页里翻。本工具用 Go 重写:相册支持 原图 / 原视频 / 实况图 并 保留拍摄信息(EXIF);群相册同样下原图,按群分开放;说说会连同配图、视频、评论、点赞和浏览数一起拉下来;留言板会保存留言、回复、配图和主人寄语。说说和留言板都会生成一份 可双击打开的本地时间线网页。自己的空间、好友对你开放的空间,以及你所在群的相册都可以备份,手机 QQ 扫码登录 即可。

✨ 核心特性

  • 📸 原图 + EXIF,不是压缩预览:按相册原始分辨率下载,拍摄信息跟着走,备份下来才是自己的底片。
  • 📂 群相册也能下原图:班级照、聚会相册先选群再勾相册,原图和视频按群分开放;名单不全时可以手输群号。
  • 💬 说说备份成本地网页:正文、配图、视频、语音、转发、评论、点赞人和浏览次数一并保存;生成 index.html,双击就能按时间线翻看,不用对着 JSON 发愁。
  • 💌 留言板同样能备份:留言、回复、配图和主人寄语一起保存;私密留言只留占位,不会把看不到的正文写进本地。
  • 🎬 能播就能下,地址失效自动换源:相册视频、实况图一并收下;点下载失败时会改走播放地址再试,尽量把文件救回来。
  • 📱 扫码即用:终端直接出二维码,手机 QQ 一扫就登录;账号会记住,换号也不用重新折腾。
  • 👥 自己的、好友的、群里的,勾了就下:已有文件自动跳过,隔几个月再跑一遍只补新的。
  • 🔁 失败能重试,中断能续上:半截文件接着下,下坏了重来;历史任务里还能把失败项单独再跑一次。
  • ⏱️ 导入手机后,时间线还是当年:相册文件时间写成拍摄时间;也可按年/月归档,并导出相册元数据。
  • 🔍 先看清谁对我开放:列出能访问的好友空间和公开相册,再决定备份谁。
  • 🛡️ 限流会等着,Ctrl+C 停得住:被减速时自动等待,进度条看得到速度;中途退出尽量不把文件写坏。

说说 / 留言板查看页还能做什么

备份完成后生成 index.html,双击用浏览器打开即可,不必再开本程序。

  • 按年份跳转,搜索正文 / 评论(留言板为回复)
  • 说说可筛选有图或有视频;留言板可筛选有图或私密
  • 点开配图,播放视频和语音,展开全部评论或回复
  • 评论者、回复者和点赞人优先显示你通讯录里的好友备注
  • 留言板会置顶主人寄语;私密留言显示占位文案,不泄露正文
  • 可切换深色模式;空间表情小图需要联网,照片和正文不用

🚀 快速开始

方式一:直接运行(推荐)

下载文件见上方表格,或打开 Releases 选对应系统。到这里就可以运行了,下面是给要自己编译的人看的。

方式二:源码编译

  1. 克隆仓库
    git clone https://github.com/qinjintian/qq-zone.git
    cd qq-zone
    
  2. 编译项目
    • 全平台交叉编译(推荐):
      ./scripts/build.ps1    # Windows
      
      chmod +x scripts/build.sh   # 首次需要,赋予脚本可执行权限
      ./scripts/build.sh          # Linux / macOS
      
      编译产物会生成到本地 bin/ 目录。
    • 仅编译当前平台:
      go build -o bin/qq-zone ./cmd/qq-zone
      
  3. 启动程序
    ./bin/qq-zone-win.exe      # Windows (amd64)
    ./bin/qq-zone-linux        # Linux (amd64)
    ./bin/qq-zone-macos-intel  # macOS (Intel)
    ./bin/qq-zone-macos-m-series # macOS (Apple Silicon)
    

📖 使用指南

  1. 启动程序:双击 Release 里的可执行文件,或运行自己编译出的程序。先进入主菜单,选到需要登录的功能时再提示你登录。
  2. 登录:第一次会在终端画出二维码(同时生成 qrcode.png),用手机 QQ 扫一下即可。以前登录过会先列出历史账号,选一个就能继续,不用反复扫码。
  3. 选功能:方向键 ↑ ↓ 移动,Enter 确认。
    • 下载自己的相册:备份当前账号的照片和视频。
    • 下载群相册:先选群,再勾选该群相册。也可以手输群号。
    • 备份自己的说说:下载说说、配图、视频和评论,并生成本地时间线网页。
    • 备份自己的留言板:下载留言、回复、配图和主人寄语,并生成本地查看页。
    • 备份个人中心动态:先保存个人中心最新 5 页好友动态(头像、备注、正文、图片视频、时间、赞和评论),写好查看页后再问要不要继续往前翻。
    • 下载好友的相册:输入好友 QQ,备份其公开或对你开放的相册。
    • 备份好友的说说:备份好友空间里对你可见的说说。
    • 备份好友的留言板:备份好友空间里对你可见的留言。
    • 查看说说备份 / 查看留言板备份 / 查看动态备份:用浏览器打开已经生成的 index.html,不必重新登录。
    • 重试上次失败项:从历史任务里挑一次记录,只补还没成功的文件。
    • 查看对我开放的好友:看哪些好友空间你能进、有哪些公开相册。
    • 切换账号 / 重新登录:换一个已保存的号,或再扫一次码。
  4. 配一下任务:并发填 auto 即可;建议打开增量下载(跳过已有文件)。相册还可按年/月整理、导出元数据。说说和留言板可以选是否额外保存原始接口 JSON,以及结束后是否打开查看页。
  5. 勾选相册:空格勾选,也可点「全选」;直接回车则备份全部。Enter 开始下载。群相册会先选群,再勾选相册。说说和留言板没有相册勾选,确认选项后即开始拉取。
  6. 看结果:下完会出任务报告。
    • 照片和视频在 storage/qzone/<QQ号>/album/
    • 群相册在 storage/qzone/<QQ号>/qun/<群号>/
    • 说说查看页在 storage/qzone/<QQ号>/shuoshuo/index.html,可直接双击打开
    • 留言板查看页在 storage/qzone/<QQ号>/liuyanban/index.html,可直接双击打开
    • 个人中心动态查看页在 storage/qzone/<QQ号>/dongtai/index.html,可直接双击打开
    • 任务记录在 storage/tasks/ 中途想停按一次 Ctrl+C,等当前文件收尾即可。

文件都写在程序所在目录的 storage/ 下:

storage/
├── config.json                  # 并发、增量等偏好
├── tasks/                       # 任务记录,失败重试会用到
└── qzone/<QQ号>/
    ├── album/<相册名>/          # 照片、视频;可选年/月子目录
    ├── qun/<群号>/<相册名>/     # 群相册照片、视频
    ├── shuoshuo/
    │   ├── index.html           # 双击打开说说查看页
    │   ├── assets/              # 查看页样式和脚本
    │   ├── avatars/             # 头像
    │   ├── media/               # 说说配图、视频、语音
    │   ├── data/                # backup.json 和按年拆开的页面数据
    │   └── raw/                 # 可选:接口原始 JSON
    ├── liuyanban/
        ├── index.html           # 双击打开留言板查看页
        ├── assets/
        ├── avatars/
        ├── media/               # 留言和回复里的配图
        ├── data/
        └── raw/                 # 可选:接口原始 JSON
    └── dongtai/
        ├── index.html           # 双击打开个人中心动态
        ├── assets/
        ├── avatars/             # 好友头像
        ├── media/               # 动态配图和视频
        ├── data/
        └── raw/                 # 可选:接口原始 JSON

❓ 常见问题

下下来的是原图,还是空间里看到的压缩图?
按相册原始分辨率下载,并尽量保留拍摄信息(EXIF)。不是页面上的预览图。

一定要黄钻才能下原图吗?
以 QQ 空间实际开放的权限为准。空间对你可见的原图/视频,工具就会去下;没有权限的相册会被跳过。

视频或实况图失败怎么办?
下载地址失效时会自动换一条再试。仍失败的文件会记进任务记录,可在菜单里选「重试上次失败项」。

好友相册、说说或留言板为什么是空的?
对方没对你开放,或内容是私密的。可先用「查看对我开放的好友」确认哪些空间能进。访客看不见的说说会被跳过;留言板若无权访问,会在查看页顶部提示,不会覆盖你本地已有的备份。

群列表里没有我想要的群,或提示无权访问?
前面扫码只登录了空间,列不出你加入的全部群。选「查看我加入的全部群」会再扫一次,专门授权看群名单,不是重新登录。知道群号也可以直接手输。若已经选对群仍提示无权访问,多半是已退群,或该相册未对你开放。

群相册保存在哪?
每个群一个文件夹:storage/qzone/<QQ号>/qun/<群号>/<相册名>/。和个人相册一样支持增量、按年/月整理和失败重试。

中途按 Ctrl+C 会把文件下坏吗?
按一次后会等当前文件收尾再退出,尽量不留下半截文件。未完成的可以下次增量续传或失败重试。

说说备份下来怎么看?
备份完成后会生成 storage/qzone/<QQ号>/shuoshuo/index.html。直接双击用浏览器打开即可,支持按年份跳转、搜索正文和评论、点开配图。不需要再开本程序,也不需要联网(空间表情小图除外)。菜单里也可以选「查看说说备份」。

留言板备份下来怎么看?
备份完成后会生成 storage/qzone/<QQ号>/liuyanban/index.html。同样双击打开,可按年份浏览、搜索留言和回复、筛选有图或私密。主人寄语会显示在顶部。私密留言只保存占位说明,看不到的正文不会写进本地。

浏览数、点赞怎么和空间网页对上?
说说列表本身不含赞和浏览,工具会另外去拉,再写进查看页。旧备份若缺这两项,再跑一次增量备份即可补上(已下载的配图仍会跳过)。点赞人特别多时,名单只保留比较前面的一批(大约 60 人),总人数仍显示「共 N 人觉得很赞」。

更早的说说为什么没有?
空间有时会把很久以前的说说封存,或对访客不可见。工具会把已经能拉到的部分存下来,并在查看页顶部提示。开通相关权限后可再跑一次增量备份。

登录会不会把账号密码交给别人?
不会。在你自己电脑上扫码,和网页版 QQ 空间同一套登录。登录信息和备份都只写在本机 storage/ 里,不会上传到别处。

这是腾讯官方工具吗?
不是。这是个人开源项目,未与腾讯关联。请只备份你有权访问的内容。遇到问题欢迎到 Issues 反馈。

个人中心动态为什么不是一次下完?
浏览器上打开个人中心,往下拉会继续加载更早的动态,条数很多。程序默认先保存最新 5 页(大约 50 条),写好 index.html 后再问要不要继续。选「再下载 5 页」或「一直往前下载」即可。已经备份过的会跳过,下次会从更早的位置接着收。这里只有网页上还能加载出来的动态,不是每一位好友的完整历史。

文件保存在哪?
相册:storage/qzone/<QQ号>/album/。群相册:storage/qzone/<QQ号>/qun/<群号>/。说说:storage/qzone/<QQ号>/shuoshuo/。留言板:storage/qzone/<QQ号>/liuyanban/。个人中心动态:storage/qzone/<QQ号>/dongtai/(其中 index.html 是查看页)。任务记录在 storage/tasks/。


🛠️ 技术栈

日常使用可以跳过。想改代码时:登录和空间协议在 internal/qzone,相册/群相册/说说/留言板备份在 internal/app,下载在 internal/net,终端菜单在 internal/cli。

类别 选用方案
核心语言 Go 1.25+(以仓库 go.mod 为准)
依赖注入 uber-go/fx
进度渲染 vbauerster/mpb/v8
HTTP 客户端 go-resty/resty/v2
交互式菜单 survey/v2
频率限制 golang.org/x/time/rate
表格渲染 olekukonko/tablewriter
日志系统 uber-go/zap
并发控制 golang.org/x/sync/errgroup
JSON 解析 gjson

📁 项目结构

.
├── .github/            # GitHub Actions 自动化构建与发布流水线
├── bin/                # 编译产物(不入库,可执行文件请前往 Releases 下载)
├── cmd/                # 程序入口
│   └── qq-zone/        # 主程序入口
├── docs/               # 项目文档与演示资料
├── internal/           # 私有业务逻辑
│   ├── app/            # 核心引擎(相册/群相册下载 + 说说/留言板备份)
│   │   └── viewer/     # 离线时间线页面(HTML/CSS/JS,说说与留言板共用)
│   ├── cli/            # 终端交互界面
│   ├── net/            # 网络请求封装
│   ├── pkg/            # 公共工具包 (Logger, Util)
│   └── qzone/          # QQ 空间协议实现
├── scripts/            # 跨平台编译脚本(支持 Windows 下构建全平台二进制程序)
├── storage/            # 数据存储(日志、相册、群相册、说说、留言板、任务记录、配置)
└── go.mod              # 依赖管理

发版时推送 v* 标签会走 GitHub Actions,编译 Windows / Linux / macOS 四个文件并挂到 Release。


🤝 贡献与反馈

如果这个项目对你有帮助,欢迎点一个 ⭐ Star。


Made with ❤️ by qinjintian

评论

暂无评论