第一次使用 Gitalk 时,之前的文章的评论都需要初始化一下,如果文章多的话,挺麻烦的。不过,有些博客有提供接口获取博客上所有文章的相关信息,那其实就可以通过脚本来完成之前文章的评论初始化。下面是一些已经写好的脚本,可以直接使用或参考。
Gitalk 官方的 WiKi 里记录的方法年久失修,已经不能使用,我重新整理了一份。
获得权限
在使用该脚本之前首先要在 GitHub 创建一个新的 Personal access tokens,选择 Generate new token 后,在当前的页面中为 Token 添加所有 Repo 的权限。
自动化脚本
安装脚本依赖库
1
| $ gem install faraday activesupport sitemap-parser nokogiri
|
使用 sitemap 文件
找到博客对应的 sitemap 文件,例如 https://chaosky.tech/sitemap.xml。
使用脚本
在任意目录创建 comment.rb,将下面的代码粘贴到文件中:
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
| require 'open-uri' require 'faraday' require 'active_support' require 'active_support/core_ext' require 'sitemap-parser' require 'digest' require 'nokogiri'
username = "xwal" token = "xxxxxx" repo_name = "xwal.github.io" sitemap_url = "https://chaosky.tech/sitemap.xml" kind = "Gitalk"
sitemap = SitemapParser.new sitemap_url urls = sitemap.to_a
conn = Faraday.new(:url => "https://api.github.com/repos/#{username}/#{repo_name}/issues") do |conn| conn.basic_auth(username, token) conn.adapter Faraday.default_adapter end
urls.each_with_index do |url, index| id = Digest::MD5.hexdigest URI(url).path response = conn.get do |req| req.params["labels"] = [kind, id].join(',') req.headers['Content-Type'] = 'application/json' end response_hash = JSON.load(response.body) if response_hash.count == 0 document = Nokogiri::HTML(open(url)) title = document.xpath("//head/title/text()").to_s desc = document.xpath("//head/meta[@name='description']/@content").to_s body = url + "\n\n" + desc puts title response = conn.post do |req| req.body = { body: body, labels: [kind, id], title: title }.to_json end puts response.body end sleep 15 if index % 20 == 0 end
|
在这里有 5 个配置项,分别是 GitHub 用户名、在上一步获得的 Token、存放 issues 的仓库、sitemap 的地址以及最后你在博客中使用了哪个评论插件,不同的插件拥有标签,可以选择 “Gitalk” 或者 “gitment”。
运行脚本
参考链接
- https://github.com/gitalk/gitalk/wiki/评论初始化
- https://draveness.me/git-comments-initialize/