Skip to content

Latest commit

 

History

History
137 lines (80 loc) · 4.83 KB

readme.md

File metadata and controls

137 lines (80 loc) · 4.83 KB

使用约束

自己的 QQ 与目标 QQ 是好友关系。

Golang 能够抓取的相册一定是对方允许访问的相册,超越权限的事情是无法做到的。

Go 版本的使用方法

20190714 更新

方案依旧可用

20190208 更新

上一个老办法是 Python 版本,是一个整体解决方案。

Python 负责登录 Qzone,Python负责获取照片 URI, Python负责启动多线程下载照片。

在步骤Python登录Qzone中,因为腾讯产品政策的变更,导致Python第三方库 qqlib 无法成功登录Qzone,所以解决方案失效了。

在这次的办法中,将这三个步骤拆分,每个步骤交给最擅长的工具去完成。

文件放在 /goqzone 目录。

第一步骤,使用Chrome(或其他浏览器,需要自己去适配)登录 Qzone,此时浏览器记录了Qzone登录需要的 Cookies

第二步骤,使用Go语言编写的程序,借助上一步骤 Chrome 的Cookies,

获取所有相册(也可以自行修改程序增加过滤需求)中所有照片的 URI ,组装为 aria2 格式。

第三步骤,使用 aria2 下载照片,下载使用的配置文件是上一步骤的。

有工具 http://aria2c.com/ 查看下载进度和实时下载速度。

步骤详解

登录

使用Chrome登录Qzone就是我们的常规使用方式。

如果你使用的是其他浏览器,那么你需要自己适配程序代码中读取浏览器 Cookies 部分。

取照片 URI

获取照片程序编译命令

直接运行

go build -v

运行命令为

./main -self <你的QQ> -target <目标QQ>

运行时需要读取 Chrome Cookies 文件,需要一定权限。在MacOS 表现为弹窗需要输入笔记本密码。

获取照片程序运行后,生成两个给Aria2使用的文件

$ tree
.
├── aria2.conf
├── qzone.aria2.session

同时也会给出你要继续运行的命令,直接拷贝运行即可,比如

aria2c --conf-path=/xxx/git_src/qzone_photo/goqzone/src/aria2.conf

获取照片URI可能遇到以下错误:

got err= 对不起,您尚未登录或者登录超时。”,说明你的浏览器Cookies登录过期了。

需要刷新在浏览器中的登录,然后重新运行程序获取照片。

各平台(Windows, Linux, MacOS) 的Chrome Cookies 路径可能不相同,还缺乏适配工作。

目前支持 MacOS Chrome。

Arai2 下载

aria2 是下载工具中的佼佼者,我们这次也要借助这个工具完成照片的下载。

在实现中,我曾借助 Golang 中便利的并发便利条件,使用 Golang 原生HTTP下载照片,下载效果很不理想。

难以应付死链,下载慢。

aria2 支持我们照片下载中最需要的断点续传需求,同时还支持同一个文件的并发下载。

下载是一个耗时任务,我们可能因为网速不理想下载慢,或者需要断网一段时间后重新恢复下载,因此 aria2 是我们的理想工具。

我曾试图寻找一个 libarai2 的 Golang 绑定(bindings),来解决多步骤间的衔接问题,但是不理想。

目前的解决方案还是人工手动启动 arai2 下载,人工来辨识下载任务的完成来终结 aria2 的运行。

下载中避免不了死链,有的照片URI就是无法下载了,通过浏览器访问该地址都是超时的,

你可以在 qzone.aria2.session 文件中搜索URI,找到该照片的原图URI和正常图片URI,来做进一步处理。

下载文件命名格式为 <相册名字>_<照片名字>_<照片在相册中的索引>.png

aria2.conf 文件中 load-cookies= 这一行是使用的浏览器 Cookies 路径,与上面使用的方式一致。

考虑到 Aria2 下载耗时久,如果遇到 Cookies 失效,可以自己重新在 Chrome 中登录一次,然后重新运行下载,

即可断点续传,或者更高级的,更换了 Cookies 读取路径也是可以的。


Python 版本的使用方法

  • 向脚本填写自己的 QQ 账号,填写 1 个或 多个他人 QQ 号码,批量下载对方所有相册。

  • 运行脚本所需的模块都在脚本头部注明。

  • 此脚本学习了保存在 GitHub 中多个作者的相册获取方法,成功用此脚本成功获取到指定人的所有相册原图。

  • 这种 hack 的方式获取 Qzone 文件是存在有效期的。

    • update 2018.01.07 失效

      失败位置 qqlib 登陆失败,返回错误 "提交参数错误,请检查"

      qqlib 相关 issue gera2ld/qqlib#23

      猜测原因是 API 有所调整,相关新闻 永别了塞班,已无法登录QQ和微信

    • update 2017.05.09 有效

    • update 2017.05.01 有效

    • update 2017.02.20 有效

  • 如果遇到无效的,可能是 Qzone API 发生变化,则需要更改代码重新测试。