Gitment 初始化脚本 Python 实现

之前由于 livere 评论系统加载速度慢的问题,把评论系统换成了 Gitment,但是集成后发现只能手动初始化所有文章的评论或者一个一个点开界面,作者觉得这件事情非常麻烦,所以手动抓了一下 Gitment 在初始化评论时发出的网络请求后写了一个用于自动化初始评论的脚本。

获取 token

在使用该脚本之前首先要在 GitHub 创建一个新的 Personal access tokens,选择 Generate new token 后,在当前的页面中为 Token 添加所有 Repo 的权限:

New personal access token

在这里创建之后,点击界面最下的面 Generate token 按钮获得一个新的 token,保存好该 token,后续代码中需要。

脚本

配置下面脚本的 5 个变量:

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
import requests
import re
import json

# 博客地址
site_url = 'https://hoxis.github.io'
# 博客的 sitemap
sitemap_url = 'https://hoxis.github.io/sitemap.xml'
# 上面步骤中获取的 token
token = 'token '+'xxxxx'
# GitHub 用户名
username = 'hoxis'
# The repo you use to store Gitment comments
repo_name = 'gitment-comments'


def getHTMLText(url):
try:
kv = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'}
r = requests.get(url, timeout=30, headers=kv)
r.raise_for_status() # 检查状态码
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"

wb_data = getHTMLText(sitemap_url)

pattern = re.compile('<loc>([a-zA-z]+://[^\s]*)</loc>')
urls = pattern.findall(str(wb_data))

print(urls)

for url in urls:
url_data = getHTMLText(url)
title_pattern = re.compile('<title>(.+)</title>')
title = title_pattern.search(url_data).group(1).replace('&#39;','\'')
headers = {
"Accept": "application/vnd.github.squirrel-girl-preview, application/vnd.github.html+json",
"Accept-Encoding": "gzip, deflate, br",
'Connection': 'keep-alive',
'Host': 'api.github.com',
'Origin': site_url,
"Referer": url,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0",
'Authorization': token
}
payload = {
'title': title,
'labels': ['gitment', title.split('|')[0].strip()],
'body': url
}
payload_json = json.dumps(payload)
print(title.split('|')[0].strip())
feedback = requests.post('https://api.github.com/repos/'+username+'/'+repo_name+'/issues',headers=headers,data=payload_json)
print(feedback)

配置好后,运行脚本即可:

1
python comment.py

运行成功后,在设置的 repo 里会出现很多 issue,如图 :

issues

脚本的存放位置没有要求,只要能访问到你的博客地址和 GitHub 即可。另外,GitHub 中 issue 的可以创建但是并不能删除,所以在配置时请一定检查好所有的配置项是否正确,否则会批量创建一些无用的 issue 虽然没有什么影响,但是看起来非常头疼。

注意事项!!!

上面脚本中的一段:

1
2
3
4
5
payload = {
'title': title,
'labels': ['gitment', title.split('|')[0].strip()],
'body': url
}

即创建 issue 时的 label 如何设置,这里要与你的配置文件里的对应,否则会导致生成的 issue 无法在页面加载。

在 Next 主题中的配置文件位于 next/layout/_third-party/comments/gitment.swig 文件中:

1
2
3
4
5
{% if page.comments %}
<script type="text/javascript">
function renderGitment(){
var gitment = new {{CommentsClass}}({
id: '{{ page.title }}',

这里的 id: '' 原来是 id: window.location.pathname,这里为了避免出现 Error: Validation Failed 的异常设置为了文章标题,因此脚本里处理时,也需要设置 label 为文章标题,若你设置的 id 为其他字段,需要做相应的修改。


参考:

hoxis wechat
一个脱离了高级趣味的程序员,关注回复1024有惊喜~
赞赏一杯咖啡
  • 本文作者: hoxis | 微信公众号【不正经程序员】
  • 本文链接: https://hoxis.github.io/gitment-initialize.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!
0%