Rmarkdown+Python+Shell自动发送日报

96
杜七
2016.06.13 10:57* 字数 462
  • Author: 杜七
  • Date: 2016.06.13

为解决工作中日报问题,基于Rmarkdown+Python+SHELL 上线了日报自动化,简单记录,供大家参考

1,日报准备

  • 明确日报内容
  • 准备需要的数据:
    • 可以直接调用mysql
    • 可以提前download,然后通过read.csv()等来读取
  • 熟悉rmarkdown和markdown语法,了解knitr,以及\```r {}```使用
  • 公司使用的是阿里云邮箱,阿里云邮箱不支持html内置图片base64图片的展现,所以rmarkdown生成html的时候做了一点变化,然后用sed把生成的html做了修改,最后用python 自动化发送日报

2,Rmarkdown的自动化html日报

1) 生成HTML的时候不能用base64编码图片

  • 生成html的时候,图片不要base64编码,阿里云邮箱不支持HTML内置的base64编码的图片发送
  • 读一下markdown包的文档,里面markdownToHTML函数的帮助中告诉如何设置选项(把默认的base64_images去掉应该就可以了)

library(markdown) knit("kongge_daily_report.rmd",output="report.md") markdownToHTML("report.md","report.html",options=c("hard_wrap","use_xhml","smartypants"))

2)用Rmarkdown生成一个html日报


3,SHELL对html做一些修改

把python发送邮件中的图片引用地址替换掉,比如,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发送邮件

  • 编写一个Python的发送邮件的文件,包括发送HTML和图片
  • 图片可以循环调用,比如:
    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)
R语言
Web note ad 1