用python3将 Github issue 转成 markdown,支持私有仓,支持评论,支持label

前言
Github issues是居家必备之好东西,然而最近访问G站有点慢呀,能忍?那就用本地的Typora写markdown文档咯,美滋滋。文档是不能丢的,这辈子都不可能丢的,Mark的东西基本是不会再去看的。备份是要备份的,人又比较懒,于是写了个脚本,供大家娱乐。核心的方法是用github 提供的api接口来获取issue和comments里的markdown字符串。

小可爱们【转载请注明出处】谢谢。

1 获取token

首先要获取token,获取地址:https://github.com/settings/tokens

记得勾选 repo 哈,这样能访问到私有仓。

2 使用代码下载issue

拿到token之后,自己将代码贴到 issue_to_markdown.py 保存,然后就可以愉快地用shell下载了。记得换上自己的 user、repo、token、out_dir 哈。

脚本是这样子的:

python3 issue_to_markdown.py -u user -r repo -t token -o out_dir

或者也可以在 issue_to_markdown.py 的68行,写上 user、repo、token、out_dir的值。

代码文件: issue_to_markdown.py

from tqdm import tqdm
import os
import argparse
import codecs
import json
import re
import requests
requests.session().keep_alive = False  # 及时释放


def get_issue(username, repo, token):
    headers = {'Content-Type': 'application/json',
               'Authorization': 'token %s' % token}
    api_url = 'https://api.github.com/repos/%s/%s/issues' % (username, repo)
    r = requests.get(api_url, headers=headers)
    ret = json.loads(r.text)
    # print(ret)
    if r.status_code > 300:
        print('error %s', r.text)
        return False
    return ret


def get_comments(comments_url, token):
    headers = {'Content-Type': 'application/json',
               'Authorization': 'token %s' % token}
    r = requests.get(comments_url, headers=headers)
    ret = json.loads(r.text)
    # print(ret)
    if r.status_code > 300:
        print('error %s', r.text)
        return False
    return ret


def to_markdown(page, coms):
    mk = '# ' + page['title'] + '\n'
    mk += "created_at: "+page['created_at']+"\n"
    mk += "updated_at: "+page['updated_at']+"\n"

    labels = "label: "
    for idx, item in enumerate(page['labels']):
        if (idx+1) == len(page['labels']):
            labels += item['name']+'\n'
        else:
            labels += item['name']+','
    mk += labels+'\n'

    mk += page['body']+'\n'

    for com in coms:
        # mk += "\n---\n"
        # mk += "created_at: "+com['created_at'] + \
        #     ", updated_at: "+com['updated_at']+"\n"
        mk += com['body']+"\n"
    return mk


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-u', '--username', help="github account username")
    parser.add_argument('-r', '--repo', help="github account repo")
    parser.add_argument('-t', '--token', help="github personal access token")
    parser.add_argument('-o', '--dir', help="out put dir")

    args = parser.parse_args()

    # args.username = "talengu"
    # args.repo = "talengu.github.io"
    # args.token = ""
    # args.dir = "out"

    if not os.path.exists(args.dir):
        os.makedirs(args.dir)

    ret = get_issue(args.username, args.repo, args.token)
    for page in tqdm(ret):
        coms = []
        if page['comments'] > 0:
            coms = get_comments(page['comments_url'], args.token)
        mk = to_markdown(page, coms)

        # save
        filename = page['created_at'].split('T')[0]+','+page['title']+'.md'
        filename = re.sub(r'[/:*?"<>|]', " ", filename)  # check filename
        filename = os.path.join(args.dir, filename)

        with codecs.open(filename, 'w', 'utf-8') as file:
            file.write(mk)

这个代码抛砖引玉,小可爱们自己玩起来吧~

3 用issue写作

记得用 ## 作为小节标题哈,在导出的文档里主次清晰,不乱的,。

4 结果

下面是导出数据的结果,md文件的标题是 时间+issue title.md

再会!!!

发布了3 篇原创文章 · 获赞 0 · 访问量 161

猜你喜欢

转载自blog.csdn.net/github_25176023/article/details/105725979