需求
辛辛苦苦寫完一篇質量比較高的技術部落格,很多開發者朋友都會把它發到簡書、掘金、個人部落格等數個平臺。我也不例外,一般是先在簡書寫好,因為簡書的 markdown 編輯器用起來比較舒服,而且傳圖片比較方便:只需把要傳的圖片貼上到剪下板上,在編輯框裡 Command-V 一下,就自動上傳圖片、並生成相應的 markdown 程式碼了。
但是往別的平臺發的時候有個小問題。第一次,我直接把簡書部落格全文複製貼上到掘金的編輯框裡,就發出去了;很快就收到掘金編輯的微信:“你的圖掛啦!快去看看吧!”原來,簡書會自動把部落格裡的圖片重傳一次,放在自己的圖片伺服器 upload-images.jianshu.io
上。而這個伺服器對站外訪問是有一定限制的,貼到掘金上自然就訪問不到了。
於是,每次在簡書發完文章,我都要把所有圖片再往我自己的七牛空間重新傳一份,然後用七牛的圖片連結逐一替換簡書的圖片連結。這個過程很重複,也很無聊,為什麼不能用指令碼自動化處理一下呢?因此,我寫了這個用於同步簡書部落格的 python 指令碼。
使用
環境準備
這個指令碼在 python 2.7.1 下執行通過。圖床用的是七牛雲端儲存。
七牛的 python sdk 需要安裝 requests,沒裝的朋友可以在 terminal 裡執行 sudo easy_install -U requests
來安裝。
原始碼地址
原始碼放在 Github 上,地址戳這裡。
用法
- 把指令碼原始碼下載到本地
填寫原始碼中的以下部分:
# 在此處填寫你的七牛 Access Key 和 Secret Key accessKey = '...' secretKey = '...' q = Auth(accessKey, secretKey) # 七牛上的 bucket 名 bucketName = '...' # 這個 bucket 的外鏈字首,就是七牛後臺的“外鏈預設域名” imageUrlPrefix = "http://xxxxxx.bkt.clouddn.com/"複製程式碼
- 把 blog.txt 裡的文字替換成自己的部落格內容
- 在 terminal 中切換到指令碼根目錄,執行:
python blogbot.py
,會看到以下輸出:$ python blogbot.py 正在解析檔案... 正在下載圖片... 下載中:1 / 4 下載中:2 / 4 下載中:3 / 4 下載中:4 / 4 正在上傳圖片... 上傳中:1 / 4 上傳中:2 / 4 上傳中:3 / 4 上傳中:4 / 4 正在寫入檔案... 完成啦~複製程式碼
- 新生成的部落格就在指令碼根目錄下的
newBlog.txt
裡。拿去用吧:)
原始碼講解
為什麼選擇 python?
其實用任何一種指令碼語言都可以。七牛還有 javascript 的 sdk,所以一開始想做成一個網頁的。不過因為涉及到需要填寫七牛的 Access Key 和 Secret Key,感覺在本地執行更安全一些(而且懶得畫網頁了……),所以用的 python。
指令碼流程
- 讀檔案
- 從部落格正文中識別圖片連結
這一步用的是正規表示式,簡單匹配 markdown 的圖片語法,提取出所有的圖片連結。 - 下載圖片
用 python 的urllib.urlretrieve
下載圖片,自動命名為image1
、image2
…… - 上傳圖片到七牛
使用七牛的 python SDK。自動命名為形如blog20161027_image1
的檔名,前面拼上七牛的外鏈字首,即得到七牛上的外鏈地址。 - 替換連結
- 寫檔案
原始碼很簡單,我註釋也寫得挺詳細的,一看原始碼就明白了。
侷限性
主要是為了我自己的需求使用,很多地方考慮得比較簡單。比如:
- 正規表示式只是簡單匹配了 markdown 的圖片語法,並沒有考慮例如“圖片語法在程式碼段裡“之類的情況。
- 圖片的命名比較簡單粗暴,不能滿足一天處理兩篇文章的需求(第二篇文章的圖片會覆蓋第一篇)。如果有這種需求,可以簡單修改一下命名那部分的程式碼。
就是這樣一個很簡單的小指令碼,希望能為大家的生活帶來方便~