第一步 申请Personal Access Token

从 Github 的 Personal access tokens 页面,点击 Generate new token

第二步 安装项目依赖

npm i request xml-parser blueimp-md5 moment hexo-generator-sitemap -S

项目根目录配置文件 _config.yml 添加配置

1
2
3
4
5
6
7
8
# ...
# hexo sitemap网站地图
sitemap:
path: sitemap.xml
# 此配置跟后面新建的文件名相同
template: ./sitemap_template.xml
# ...

第三步 项目根目录下新建 comment.js

comment.js
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env node
const request = require("request");
const fs = require("fs");
const path = require("path");
const url = require("url");
const xmlParser = require("xml-parser");
const YAML = require("yamljs");
const cheerio = require("cheerio");
const md5 = require("md5");
// 根据自己的情况进行配置
const config = {
username: "用户名", // GitHub 用户名
token: "Token", // GitHub Token
repo: "issues的git仓库", // 存放 issues的git仓库
// sitemap.xml的路径,commit.js放置在根目录下,无需修改,其他情况自行处理
sitemapUrl: path.resolve(__dirname, "./public/sitemap.xml"),
kind: "Gitalk", // "Gitalk" or "Gitment",
baseUrl: "https://blog.lingma.top/"
};
let issuesUrl = `https://api.github.com/repos/${config.username}/${config.repo}/issues?access_token=${config.token}`;

let requestGetOpt = {
url: `${issuesUrl}&page=1&per_page=1000`,
json: true,
headers: {
"User-Agent": "github-user",
"Authorization":"token 你的token"
}
};
let requestPostOpt = {
...requestGetOpt,
url:issuesUrl,
method: "POST",
form: ""
};

console.log("开始初始化评论...");

(async function() {
console.log("开始检索链接,请稍等...");

try {
let websiteConfig = YAML.parse(fs.readFileSync(path.resolve(__dirname, "./_config.yml"), "utf8"));

let urls = sitemapXmlReader(config.sitemapUrl);


console.log(`共检索到${urls.length}个链接`);

console.log("开始获取已经初始化的issues:"+`${requestGetOpt.url}` );
let issues = await send(requestGetOpt);
// console.log(issues)
console.log(`已经存在${issues.length}个issues`);

let notInitIssueLinks = urls.filter((link) => {
return !issues.find((item) => {

link = removeProtocol(link);
console.log("link",link)
return !!item.body? item.body.includes(link):false;
});
});


if (notInitIssueLinks.length > 0) {
console.log(`本次有${notInitIssueLinks.length}个链接需要初始化issue:`);
// console.log(notInitIssueLinks);
console.log("开始提交初始化请求, 大约需要40秒...");
/**
* 部署好网站后,直接执行start,新增文章并不会生成评论
* 经测试,最少需要等待40秒,才可以正确生成, 怀疑跟github的api有关系,没有找到实锤
*/
setTimeout(async ()=>{
let initRet = await notInitIssueLinks.map(async (item) => {
let html = await send({ ...requestGetOpt, url: item });
let title = cheerio.load(html)("title").text();
let pathLabel = md5( url.parse(item).path);
console.log("MD5",url,url.parse(item).path,pathLabel)
let body = `${item}<br><br>${websiteConfig.description}`;
let form = JSON.stringify({ body, labels: [config.kind, pathLabel], title });
return send({ ...requestPostOpt, form });
});
console.log(`已完成${initRet.length}个!`);
console.log("可以愉快的发表评论了!");
},40000);
} else {
console.log("本次发布无新增页面,无需初始化issue!!");
}
} catch (e) {
console.log(`初始化issue出错,错误如下:`);
console.log(e);
} finally {

}
})();

function sitemapXmlReader(file) {
let data = fs.readFileSync(file, "utf8");
let sitemap = xmlParser(data);
return sitemap.root.children.map(function (url) {
let loc = url.children.filter(function (item) {
return item.name === "loc";
})[0];
return loc.content;
});
}

function removeProtocol(url) {
return url.substr(url.indexOf(":"));
}

function send(options) {
return new Promise(function (resolve, reject) {
request(options, function (error, response, body) {
if (!error) {
resolve(body);
} else {
reject(error);
}
});
});
}

第四步: 测试

执行 node ./comment.js

第五步: 自动化

修改 package.json

1
2
3
4
5
6
7
8
...
"scripts": {
"b": "npm run c && hexo generate && node comment.js",
"c": "hexo clean",
"d": "npm run b && hexo d ",
"s": "npm run b && hexo s"
},
...

运行 npm run d 或者 npm run s

本文参考: https://blog.jijian.link/2020-01-10/hexo-gitalk-auto-init/

最新文章

  1. PackageManager源码分析
  2. 后缀树(BZOJ3238TLE)
  3. JBoss远程方法调用漏洞利用详解
  4. Window[&quot;aaa&quot;]这个在JS里是什么意思?
  5. uva624 CD   01背包+输出最优解
  6. Struts2学习笔记(二) 使用通配符动态调用方法
  7. backbonejs mvc框架
  8. Delphi关键词
  9. 我也谈“the difference between Factory, Service, and Provider in Angular”
  10. SQL知识目录
  11. Spring Boot jar包linux服务器部署
  12. Loadrunner录制https脚本
  13. WebFrom 【文件上传】
  14. TeamViewer 的早期版本下载
  15. Oracle整形转字符串to_char()
  16. AngularJs - Javascript MVC 框架
  17. centos7永久更改主机名
  18. MTK 永不熄屏
  19. 顺序结构,判断结构 if,switch
  20. [LeetCode] 258. Add Digits_Easy tag: Math

热门文章

  1. Traefik 2.0 实现自动化 HTTPS
  2. 阿里云下配置keepalive,利用HAVIP实现HA
  3. 连接FastDFS出现超时问题的解决办法
  4. CentOS 7.7系统安装Redis 6.0.3
  5. switch分支
  6. day44-反射03
  7. SpringBoot的starter到底是什么?
  8. win10 python 环境搭建
  9. uni-app 如何优雅的使用权限认证并对本地文件上下起手
  10. .NET周报【10月第1期 2022-10-11】