日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Markdown批量发布到Github

發布時間:2025/3/18 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Markdown批量发布到Github 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 簡書天然支持Markdown格式, 而Github倉庫中的README.md也天然支持Markdown格式
  • 簡書后臺支持一鍵下載所有寫過的Markdown的文章, Github提供了腳本創建倉庫的Api
  • 我們從簡書后臺獲取所有寫過的Markdown文章, 然后運行一個腳本, Github將會新建一個倉庫, 作為我們博客的新地址

運行效果:

本地目錄
本地目錄
GitHub新倉庫
github新倉庫
新倉庫細節

腳本的說明:

  • 倉庫的英文名,是怎么來的?
    倉庫的英文名由原markdown的文件名通過google翻譯而來
  • 如何認證github用戶名和密碼?
    用戶名和密碼被分離到了單獨的配置文件中, 填寫配置文件即可
  • 程序如何獲取本地markdown文檔的位置?
    程序會通過遞歸方法, 將腳本所在的同級目錄和子目錄下所有的以.md結尾的所有文件讀取出來, 這些.md結尾的文檔都會被建立為Github倉庫
  • 簡書允許這種行為么?
    簡書并不反對這種行為, 我寫過一篇手動遷移簡書markdown的細則: 簡書文章發布到GitHub, 簡叔打賞了我10顆糖,至今難忘...
  • 為什么寫這個腳本 ?
    關于簡書文章發布到GitHub, 里面詳細介紹了手動遷移的整個過程, 后來有讀者評論:
    評論
    為了回應讀者的熱情, 我完成了這個腳本
  • 腳本適用于所有本地markdown文檔一鍵發布到github么?
  • 是的, 這里用簡書做例子, 只是因為簡書打包下載的文檔包,很適合做說明, 任何本地的md文檔,只要在腳本的同級目錄或者子目錄, 都可以一鍵遷移到GitHub
    - 腳本依賴的環境:
    安裝了git, 安裝了curl, 安裝了python3, 在GitHub中添加了公鑰

從簡書打包獲取markdown:

獲取Markdown

運行腳本之前需要在GitHub添加公鑰

  • 在本地生成一對秘鑰(以Ubuntu為例), 進入到.ssh目錄下
cd ~/.ssh/
  • 生成一對秘鑰
ssh-keygen -t rsa -C "lijianzhao1208@gmail.com"
  • 為秘鑰起個名字(可直接回車跳過)
秘鑰起個名字
  • 將公鑰內容添加到github(實現免密向遠程倉庫提交代碼)

復制公鑰(github.pub)內容

復制公鑰(github.pub)內容

登錄github,并粘貼公鑰內容

github主頁 添加容器 添加公鑰 添加完成

源碼

