需求
辛辛苦苦寫完一篇質(zhì)量比較高的技術(shù)博客烙博,很多開發(fā)者朋友都會把它發(fā)到簡書飒箭、掘金嗅蔬、個(gè)人博客等數(shù)個(gè)平臺。我也不例外淌铐,一般是先在簡書寫好,因?yàn)楹啎?markdown 編輯器用起來比較舒服蔫缸,而且傳圖片比較方便:只需把要傳的圖片粘貼到剪切板上腿准,在編輯框里 Command-V 一下,就自動上傳圖片拾碌、并生成相應(yīng)的 markdown 代碼了吐葱。
但是往別的平臺發(fā)的時(shí)候有個(gè)小問題。第一次校翔,我直接把簡書博客全文復(fù)制粘貼到掘金的編輯框里弟跑,就發(fā)出去了;很快就收到掘金編輯的微信:“你的圖掛啦防症!快去看看吧孟辑!”原來,簡書會自動把博客里的圖片重傳一次告希,放在自己的圖片服務(wù)器 upload-images.jianshu.io
上扑浸。而這個(gè)服務(wù)器對站外訪問是有一定限制的,貼到掘金上自然就訪問不到了燕偶。
于是喝噪,每次在簡書發(fā)完文章,我都要把所有圖片再往我自己的七胖该矗空間重新傳一份酝惧,然后用七牛的圖片鏈接逐一替換簡書的圖片鏈接榴鼎。這個(gè)過程很重復(fù),也很無聊晚唇,為什么不能用腳本自動化處理一下呢巫财?因此,我寫了這個(gè)用于同步簡書博客的 python 腳本哩陕。
使用
環(huán)境準(zhǔn)備
這個(gè)腳本在 python 2.7.1 下運(yùn)行通過平项。圖床用的是七牛云存儲。
七牛的 python sdk 需要安裝 requests悍及,沒裝的朋友可以在 terminal 里運(yùn)行 sudo easy_install -U requests
來安裝闽瓢。
源碼地址
源碼放在 Github 上,地址戳這里心赶。
用法
- 把腳本源碼下載到本地
- 填寫源碼中的以下部分:
# 在此處填寫你的七牛 Access Key 和 Secret Key accessKey = '...' secretKey = '...' q = Auth(accessKey, secretKey) # 七牛上的 bucket 名 bucketName = '...' # 這個(gè) bucket 的外鏈前綴扣讼,就是七牛后臺的“外鏈默認(rèn)域名” imageUrlPrefix = "http://xxxxxx.bkt.clouddn.com/"
- 把 blog.txt 里的文本替換成自己的博客內(nèi)容
- 在 terminal 中切換到腳本根目錄,運(yùn)行:
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?
其實(shí)用任何一種腳本語言都可以耻姥。七牛還有 javascript 的 sdk销钝,所以一開始想做成一個(gè)網(wǎng)頁的。不過因?yàn)樯婕暗叫枰顚懫吲5?Access Key 和 Secret Key咏闪,感覺在本地運(yùn)行更安全一些(而且懶得畫網(wǎng)頁了……)曙搬,所以用的 python。
腳本流程
- 讀文件
- 從博客正文中識別圖片鏈接
這一步用的是正則表達(dá)式鸽嫂,簡單匹配 markdown 的圖片語法纵装,提取出所有的圖片鏈接。 - 下載圖片
用 python 的urllib.urlretrieve
下載圖片据某,自動命名為image1
橡娄、image2
…… - 上傳圖片到七牛
使用七牛的 python SDK。自動命名為形如blog20161027_image1
的文件名癣籽,前面拼上七牛的外鏈前綴挽唉,即得到七牛上的外鏈地址。 - 替換鏈接
- 寫文件
源碼很簡單筷狼,我注釋也寫得挺詳細(xì)的瓶籽,一看源碼就明白了。
局限性
主要是為了我自己的需求使用埂材,很多地方考慮得比較簡單塑顺。比如:
- 正則表達(dá)式只是簡單匹配了 markdown 的圖片語法,并沒有考慮例如“圖片語法在代碼段里“之類的情況。
- 圖片的命名比較簡單粗暴严拒,不能滿足一天處理兩篇文章的需求(第二篇文章的圖片會覆蓋第一篇)扬绪。如果有這種需求,可以簡單修改一下命名那部分的代碼裤唠。
就是這樣一個(gè)很簡單的小腳本挤牛,希望能為大家的生活帶來方便~