[R-br] Baixando dados do INMET com a biblioteca RCurl e bitops/Salvando arquivos em .txt

Éder Comunello comunello.eder em gmail.com
Segunda Julho 11 11:23:48 BRT 2016


Senhores, bom dia!

Embora a sugestão do colega Jônatan já deva solucionar o problema, deixo um
código que utilizava para consulta. Testei no Ubuntu 16.04 e ainda
funciona. Basicamente vai fazer o download dos dados em uma pasta
'Downloads' criada no diretório de trabalho. São criados 2 arquivos para
cada estação: um arquivo "bruto" (iniciado por "raw_") e a table (iniciado
por "dat_") resultante da importação.

> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04 LTS

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
LC_PAPER=en_US.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] XML_3.98-1.4   RCurl_1.95-4.8 bitops_1.0-6

loaded via a namespace (and not attached):
[1] tools_3.2.3

### <code r>
#
----------------------------------------------------------------------------
#
# INMET/BDMEP - Download Dados DIÁRIOS
# Eder Comunello - 2013.11.08
#
----------------------------------------------------------------------------
#
library(RCurl); library(XML)
setwd('~/LAB/DATCLIMA'); getwd()
if (!file.exists('Download')) dir.create('Download'); dir(incl=T)

# Login
---------------------------------------------------------------------- #
myData  <- scan(text=readLines('BDMEP1.dat')[1], what=character(), sep=';')
myParams=list(mCod   = myData[1], mSenha = myData[2], btnProcesso = "
Acessar ")
myCurl  <- getCurlHandle()
myURL1  <- "http://www.inmet.gov.br/projetos/rede/pesquisa/inicio.php"
curlSetOpt(cookiejar="cookies.txt", useragent="Mozilla/5.0",
followlocation=TRUE, curl=myCurl)
myLogin <- postForm(myURL1, .params=myParams, curl=myCurl)

# Downloads
------------------------------------------------------------------ #
dError <- dSucess <- as.character(NULL)

dINMET <- function(code=83264, dINI='01/01/1980', dFIM='31/12/1985') {
  myURL <- paste0("http://www.inmet.gov.br/projetos/rede/pesquisa/",
                  "gera_serie_txt.php?&mRelEstacao=", code,
                  "&btnProcesso=serie&mRelDtInicio=", dINI,
                  "&mRelDtFim=",dFIM,
"&mAtributos=,,1,1,,,,,,1,1,,1,1,1,1,")

  page    <- getURLContent(myURL, curl=myCurl, .encoding="UTF-8")
  hParse  <- htmlParse(page)
  ver1    <- as.character(substr(page,1,20))
  ver2    <- substr(xpathSApply(hParse,'//*/pre', xmlValue,
encoding='UTF-8'),1,17)

  if (ver1=="Registro Inexistente" | ver2=="Não existem dados") {
    print(paste0(code,': Dados não encontrados!'))
    dError <<- c(dError, code)}
  else {
    print(paste0(code, ': OK!')); dSucess <<- c(dSucess, code)
    hPart    <- xpathSApply(hParse,'//*/pre', xmlValue)
    fileNam1 <- paste0('Download/raw_',code,'.txt')
    cat(hPart, file=fileNam1)
    dLines   <- unlist(strsplit(hPart, "\n"))
    dHead    <- dLines[grep("^Estacao;", dLines)]
    dText    <- append(dHead, dLines[grep("^[0-9]{5,};", dLines)])
    dFrame   <- read.table(text=dText, dec=".", sep=";", head=T)
    fileNam2 <- paste0('Download/dat_',code,'.txt')
    write.table(dFrame, fileNam2, row.names=F)}
}

codEst  <- c(83264, 83267, 83270, 83319, 83332, 83358)
dError <- dSucess <- as.character(NULL)

tryCatch({
  sapply(codEst, function(x) dINMET(x, dINI='01/01/1980',
dFIM='31/12/1985'))
         }, error=function(...)"ERROR!")
# [1] "83264: OK!"
# [1] "83267: Dados não encontrados!"
# [1] "83270: Dados não encontrados!"
# [1] "83319: Dados não encontrados!"
# [1] "83332: OK!"
# [1] "83358: OK!"

paste(length(dSucess), 'estações baixadas com sucesso!')
# [1] "3 estações baixadas com sucesso!"

paste(length(dError), 'estações não baixadas!')
# [1] "3 estações não baixadas!"

dir(path="Download")
# [1] "dat_83264.txt" "dat_83332.txt" "dat_83358.txt" "raw_83264.txt"
"raw_83332.txt" "raw_83358.txt"

### </code>


================================================
Éder Comunello
Researcher at Brazilian Agricultural Research Corporation (Embrapa)
DSc in Agricultural Systems Engineering (USP/Esalq)
MSc in Environ. Sciences (UEM), Agronomist (UEM)
---
Embrapa Agropecuária Oeste, Dourados, MS, Brazil |<O>|
================================================
GEO, -22.2752, -54.8182, 408m
UTC-04:00 / DST: UTC-03:00




Em 8 de julho de 2016 23:22, Paulo Henrique Pimenta via R-br <
r-br em listas.c3sl.ufpr.br> escreveu:

> Jônatan,
>
>
>
> Dentro do que eu fiz vc aconselharia e pensaria em modificar o que para
> melhorar?
>
>
>
> Um grande abraço!
>
>
>
> Paulo Henrique de A. S. Pimenta
> Cel/WhatsApp/Telegram: +5511981318435
>
> Sent from Mail for Windows 10
>
>
>
> *From: *Jônatan <jdtatsch em gmail.com>
> *Sent: *Friday, July 8, 2016 5:27 PM
> *To: *Paulo Henrique Pimenta <paulopimenta6 em hotmail.com>; a lista
> Brasileira oficial de discussão do programa R. <r-br em listas.c3sl.ufpr.br>
> *Subject: *Re: [R-br] Baixando dados do INMET com a biblioteca RCurl e
> bitops/Salvando arquivos em .txt
>
>
> Nesse link <https://github.com/jdtatsch/inmetr/blob/master/README.md> disponibilizo
> umas funções que fiz para importar os dados do site do inmet-bdmep para
> o R. O readme inclui exemplo de uso das funções. O script é baseado no post
> citado no e-mail Paulo e nas instruções dadas no vídeo
> <https://www.youtube.com/watch?v=o2fFUw8aSHE>do Meetup R São Paulo (*Web
> scraping usando o R* por Julio Trecenti).
> Testado no linux ubuntu somente. Em breve devo empacotar isso.
> Qualquer problema, me avisem por gentileza.
> Att.
>
> 2016-07-08 13:03 GMT-03:00 Paulo Henrique Pimenta via R-br <
> r-br em listas.c3sl.ufpr.br>:
>
> Olá Listeiros!
>
>
>
> Estou com um grande problema e acho que vcs podem me ajudar! Estou usando
> um script criado por mim a partir das dicas da própria lista:
> http://r-br.2285057.n4.nabble.com/R-br-r-baixando-dados-inmet-td4660459.html
> na qual usei o código como template para automatizar o download dos dados
> do inmet. Infelizmente estou com alguns problemas, um deles é que só
> consigo usar o código no Windows, ou seja, no R do Windows e não do Linux
> (possuo o Windows 10 e o Ubuntu 16.04 no meu notebook).
>
>
>
> Os erros no meu Linux são referentes a biblioteca RCurl que mesmo
> reinstalado várias vezes e usado com a biblioteca bitops continuam a não
> funcionar. Outro problema que tenho é o não conhecimento sobre como salvar
> os arquivos baixados em um .txt ao invés de alocar em variáveis como estou
> fazendo. Caso algum de vcs se interesse em mexer e melhorar o código segue
> ele abaixo:
>
>
>
>
> ####################################################################################################################
>
>
>
> ### <begin>
>
> library(bitops)
>
> library(RCurl)
>
>
>
> ####################################################################
>
>
>
> dados_1 <- read.table(
>
>               "E:/inmet/estacoes_2.txt",
>
>               header=F,
>
>               sep="\t")
>
>
>
> dados_1 <- data.frame(dados_1)
>
>
>
> #names(dados_1) <- c("cidades", "estacoes")
>
>
>
> ######################################################################
>
>
>
> # Links para login e dados
>
>
>
> myURL1 <- "http://www.inmet.gov.br/projetos/rede/pesquisa/inicio.php"
>
>
>
> for (NUM in 1:length(dados_1[,2])){
>
>
>
>   myURL2[NUM] <- "
> http://www.inmet.gov.br/projetos/rede/pesquisa/gera_serie_txt.php?&mRelEstacao=dados_1[,2][NUM]&btnProcesso=serie&mRelDtInicio=01/01/2002&mRelDtFim=01/01/2013&mAtributos=1,,,,1,1,,1,1,,,1,,,,,
> "
>
>
>
> # Dados para acesso
>
> myParams=list(
>
>   mCod="SEU EMAIL",
>
>   mSenha="SUA SENHA",
>
>   btnProcesso = " Acessar ")
>
>
>
>   myCurl <- getCurlHandle()
>
>   curlSetOpt(cookiejar="cookies.txt", useragent="Mozilla/5.0",
> followlocation=TRUE, curl=myCurl)
>
>
>
>   login <- postForm(myURL1, .params=myParams, curl=myCurl)
>
>   dados[NUM] <- getURLContent(myURL2[NUM], curl=myCurl)
>
>
>
>   exemplo[NUM] <- head(strwrap(dados[NUM], 70), 10000)
>
>
>
>                                    }
>
>
>
> ### <end>
>
>
>
>
> ###################################################################################################################
>
>
>
> O arquivo estacoes_2.txt esta aqui:
> http://s000.tinyupload.com/?file_id=66921456922777880817
> <http://s000.tinyupload.com/index.php?file_id=66921456922777880817>
>
>
>
> Se alguém tiver interesse em modificar para melhorar o código fique a
> vontade!
>
>
>
> Um grande abraço a todos vcs!
>
>
>
> Paulo.
>
>
>
> Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986> for
> Windows 10
>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
>
>
>
> --
> ###############################################################
> ##  Jônatan Dupont Tatsch
> ##  Professor do Departamento de Física
> ##  Centro de Ciências Exatas e Naturais (CCNE)
> ##  Universidade Federal de Santa Maria - UFSM
> ##  Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil -
> 97105-900
> ##  Telefone: +55(55)33012083
> ##  www.ufsm.br/meteorologia
> ###############################################################
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160711/e07d03c2/attachment.html>


Mais detalhes sobre a lista de discussão R-br