zoukankan      html  css  js  c++  java
  • Gitalk 自动初始化评论


    博主在用 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 + "
    
    " + $("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个左右的文章,而博主有大量的博文需要初始化,没办法只好疯狂的运行这个脚本,有时间可以研究一下怎么一次搞定。

  • 相关阅读:
    过国内外的waf的一些奇淫绝技<转>
    杂七杂八的敏感文件注释<持续更新帖>
    [讨论]“传递式”的攻击思想<转LN>
    无线hacking集合贴,持续更新~
    dede找后台《转》
    开源MFC扩展界面库:Ultimate Toolbox的编译(转)
    【转】Windows环境下设置Tomcat6启动参数
    [转]关于dll文件的生成以及找不到jni.h的解决办法
    VBA 7788
    ODBC连接EXCEL的一些问题
  • 原文地址:https://www.cnblogs.com/grandyang/p/14759244.html
Copyright © 2011-2022 走看看