[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語法示例
- 流程圖示例
- 時序圖示例
- 登錄/注冊
- 數據字典示例
- 課程問題解答