修复 Twikoo 评论系统 QQ 昵称获取

前言

最近青桔 API 调整为需要密钥校验的调用方式,用来防止接口被攻击或盗刷。受此影响,Twikoo 评论系统里通过 QQ 号自动获取昵称的功能会失效。

这篇文章记录一种适用于安知鱼主题的前端修复方案:把 Twikoo 的前端 JS 下载到本地,替换其中获取 QQ 昵称的接口逻辑,并填入自己的 API Key。整体操作比较简单,适合想快速恢复功能的朋友参考。

获取 API Key

  1. 前往 青桔 API 注册并登录。

  2. 进入后台获取密钥。

1782715598853.webp

  1. 打开你的博客,使用浏览器开发者工具,在 Network 面板中搜索 twikoo 关键词,找到 twikoo.all.min.js。随后切换到 Preview,复制完整的 JS 内容到编辑器中。

1782716042779.webp

  1. 搜索 getQQNick: function(e),将这个函数替换为新的实现。

替换前:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
getQQNick: function(e) {
var t = this
, n = "https://api.qjqq.cn/api/qqinfo?qq=".concat(e)
, r = new XMLHttpRequest;
r.onreadystatechange = function() {
if (4 === r.readyState && 200 === r.status) {
var e = JSON.parse(r.responseText);
t.metaData.nick = e.name,
t.updateMeta()
}
}
,
r.open("GET", n),
r.send()
},

替换后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
getQQNick: function(e) {
var t = this;
var n = "https://v1.nsuuu.com/api/qqname?key=&qq=".concat(e);
var r = new XMLHttpRequest();
r.onreadystatechange = function() {
if (4 === r.readyState && 200 === r.status) {
var response = JSON.parse(r.responseText);
// 检查接口返回状态码
if (response.code === 200) {
// 新接口的昵称字段在 response.data.nick
t.metaData.nick = response.data.nick;
t.updateMeta();
} else {
console.error("QQ 昵称查询失败:", response.msg);
t.metaData.nick = "用户" + e;
t.updateMeta();
}
} else if (4 === r.readyState) {
console.error("QQ 昵称查询网络错误:", r.status);
t.metaData.nick = "用户" + e;
t.updateMeta();
}
};
r.onerror = function() {
console.error("QQ 昵称查询请求失败");
t.metaData.nick = "用户" + e;
t.updateMeta();
};
r.open("GET", n);
r.send();
},

替换完成后,找到这一行:

1
var n = "https://v1.nsuuu.com/api/qqname?key=&qq=".concat(e);

把你的密钥填到 key= 后面,例如:

1
var n = "https://v1.nsuuu.com/api/qqname?key=你的密钥&qq=".concat(e);

替换 JS

  1. 将修改后的 JS 文件命名为 twikoo.all.min.js,并保存到博客目录:
1
/博客根目录/source/js/twikoo.all.min.js
  1. 修改 _config.anzhiyu.yml,将 Twikoo 配置切换为本地 JS 文件。

1782717472137.webp

配置完成后,重新生成并启动博客,QQ 昵称自动获取功能就可以恢复了。