主邏輯腳本
import os import json import re from googletrans import Translatordef getAllMd (file_dir): # 獲取當前目錄下所有的css文件路徑all_whole_path_files = []for root, dirs, files in os.walk(file_dir):for file in files:try:if file[-3:] == ".md":file_info = [root+'/', file]all_whole_path_files.append(file_info)except Exception as e:print(e)print(all_whole_path_files)return all_whole_path_filesdef getRepName(zhCnName):translator = Translator()enName = translator.translate(zhCnName, dest='en').textenNameList = enName.split(' ')enName = ''for en in enNameList:if re.match('[a-zA-Z]+' ,en):en = en.capitalize()enName += en# 將當前獲得的字符串拆分enStrList = [e for e in enName]# 符合要求的列表索引indexList = []for index, enStr in enumerate(enStrList):if re.match('[a-zA-Z]' ,enStr):indexList.append(index)else:passrep_name = ''for index in indexList:rep_name += enStrList[index]# 如果翻譯的倉庫名長度大于100,則截斷if len(rep_name) > 100:rep_name = rep_name[0:101]return rep_namedef getInfo(whole_path_file):info = {}with open("./inputInfo.txt", 'r') as f:jsonStr = ''lines = f.readlines()# 過濾注釋, 生成json格式for line in lines:if '#' not in line:jsonStr += lineinfo = json.loads(jsonStr)RepName = getRepName(whole_path_file[1][:-3])info['GitHubRepositoryName'] = RepNamereturn info# 在github創建遠程倉庫 def CreateRepository(info):GitHubUserName = info['GitHubUserName']GitHubPassWord = info['GitHubPassWord']GitHubRepositoryName = info['GitHubRepositoryName']# 這里有詳細的參數說明: https://developer.github.com/v3/repos/#createnew_command = 'curl -i -u ' + '\'' +GitHubUserName + ':' + GitHubPassWord + '\'' +' -d ' + '\''+ '{"name": ' + '\"'+GitHubRepositoryName +'\"'+ ', ' + '"auto_init": ' + 'true, ' + '"private": ' + 'false, ' + '"gitignore_template": ' + '"nanoc"}' + '\'' + ' https://api.github.com/user/repos'result = os.popen(new_command).readlines()if ('HTTP/1.1 201 Created\n' in result):print("創建成功")return Trueelse:return Falsedef GetRepository(info):GetAllRepCommand = 'curl -i -u ' + '\'' + info['GitHubUserName'] + ':' + info['GitHubPassWord'] +'\'' + ' https://api.github.com/user/repos'print(GetAllRepCommand)result = os.popen(GetAllRepCommand).readlines()keyWord = info['GitHubUserName']+'/'+info['GitHubRepositoryName']# 判斷倉庫是否創建成功if not (keyWord in str(result)):return# 獲取倉庫到同級目錄下# git@github.com:zhaoolee/ChatRoom.gitGetRepCommand = 'git clone git@github.com:' + keyWord + '.git'# 將倉庫獲取到本地result = os.popen(GetRepCommand).readlines()# 將資源文件放入倉庫 def FillRepository(info):AllFileName = os.listdir('./')PreReadMeFile = info['file_info'][0] + info['file_info'][1]# 將md文件替換原有的README.mdReplaceMdFileCommand = 'cp ./' + PreReadMeFile + ' ./'+ info['GitHubRepositoryName'] + '/README.md'print("==>", ReplaceMdFileCommand, "<==")result = os.popen(ReplaceMdFileCommand).readlines()# 將文件提交到倉庫 def PushRepository(info):inputRepository = 'cd ' + info['GitHubRepositoryName']addCommand = 'git add .'result = os.popen(inputRepository+'\n'+addCommand).readlines()commitCommand = 'git commit -m "完成項目的初始化"'result = os.popen(inputRepository+'\n'+commitCommand).readlines()pushCommand = 'git push'result = os.popen(inputRepository+'\n'+pushCommand).readlines()print("完成")# 獲取新建倉庫所需的完整信息 def GetAllWholeRepInfo(all_whole_path_files):# 包含所有倉庫信息all_whole_rep_info = []for whole_path_file in all_whole_path_files:# 包含新建倉庫所需的完整信息whole_rep_info = getInfo(whole_path_file)whole_rep_info['file_info'] = whole_path_fileall_whole_rep_info.append(whole_rep_info)return all_whole_rep_infodef main():all_whole_path_files = getAllMd('./')all_whole_rep_info = GetAllWholeRepInfo(all_whole_path_files)# 依次創建倉庫for info in all_whole_rep_info:CreateRepository(info)GetRepository(info)FillRepository(info)PushRepository(info)if __name__ == '__main__':main()
配置腳本
{# 用戶名"GitHubUserName": "zhaoolee", # 用戶密碼"GitHubPassWord": "github" }

總結:
這不是一篇獨立的文章, 如果你想了解更多, 可以參考我以前寫過相關的兩篇:

  • 手動遷移markdonw文檔,簡書文章發布到GitHub
  • 將附帶靜態資源的markdown文檔, 一鍵遷移到GitHub, Github變身網絡硬盤
這個腳本已經可以用了,但還不完美, 歡迎在文章底部或Github倉庫https://github.com/zhaoolee/MarkDonw2GitHub 提出改進建議

為便于管理, 相關資源整合到一張獨立的帖子,鏈接如下:
http://www.jianshu.com/p/4f28e1ae08b1

總結

以上是生活随笔為你收集整理的Markdown批量发布到Github的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。