markdown中本地和線上圖片自動傳圖床並替換鏈接

我根據網上現有的兩個Python腳本(《markdown文件中圖片到圖床的轉換》、hxzqlh/qiniu-markdown-pics)以及七牛官方的Python SDK,優化改編了一個新的Python 3腳本,能夠自動將markdown中的本地和線上圖片(如微信公眾號中的圖片)批量上傳到圖床七牛的Bucket,並自動替換markdown文件中的鏈接。

寫作作用流程

在markdown軟體(如Typora)中專心進行寫作,隨意插入本地及網路圖片,不需要中斷下來傳個圖。

本地圖片可以是電腦中任意位置的文件(使用絕對路徑),也可以MD同名文件夾下的圖片(使用相對路徑)。插入的網路圖片也不用擔心出現「此圖片來自微信公眾平台,未經允許不可引用」之類問題,因為腳本處理之後會直接轉到到個人的七牛空間。插入網路圖片如果是自己的七牛空間裡面的圖片,腳本會自動忽略,避免重複上傳。

插完圖之後也可以隨時修改,不用擔心圖片管理混亂的問題(上傳的圖床的圖片不方便管理)。

寫作完成,瀏覽修改,運行

python 腳本路徑 MD文件路徑 [是否圖片壓縮]n

  • 0 - 不需要壓縮
  • 1 - 需要壓縮,注意tiniPNGkey

上傳之後的七牛中的圖片名稱為上傳日期-MD文件名/image序號.png or jpg,方便後期管理和備份

發表markdown文件到網路,刪除備份的MD.bak和清理本地圖片。

需要用到的工具

環境

這是一個Python 3 腳本,在Microsoft Windows 10 (Home Insider Preview China 10.0.17025)、Anaconda 4.3.27、python 3.6.2、PyCharm 2017.2.4 環境調試完成。

運行條件:

import renimport osnimport sysnimport timenimport mathnimport imghdrnimport shutilnimport randomnimport stringnimport tinifynimport urllibnimport sqlite3nimport operatornfrom hashlib import md5nfrom qiniu import Auth, put_file, etag, BucketManagernfrom datetime import datenimport validatorsn

只看了入門書《A Byte of Python》中文版,就能使用上述工具,遇到問題直接Google,中文檢索結果就能解決問題。

實現

代碼上傳到GitHub,此處應該有個流程圖。代碼中都有詳細的注釋。

input pathis mdimgs=re->len(imgs)>0for img in imgsis online imagevalidated urlalready in my qiniuignoreupload qiniureplace url to mdreplace mdimg existsis imageimg.orl existsselect url from sqlimg url existzip imageabsolute img pathoutis folderfiles=os.listdir(path)for file in filesyesnoyesnoyesnoyesnoyesnoyesnoyesnoyesnoyes

腳本配置

存儲

網上都說七牛圖床好,目錄是10G空間+10G流量,圖片大小適當控制應該夠我用了。等到我不夠用的時候,也許我有經濟實力購買更多空間和流量了。

先註冊七牛個人賬號,獲取AccessKey/SecretKey、空間名稱(bucket name)和域名(domain)

填入python 腳本中

ak = nsk = ndomain = # 上傳域名nbucket = # 空間名稱n

圖片壓縮

調用tinypng來壓縮,壓縮配置直接照搬《markdown文件中圖片到圖床的轉換》的。七牛的SDK也能提供壓縮,後期有空再研究一個兩個官方文檔,改進一下腳本。

tinify.key = # 設置tinipng的keyn

在非Windows系統運行,還要把腳本中對應的路徑的/改為,已在腳本對應位置注釋。

編程感想

由於只看了《A Byte of Python》,只能算是一個初步的Python User。而且不具備系統的Python基礎知識,利用google搜索來慢慢調試是非常浪費時間的。這個腳本的編寫和調試就用了幾個晚上的時間。還花費了一些時間來搜索有沒有現有的輪子。

《markdown文件中圖片到圖床的轉換》的腳本修改了一下就能運行,但是這個腳本比較激進,沒有備份MD文件就直接覆蓋了。hxzqlh/qiniu-markdown-pics的是python 2 腳本,而且我調試時總是出現os.remove無法運行,不知道是在哪裡被佔用了,只能把os.remove給注釋掉,最後再手動刪除Temp下面的緩存文件。另外,它是把網路圖片下載下來,用的是tempfile.mkstemp方法,這個文件也是要手動刪除的。在閱讀七牛官方SDK文檔時發現它可以直接獲取url,不用下載,於是決定還是自己寫一個上傳函數。

本來想直接有命令行中運行的,但發現安裝了Anaconda之後就沒辦法把模塊安裝到原版的Python 中,pip install之後的模塊都安裝在conda中,不過這樣也好,在conda中還能自動更新。

markdown圖床現有輪子集錦

markdown傳圖的各種姿勢(知乎不支持表格,點擊這裡看錶格)

原文發表於:markdown中本地和線上圖片自動傳圖床並替換鏈接


推薦閱讀:

假裝放出一本開源書
Hexo(2)-部署博客及更新博文
hexo音樂插件有嗎?或者說hexo上有什麼好玩的插件?
配置hexo 為什麼運行到 hexo server 這步就沒用了?

TAG:Python | Hexo | Markdown |