[toc]
# 发布更新信息的三种方式
## 图形操作


## Git操作



## 自动化


# python, 让接口发布自动化
## 大致思路
1. 检测文件变动
2. 把新增/修改/删除/更名的`文件名`写入字典
3. 读取`SUMMARY.md`, 生成中文和文件名的对应关系(字典)
4. 根据第二步的文件名, 从第三步生成的字典中找到对应关系, 并拼接字符串
5. 把拼接好的字符串加上commit信息, 写入`更新信息`文件
6. Git发布
## 实现代码
```python
# coding=utf-8
import datetime
import os
import time
from git import Repo
# 初始化
repo = Repo(os.path.split(os.path.realpath(__file__))[0]) # 当前目录, 即git目录
# 获取当前时间
current_time = datetime.datetime.now().strftime('%Y年%m月%d日%H:%M:%S')
# 建立中文名与file_name的对应关系的dict
filename_cn = dict()
def get_diff_info():
# 先构建中文名和md文件的对应关系
make_filename_cn_dict()
# 文件修改记录(包括新增, 修改, 删除和重命名)
files_dict = {
'add': list(),
'remove': list(),
'modify': list(),
'rename': dict()
}
# 确定add文件
if repo.untracked_files:
for i in repo.untracked_files:
if i[-3:] == '.md' and filename_cn.has_key(i):
files_dict['add'].append(i)
# 确定modify文件
index = repo.index
if repo.is_dirty():
for i in index.diff(None):
str_list = i.__str__().split()
file_name = str_list[0]
if file_name[-3:] == '.md' and 'deleted' not in str_list and filename_cn.has_key(file_name):
files_dict['modify'].append(file_name)
# 确定remove和rename文件
if 'SUMMARY.md' in files_dict['modify']:
files_dict['modify'].remove('SUMMARY.md')
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
git = repo.git
text = git.diff('SUMMARY.md')
for i in text.split('\n'):
if '- ' in i:
filename = i[i.find('(')+1:i.find(')')]
filename = filename.encode('utf-8')
cn = i[i.find('[')+1:i.find(']')]
cn = cn.encode('utf-8')
if filename_cn.has_key(filename):
files_dict['rename'][filename] = dict()
files_dict['rename'][filename]['old_name'] = cn
files_dict['rename'][filename]['new_name'] = filename_cn[filename]
files_dict['rename'][filename]['url'] = filename
else:
files_dict['remove'].append(cn)
return files_dict
def make_update_string(files_dict, update_str):
# 开始拼接'更新信息.md'文件所需要的信息
update_strs = '\n---\n\n'
update_strs += '# 更新信息 '
update_strs += current_time
update_strs += '\n\n'
update_strs += '>[danger] '
update_strs += update_str
update_strs += '\n'
# 根据文件变化, 拼接字符串
# 如果重命名...
if files_dict['rename']:
update_strs += '\n**重命名接口:**\n'
for i in files_dict['rename'].values():
update_strs += "* ~~%s~~ ==> [%s](%s)\n" % (i['old_name'], i['new_name'], i['url'])
# 如果新增...
if files_dict['add']:
update_strs += '\n**新增接口:**\n'
for i in files_dict['add']:
file_cn = filename_cn[i]
file_url = i
update_strs += "* [%s](%s)\n" % (file_cn, file_url)
# 如果修改...
if files_dict['modify']:
update_strs += '\n**修改接口:**\n'
for i in files_dict['modify']:
if i == '更新信息.md' or i == 'SUMMARY.md':
continue
file_cn = filename_cn[i]
file_url = i
update_strs += "* [%s](%s)\n" % (file_cn, file_url)
# 如果删除...
if files_dict['remove']:
update_strs += '\n**删除接口:**\n'
for i in files_dict['remove']:
update_strs += "* ~~%s~~\n" % i
update_strs += '\n'
return update_strs
def make_update_info(param):
print 'make_update_info going.....'
print param
# 打开文件, 读取内容
read_obj = open("更新信息.md".decode('utf-8'), "r")
str_list = read_obj.readlines()
read_obj.close()
# 修改内容(之前拼接的字符串)
str_list[1] = param
# 写入内容
write_obj = open("更新信息.md".decode('utf-8'), "w")
write_obj.writelines(str_list)
write_obj.close()
def git_it(update_str):
git = repo.git
git.add('-A') # git add -A
git.commit('-m', update_str) # git commit -m update_str
repo.remote().push() # git push
def make_filename_cn_dict():
summary_obj = open('SUMMARY.md', 'r')
summary_list = summary_obj.readlines()
summary_obj.close()
for i in summary_list:
filename = i[i.find('(')+1:i.find(')')]
cn = i[i.find('[')+1:i.find(']')]
filename_cn[filename] = cn
if __name__ == '__main__':
update_str = "需要commit的信息"
# 检测文件变动
files_dict = get_diff_info()
if files_dict['add'] or files_dict['modify'] or files_dict['remove'] or files_dict['rename']:
# 拼接字符串
string = make_update_string(files_dict, update_str)
# 修改'更新信息'
make_update_info(string)
# git add & commit & push
git_it(update_str)
```
- 打造高逼格接口管理平台
- 开篇
- 课程简介
- 聊聊接口平台
- 接口平台简介
- 优雅的使用看云
- 接口和markdown
- 接口文档版本演进
- 微软的硬菜--vscode
- markdown基础语法
- markdown进阶语法--流程图
- markdown进阶语法--时序图
- markdown进阶语法--API文档
- 接口文档的基本概念
- 接口管理平台的基本元素
- 编写接口文档并且发布更新
- 接口安全
- 文档安全
- 接口安全
- Git化你的文档
- 使用Git管理文档
- 自动化
- 自动化文档更新
- 收尾
- 如何反馈问题
- 课程总结
- 示例
- 更新信息
- 查询历史天气
- markdown语法示例
- 流程图示例
- 时序图示例
- 登录/注册
- 数据字典示例
- 课程问题解答