ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Gitalk 自动初始化评论

2021-05-12 12:36:33  阅读:246  来源: 互联网

标签:Gitalk 初始化 url request body label 评论 var



博主在用 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,初始化,url,request,body,label,评论,var
来源: https://www.cnblogs.com/grandyang/p/14759244.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有