- Author: 杜七
- Date: 2016.06.13
為解決工作中日?qǐng)?bào)問(wèn)題,基于Rmarkdown+Python+SHELL 上線(xiàn)了日?qǐng)?bào)自動(dòng)化,簡(jiǎn)單記錄,供大家參考
1,日?qǐng)?bào)準(zhǔn)備
- 明確日?qǐng)?bào)內(nèi)容
- 準(zhǔn)備需要的數(shù)據(jù):
- 可以直接調(diào)用mysql
- 可以提前download埋酬,然后通過(guò)
read.csv()
等來(lái)讀取
- 熟悉rmarkdown和markdown語(yǔ)法,了解knitr烧栋,以及
\```r {}
```使用 - 公司使用的是阿里云郵箱写妥,阿里云郵箱不支持html內(nèi)置圖片base64圖片的展現(xiàn),所以rmarkdown生成html的時(shí)候做了一點(diǎn)變化审姓,然后用sed把生成的html做了修改珍特,最后用python 自動(dòng)化發(fā)送日?qǐng)?bào)
2,Rmarkdown的自動(dòng)化html日?qǐng)?bào)
1) 生成HTML的時(shí)候不能用base64編碼圖片
- 生成html的時(shí)候魔吐,圖片不要base64編碼扎筒,阿里云郵箱不支持HTML內(nèi)置的base64編碼的圖片發(fā)送
- 讀一下markdown包的文檔,里面markdownToHTML函數(shù)的幫助中告訴如何設(shè)置選項(xiàng)(把默認(rèn)的base64_images去掉應(yīng)該就可以了)
library(markdown) knit("kongge_daily_report.rmd",output="report.md") markdownToHTML("report.md","report.html",options=c("hard_wrap","use_xhml","smartypants"))
2)用Rmarkdown生成一個(gè)html日?qǐng)?bào)
3酬姆,SHELL對(duì)html做一些修改
把python發(fā)送郵件中的圖片引用地址替換掉嗜桌,比如,src = "figure/unnamed-chunk-3-1.png"辞色,替換為src = "cid:image3" ,然后MIMEImage再引用就可以了
sed 's/figure\/unnamed\-chunk\-/cid\:image/g' report.html | sed 's/\-1.png//g' > new_report.html
4骨宠,Python發(fā)送郵件
- 編寫(xiě)一個(gè)Python的發(fā)送郵件的文件,包括發(fā)送HTML和圖片
- 圖片可以循環(huán)調(diào)用相满,比如:
for img in figure: fp = open(settings.MEDIA_ROOT+img[0], 'rb') msgImage = MIMEImage(fp.read()) fp.close() msgImage.add_header('Content-ID', '<'+img[1]+'>') msgRoot.attach(msgImage)