把一篇簡書部落格同步到掘金的 python 指令碼

戴倉薯發表於2016-10-28

需求

辛辛苦苦寫完一篇質量比較高的技術部落格,很多開發者朋友都會把它發到簡書、掘金、個人部落格等數個平臺。我也不例外,一般是先在簡書寫好,因為簡書的 markdown 編輯器用起來比較舒服,而且傳圖片比較方便:只需把要傳的圖片貼上到剪下板上,在編輯框裡 Command-V 一下,就自動上傳圖片、並生成相應的 markdown 程式碼了。

但是往別的平臺發的時候有個小問題。第一次,我直接把簡書部落格全文複製貼上到掘金的編輯框裡,就發出去了;很快就收到掘金編輯的微信:“你的圖掛啦!快去看看吧!”原來,簡書會自動把部落格裡的圖片重傳一次,放在自己的圖片伺服器 upload-images.jianshu.io 上。而這個伺服器對站外訪問是有一定限制的,貼到掘金上自然就訪問不到了。

於是,每次在簡書發完文章,我都要把所有圖片再往我自己的七牛空間重新傳一份,然後用七牛的圖片連結逐一替換簡書的圖片連結。這個過程很重複,也很無聊,為什麼不能用指令碼自動化處理一下呢?因此,我寫了這個用於同步簡書部落格的 python 指令碼。


使用

環境準備

這個指令碼在 python 2.7.1 下執行通過。圖床用的是七牛雲端儲存。
七牛的 python sdk 需要安裝 requests,沒裝的朋友可以在 terminal 裡執行 sudo easy_install -U requests 來安裝。

原始碼地址

原始碼放在 Github 上,地址戳這裡

用法

  1. 把指令碼原始碼下載到本地
  2. 填寫原始碼中的以下部分:

     # 在此處填寫你的七牛 Access Key 和 Secret Key
     accessKey = '...'
     secretKey = '...'
     q = Auth(accessKey, secretKey)
    
     # 七牛上的 bucket 名
     bucketName = '...'
     # 這個 bucket 的外鏈字首,就是七牛後臺的“外鏈預設域名”
     imageUrlPrefix = "http://xxxxxx.bkt.clouddn.com/"複製程式碼
  3. 把 blog.txt 裡的文字替換成自己的部落格內容
  4. 在 terminal 中切換到指令碼根目錄,執行:python blogbot.py,會看到以下輸出:
    $ python blogbot.py 
    正在解析檔案...
    正在下載圖片...
    下載中:1 / 4
    下載中:2 / 4
    下載中:3 / 4
    下載中:4 / 4
    正在上傳圖片...
    上傳中:1 / 4
    上傳中:2 / 4
    上傳中:3 / 4
    上傳中:4 / 4
    正在寫入檔案...
    完成啦~複製程式碼
  5. 新生成的部落格就在指令碼根目錄下的 newBlog.txt 裡。拿去用吧:)

原始碼講解

為什麼選擇 python?

其實用任何一種指令碼語言都可以。七牛還有 javascript 的 sdk,所以一開始想做成一個網頁的。不過因為涉及到需要填寫七牛的 Access Key 和 Secret Key,感覺在本地執行更安全一些(而且懶得畫網頁了……),所以用的 python。

指令碼流程

  1. 讀檔案
  2. 從部落格正文中識別圖片連結
    這一步用的是正規表示式,簡單匹配 markdown 的圖片語法,提取出所有的圖片連結。
  3. 下載圖片
    用 python 的 urllib.urlretrieve 下載圖片,自動命名為 image1image2……
  4. 上傳圖片到七牛
    使用七牛的 python SDK。自動命名為形如 blog20161027_image1 的檔名,前面拼上七牛的外鏈字首,即得到七牛上的外鏈地址。
  5. 替換連結
  6. 寫檔案

原始碼很簡單,我註釋也寫得挺詳細的,一看原始碼就明白了。

侷限性

主要是為了我自己的需求使用,很多地方考慮得比較簡單。比如:

  • 正規表示式只是簡單匹配了 markdown 的圖片語法,並沒有考慮例如“圖片語法在程式碼段裡“之類的情況。
  • 圖片的命名比較簡單粗暴,不能滿足一天處理兩篇文章的需求(第二篇文章的圖片會覆蓋第一篇)。如果有這種需求,可以簡單修改一下命名那部分的程式碼。

就是這樣一個很簡單的小指令碼,希望能為大家的生活帶來方便~

相關文章