前言
? 由于Disqus在國(guó)內(nèi)加載比較慢,所以選了Gitalk作為博客的評(píng)論插件,支持markdown語(yǔ)法。但是Gitalk 需要手動(dòng)初始化所有文章的評(píng)論或者一個(gè)一個(gè)點(diǎn)開界面才會(huì)創(chuàng)建對(duì)應(yīng)的 issue,非常麻煩。這篇 自動(dòng)初始化 Gitalk 和 Gitment 評(píng)論,解決了這個(gè)問(wèn)題,但是自己不會(huì)Ruby,所以用python寫一個(gè)腳本,順便記錄下自己踩坑的過(guò)程。
sitemap
? sitemap可以列出網(wǎng)站中的網(wǎng)址以及關(guān)于每個(gè)網(wǎng)址的其他元數(shù)據(jù),用于數(shù)據(jù)抓取,所以先通過(guò) jekyll-sitemap 插件為博客創(chuàng)建對(duì)應(yīng)的 sitemap 文件。
? jekyll-sitemap插件需要Ruby環(huán)境。。。所以還是要先安裝ruby(需要2.1以上的版本,注意CentOS7 yum默認(rèn)安裝的是2.0)
? 1.更換gem源
# 刪除默認(rèn)的gem源
gem sources --r http://rubygems.org/
# 增加ruby-china作為gem源,taobao那個(gè)已經(jīng)停止維護(hù)了
gem sources -a https://gems.ruby-china.org/
# 查看當(dāng)前的gem源
gem sources
# 清空源緩存
gem sources -c
# 更新源緩存
gem sources -u
? 2.安裝jekyll-sitemap

? 3.在_config.yml中添加
plugins:
- jekyll-sitemap
- jekyll-paginate
gems: [jekyll-paginate]
? 4.安裝jekyll-paginate

? 5.運(yùn)行jekyll,默認(rèn)在4000端口開啟博客服務(wù)

? 6.在博客項(xiàng)目目錄的_site文件夾下生成sitemap.xml
創(chuàng)建issue
? 1.首先要在 GitHub 創(chuàng)建一個(gè)新的 Personal access tokens,選擇 Generate new token 后,并為該 Token 添加所有 Repo 的權(quán)限

? 2.抓取sitemap.xml中的所有文章url
def capture():
url = 'https://xxx/sitemap.xml'
html = urllib.request.urlopen(url).read()
html = html.decode('utf-8')
r = re.compile(r'(xxx/2018.*?</loc>)') # 截取sitemap.xml中的所有文章url
big = re.findall(r, html)
for i in big:
str = i[:-6] # 去掉</loc>標(biāo)簽
op_sitemap_url = open('sitemap_url.txt', 'a') # 保存到sitemap_url.txt
op_sitemap_url.write('%s\n' % str)
? 3.自動(dòng)化創(chuàng)建issues,并生成相關(guān)標(biāo)簽
def create_issues():
suffix = ' - xxx的博客 | MY Blog' # 自定義標(biāo)題后綴
g = Github(login_or_token="xxxxxx") # 使用第一步創(chuàng)建的token登陸
repo = g.get_repo("xxx/xxx.github.io") # 指定倉(cāng)庫(kù)
# open_issues = repo.get_issues(state='open') # 獲取倉(cāng)庫(kù)下open的issues
for line in open("sitemap_url.txt"): # 指定生成的sitemap_url
line_ = line.rsplit('/', 2) # 截取url獲取標(biāo)題部分
title = unquote(line_[1]) + suffix # unquote url_decode 拼接標(biāo)題
body = 'https://' + line # 拼接https
label = ['Gitalk', md5_label(line[13:].rstrip("\n"))] # 標(biāo)簽
repo.create_issue(title, body=body, labels=label) # 創(chuàng)建issue
def md5_label(arg):
hash = hashlib.md5()
hash.update(arg.encode("utf8"))
return hash.hexdigest()
? 搞定!

? GitHub 中 issue 的可以創(chuàng)建但是并不能刪除,所以在配置時(shí)請(qǐng)一定檢查好所有的配置項(xiàng)是否正確,雖然可以關(guān)閉issue,但是看起來(lái)還是非常頭疼,強(qiáng)迫癥表示接受不了。