Automatização de emails usando R

Coda 2022

Olá! 👋

Renata Hirota é jornalista de dados, formada na ECA-USP e no IME-USP. Lida com dados desde 2017 e atualmente trabalha na Associação Brasileira de Jurimetria. Colabora também com o Núcleo Jornalismo / Volt Data Lab, onde trabalha com análises de dados e desenvolvimento de ferramentas para jornalistas. Faz parte da comunidade R-Ladies São Paulo, que promove a diversidade de gênero na comunidade da linguagem de programação R.

@renata_mh | Núcleo Jornalismo | ABJ

Apresentação e repositório

Newsletters do Núcleo

Mais aqui: https://nucleo.jor.br/news/

O que vamos ver

  • Criação de email
    • usando funções do blastula
    • usando templates em .Rmd
  • Envio de email
  • Automatização
    • cron
    • Github actions

Dados para exercício!

Coloquem seus emails nessa planilha:

bit.ly/sheets-coda2022

No fim da oficina, vamos enviar um email para quem está aqui :)

Criando um email

Podemos usar a função compose_email

blastula::compose_email(
  body = blastula::md(paste0(
    "# Header 1\n",
    "## Header 2\n",
    "Este é um email _automatizado_ utilizando **blastula**!"
  )),
  header = "Workshop Coda",
  footer = Sys.Date()
)

Criando um email

Ou podemos usar um template de .Rmd

---
title: "Garimpo"
date: "05/11/2022"
output:
  blastula::blastula_email
---

Envio de email

  • SMTP: protocolo de transferência para configurar regras de comunicação entre servidores

O que importa no nosso caso: saber qual o host e port do nosso servidor de email.

O {blastula} já possui algumas coisas pré-configuradas para certos provedores (Gmail, Outlook e Office365), mas mesmo nesses casos, se você estiver usando autenticação em 2 fatores, é bem provável que precise do host e port.

Como conectar a sua conta de email

Se você não usa verificação em 2 fatores:

credenciais <- blastula::creds("re.hirota@gmail.com", "gmail")
blastula::smtp_send(
  email2,
  to = "re.hirota@gmail.com",
  from = "re.hirota@gmail.com",
  subject = "Teste blastula",
  credentials = credenciais
)

Como conectar a sua conta de email

Se você usa verificação em 2 fatores, você vai precisar de mais dados:

blastula::create_smtp_creds_key(
  id = "gmail",
  user = "re.hirota@gmail.com",
  host = "smtp.gmail.com",
  port = "465",
  use_ssl = TRUE
)
credenciais <- blastula::creds_key("gmail")

Envio

blastula::smtp_send(
  email2,
  to = "re.hirota@gmail.com",
  from = "re.hirota@gmail.com",
  subject = "Teste blastula",
  credentials = credenciais
)

Automatização: cron

install.packages("cronR")
install.packages("shinyFiles")

# exemplo de script R
arquivo_r <- "R/script_r_exemplo.R"

Adicionar um cron:

cmd <- cronR::cron_rscript(arquivo_r, frequency = "minutely")
cronR::cron_add(cmd, dry_run = TRUE)

Addin do RStudio:

cronR::cron_rstudioaddin()

Github actions

  • Automatização de tarefas com gatilhos específicos (inclusive cron)
  • Gratuito (até certo número de minutos por mês)
  • “Receitas” prontas no r-lib/actions

Yet Another Markup Language

Os arquivos que definem as configurações das tarefas no Github actions são do tipo .yaml

Outros lugares em que você provavalmente já usou yaml:

  • .Rmd (Rmarkdown)
  • .qmd (quarto)

Estrutura dentro do repositório

.github
    workflows
        update.yaml
        deploy.yaml

Exemplo de arquivo:

on:
  push:
    branches: [main, master]
  pull_request:
    branches: [main, master]

name: R-CMD-check

jobs:
  R-CMD-check:
    runs-on: ubuntu-latest
    env:
      GITHUB_PAT: ${{ secrets.PAT }}
      R_KEEP_PKG_SOURCE: yes
    steps:
      - uses: actions/checkout@v2

      - uses: r-lib/actions/setup-r@v2
        with:
          use-public-rspm: true

      - uses: r-lib/actions/setup-r-dependencies@v2
        with:
          extra-packages: any::rcmdcheck
          needs: check

      - uses: r-lib/actions/check-r-package@v2