用python為Gitalk博客評(píng)論插件自動(dòng)化創(chuàng)建issue

前言

? 由于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

1

? 3.在_config.yml中添加

plugins:
    - jekyll-sitemap
    - jekyll-paginate
    
gems: [jekyll-paginate]

? 4.安裝jekyll-paginate

2

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

3

? 6.在博客項(xiàng)目目錄的_site文件夾下生成sitemap.xml

創(chuàng)建issue

? 1.首先要在 GitHub 創(chuàng)建一個(gè)新的 Personal access tokens,選擇 Generate new token 后,并為該 Token 添加所有 Repo 的權(quán)限

4

? 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()

? 搞定!

5

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容