首页 / GIT / Gitalk 自动初始化评论
Gitalk 自动初始化评论
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Gitalk 自动初始化评论,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3734字,纯文字阅读大概需要6分钟。
内容图文
![Gitalk 自动初始化评论](/upload/InfoBanner/zyjiaocheng/983/3937f69756464ddcb069b750af55fdf9.jpg)
博主在用 Hexo 搭建博客的时候,一直在考虑评论系统用什么,最终比较了多家,决定用 Gitalk,这是一个基于 Github Issues 的评论系统,所有的评论内容都保存在 Github Issues 中,每篇博客对应一个 Issues。只有登陆 Github 账号才能评论,大多数人应该都会有 github 账号吧,毕竟全球最大同性交友平台~ 但是 Gitalk 有个问题,就是每篇博客都要手动初始化评论区,若博客是从别的地方迁移过来的,数量巨大的话,手动初始化就会非常的不方便,这样就需要自动化这个操作了,比较好的方法就是写脚本来实现。博主网上搜了很多个帖子,很多的代码在博主这都没法正常运行,最后终于找到了一个可用的,参见这篇博客 ( http://edisonxu.com/2018/10/31/gitalk-auto-init.html ),这里需要在自己的 Github 新建一个专门放评论的仓库,并且申请 personal access token,以用来调用 Github 的 API 来创建 issues。另外还要在自己的博客上配置 sitemap(具体方法可以自行 google)。另外还需要注意的是,假如 hexo 上的博客路径是自定义的话,注意修改代码中的 label
变量,帖子中的代码是把 label 进行 md5 加密的,说是怕标题太长,gitalk 没法正常显示。这里博主进行了修改,没用 md5,而是根据博主自定义的博文路径进行了修改,修改后的代码如下:
var request = require('request');
var Sitemapper = require('sitemapper');
var cheerio = require('cheerio');
var crypto = require('crypto');
const { finished } = require('stream');
// 配置信息
const username = "<YourUsername>" //github账号,对应Gitalk配置中的owner
const repo_name = "<YourRepo>" //用于存储Issue的仓库名,对应Gitalk配置中的repo
const token = "<YourToken>" //前面申请的personal access token
const sitemap_url = "http://<YourDomain>.com/sitemap.xml" // 自己站点的sitemap地址
var base_url = "https://api.github.com/repos/"+ username + "/" + repo_name + "/issues"
var sitemap = new Sitemapper();
sitemap.fetch(sitemap_url)
.then(function (sites) {
sites.sites.forEach(function (site, index) {
if (site.endsWith('404.html')) {
console.log('跳过404')
return
}
request({
url: site,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
}, function (err, resp, bd) {
if (err || resp.statusCode != 200)
return
const $ = cheerio.load(bd);
var title = $('title').text();
var desc = site + "\n\n" + $("meta[name='description']").attr("content");
var path = site.split(".com")[1]
// var md5 = crypto.createHash('md5');
// var label = md5.update(path).digest('hex')
// ============ Customize your own label ============
var idx = title.indexOf(".")
var label;
if (idx == -1) {
label = '/';
} else {
label = '/leetcode/' + title.substring(0, idx) + '/';
}
var options = {
headers: {
'Authorization': 'token '+token,
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Accept': 'application/json'
},
url: base_url+ "?labels="+"Gitalk," + label,
method: 'GET'
}
// 检查issue是否被初始化过
request(options, function (error, response, body) {
if (error || response.statusCode != 200) {
console.log('检查['+site+']对应评论异常')
return
}
var jbody = JSON.parse(body)
if(jbody.length>0)
return
//创建issue
var request_body = {"title": title, "labels": ["Gitalk", label], "body": desc}
//console.log("创建内容: "+JSON.stringify(request_body));
var create_options = {
headers: {
'Authorization': 'token '+token,
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
url: base_url,
body: JSON.stringify(request_body),
method: 'POST'
}
request(create_options, function(error, response, body){
if (!error && response.statusCode == 201)
console.log("地址: ["+site+"] Gitalk初始化成功")
})
});
});
});
})
.catch(function (err) {
console.log(err);
});
后记:这里还有一个问题,就是每次执行貌似只能初始化20个左右的文章,而博主有大量的博文需要初始化,没办法只好疯狂的运行这个脚本,有时间可以研究一下怎么一次搞定。
内容总结
以上是互联网集市为您收集整理的Gitalk 自动初始化评论全部内容,希望文章能够帮你解决Gitalk 自动初始化评论所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。