前言
Github issues是居家必备之好东西,然而最近访问G站有点慢呀,能忍?做人最重要的是开心咯,那就用本地的Typora写markdown文档咯,也是美滋滋。文档不能丢的,这辈子都不能丢的,写博客的人各个都是人才,Mark的东西基本是不有人去看的。备份还是要备份的,万一有人看呢。笔者又比较懒,于是写了个脚本备份咯。
核心的方法是用github 提供的api接口来获取issue和comments里的markdown字符串。
- 支持 Private 仓
- 支持 comments
- 支持 labels
本文需要github账号一只,python铁锅一口,外加python语言三层火候。
小可爱们【转载请注明出处】谢谢。
1 获取token
首先要获取token,获取地址:https://github.com/settings/tokens

记得勾选 repo 哈,这样能访问到私有仓。
2 使用代码下载issue
换上自己的 user、repo、token、out_dir ,然后就可以愉快地用shell下载了。
脚本是这样子的:
python3 issue_to_markdown.py -u user -r repo -t token -o out_dir
也可以在 issue_to_markdown.py
的55行,写上 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_info(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 = ""
# args.repo = ""
# args.token = ""
# args.dir = "github_out"
if not os.path.exists(args.dir):
os.makedirs(args.dir)
api_url = 'https://api.github.com/repos/%s/%s/issues' % (
args.username, args.repo)
issue_ret = get_info(api_url, args.token)
for page in tqdm(issue_ret):
coms = []
if page['comments'] > 0:
coms = get_info(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
。


再会!!!
等一下,笔者还写了gitlab的issue导出:
https://blog.csdn.net/github_25176023/article/details/105737191
还写了gitee的issue导出:
https://blog.csdn.net/github_25176023/article/details/105739634
小可爱们,点赞收藏分享走一波?