11 Apresentação de dados administrativos abertos de saúde e coleta por máquina.

Respostas.

Respostas.

Respostas.

Respostas.

# install.packages("RCurl") 
# install.packages("htmlTable")
library("RCurl") 
library("htmlTable")


# variaveis   <! ---- --><! ---- --> inicio <! ---- --><! ---- --><! ---- --><! ---- -->---

  # url de base
  url="ftp://ftp.datasus.gov.br/dissemin/publicos/"

  # diretorio local para arquivos dbc
  dirdbc="/home/ferre/Downloads/dbc"
  

# lista de url complementar
lst=as.data.frame(matrix(c("CIHA", "CIHA/201101_/Dados/", "CMD", "CMD/DadosSISAB/", "CNES", "CNES/200508_/Dados/DC/", "CNES", "CNES/200508_/Dados/EE/", "CNES", "CNES/200508_/Dados/EF/", "CNES", "CNES/200508_/Dados/EP/", "CNES", "CNES/200508_/Dados/EQ/", "CNES", "CNES/200508_/Dados/GM/", "CNES", "CNES/200508_/Dados/HB/", "CNES", "CNES/200508_/Dados/IN/", "CNES", "CNES/200508_/Dados/LT/", "CNES", "CNES/200508_/Dados/PF/", "CNES", "CNES/200508_/Dados/RC/", "CNES", "CNES/200508_/Dados/SR/", "CNES", "CNES/200508_/Dados/ST/", "PNI", "PNI/DADOS/", "SIA", "SIASUS/199407_200712/Dados/", "SIA", "SIASUS/200801_/Dados/", "SIM", "SIM/CID10/DOFET/", "SIM", "SIM/CID10/DORES/", "SINAN", "SINAN/DADOS/FINAIS/", "SINAN", "SINAN/DADOS/PRELIM/", "SINASC", "SINASC/1996_/Dados/DNRES/", "SISPRENATAL", "SISPRENATAL/201201_/Dados/"), byrow = TRUE, ncol = 2))
colnames(lst)=c("no_sistema","ds_url")

# variaveis   <! ---- --><! ---- --> fim <! ---- --><! ---- --><! ---- --><! ---- -->---

# inicializa a lista de saida
lista=
  data.frame(
    "no_dbc"=character(),
    "dt_atualizado_ftp"=character(),
    "hs_atualizado_ftp"=character(), 
    "qt_bytes_ftp"=character(),
    "qt_bytes_local"=character(),
    "no_arquivo"=character(),
    "no_sistema"=character(),
    "no_tabela"=character(),
    "sg_local"=character(),
    "nu_competencia"=character(),
    "ds_url"=character()
  )

# verifica tamanho do arquivo local e atualiza a lista ftp
listadbc=read.table(text=list.files(dirdbc, full.names = FALSE), header = FALSE)
colnames(listadbc)="no_dbc_local"
listadbc$qt_bytes_local=file.size(list.files(dirdbc, full.names = TRUE))


for (i in  1:dim(lst)[1]) {
  
  ds_url=paste(url,lst[i,2],sep="") # url
  no_sistema=lst[i,1]               # sistema SUS
  
  # lista os arquivos do ftp
  listaftp <- read.table(text=getURL(ds_url), header = FALSE)
  colnames(listaftp)=c("dt_atualizado_ftp","hs_atualizado_ftp","qt_bytes_ftp","no_dbc")
  
  # atualiza lista ftp com o tamanho do arquivo local
  listaftp=merge(listaftp, listadbc, by.x = "no_dbc", by.y = "no_dbc_local", all.x = TRUE)
  listaftp$qt_bytes_local[is.na(listaftp$qt_bytes_local)] = 0
  
  # nome do arquivo sem extensao e minusculo
  listaftp$no_arquivo=tolower(gsub("([0-9]+).*$", "\\1", listaftp$no_dbc))
  
  # aloca o nome do sistema
  listaftp$no_sistema=no_sistema
  
  # obtem a sigla da tabela (subsistema)
  listaftp$no_tabela=sub("^([[:alpha:]]*).*", "\\1", listaftp$no_dbc)
  listaftp$no_tabela=toupper(substr(listaftp$no_tabela,1,nchar(listaftp$no_tabela)-2))

  # sigla do local (uf ou brasil)
  listaftp$sg_local=sub("^([[:alpha:]]*).*", "\\1", listaftp$no_dbc)
  listaftp$sg_local=toupper(substr(listaftp$sg_local,nchar(listaftp$sg_local)-1,nchar(listaftp$sg_local)))
    
  # obtem a competencia (aaaamm)
  listaftp$nu_competencia=regmatches(listaftp$no_dbc, gregexpr("[[:digit:]]+", listaftp$no_dbc))
  listaftp$nu_competencia=paste(ifelse(substr(listaftp$nu_competencia,1,2) < 80, 20, 19),listaftp$nu_competencia, sep="")
  
  # aloca a url
  listaftp$ds_url=ds_url
  
  lista=rbind(lista,listaftp)
  
}

<! —- –>