Saber 酱的抱枕

Fly me to the moon

04/1
2024
软件

怎样批量导出自己的 QQ 好友列表/QQ 号码

我想导出某个分组里的所有人的 QQ 号码保存起来,在搜索引擎的结果里大都是说用 QQ 邮箱来导出的,我试了现在这个方法已经不行了。还好我找到了个可用的方法,安装这个用户脚本:

https://greasyfork.org/zh-CN/scripts/406982 ([雪喵空友列] QQ 空间一键获取自己的好友列表)

然后登录自己的 QQ 空间(https://user.qzone.qq.com/), 在顶部会看到这个脚本显示的按钮,提供了多种文件格式的导出,点击你想要的格式就可以保存所有的 QQ 好友列表了。

怎样批量导出自己的 QQ 好友列表/QQ 号码

它导出的是所有好友,如果只需要某个分组,可以在导出后自行编辑一下。

例如我只想看“我的好友”分组里的人,可以导出 CSV 格式,用 Excel 打开:

怎样批量导出自己的 QQ 好友列表/QQ 号码

可以看到导出了每个好友的四项数据:Q 号、分组、昵称、备注。

使用“筛选”功能:

怎样批量导出自己的 QQ 好友列表/QQ 号码

之后每列顶部会出现下拉框,显示了所有分组的名称。只勾选“我的好友”然后确定:

怎样批量导出自己的 QQ 好友列表/QQ 号码

现在显示的都是“我的好友”了,此时选择 Q 号一列复制即可。

怎样批量导出自己的 QQ 好友列表/QQ 号码

返回的 QQ 号是按从小到大排列的,所以第一个 QQ 号就是最短的,我有一个好友是 6 位数的。


那么这个脚本是如何实现这个功能的呢?其实它是在 QQ 空间里发了一个请求:

怎样批量导出自己的 QQ 好友列表/QQ 号码

最后两项是 token 和我的 QQ 号码,我打码了。这个请求会返回所有的分组和所有好友的数据。

如果选择导出 JSON 格式,这个脚本就会保存响应数据,里面的 data 属性是核心内容:

怎样批量导出自己的 QQ 好友列表/QQ 号码

它分为两部分(红框),第一部分 gpnames 是每个分组的 id 和名称,第二部分 items 就是所有 QQ 好友的数据了。

如果想从 JSON 里提取某个分组里的好友号码,看绿框的顺序:

  1. 找到这个分组的 gpid
  2. 遍历 items,找到 groupid 等于分组 gpid 的项,这说明这个好友属于这个分组
  3. 保存 uin,也就是 QQ 号码。

可以写个代码提取:

const json = {} // 把导出的 JSON 内容保存到该变量
const list = []
json.data.items.forEach(item => {
  item.groupid === 9 && list.push(item.uin)
})
console.log(list.join('\n'))

我发现导出的数据里有一项“认证空间”,但是 QQ 客户端里是没有这个分组的,在好友里也搜不到这些 QQ 号。

怎样批量导出自己的 QQ 好友列表/QQ 号码

认证空间其实就是经过认证的 QQ 空间,或许在过去它曾经想模仿微博,但是在很多年前就彻底凉了。可以在 QQ 空间网址后面加上他们的号码打开对应空间,例如:

杨幂:https://user.qzone.qq.com/1696127668

其他的大多变成了提示违规或空间未开通。

我看了只剩下一个能打开的,但他发的说说全是淘宝链接,2014 年就停更了,没意思。


导出 QQ 群成员的号码

再补充个导出 QQ 群成员列表的方法,这个在腾讯官方的群管理页面即可实现:

https://qun.qq.com/member.html#gid=群号

将末尾的“群号”替换为真正的群号,就可以打开管理列表了(可能需要你有管理员权限):

默认只加载前 20 个,我们向下滚动直至加载全部成员,然后在控制台执行下面的代码,即可输出全部成员的 QQ 号码:

const list = []
const allTR = document.querySelectorAll('tr.mb')
allTR.forEach(tr => {
  list.push(tr.classList[1].replace('mb', ''))
})
console.log(list.join('\n'))

怎样批量导出自己的 QQ 好友列表/QQ 号码