[R-br] Erro ao fazer download de PDFs: failed, no valid url links detected

salah salah3.1416 em gmail.com
Sexta Maio 27 16:08:53 BRT 2016


Caro Elias

Você pode baixar o pacote fonte metagear (a beleza do opensource) aqui:

https://cran.r-project.org/src/contrib/Archive/metagear/metagear_0.1.tar.gz

Examinando a função PDF_download() notamos que ela usa três arquivos:
PDF_download.R, PDF_utils.R, PDF_collect.R e isPDF.R

para o doi "10.1371/journal.pone.0123511" a função está extraindo como alvo:

"content=\"http://journals.plos.org/plosone/article/asset?id=10.1371/journal.pone.0123511.PDF"

e o correto seria o link com atributo href:

"href=\"/plosone/article/asset?id=10.1371%2Fjournal.pone.0123511.PDF"

resolvendo em: 
"http://journals.plos.org/plosone/article/asset?id=10.1371%2Fjournal.pone.0123511.PDF"

Segue um pequeníssimo ROBOT, veja que ele não prevê https e necessita 
das urls dos jornais alvo.

# Author: salah
###############################################################################
require(RCurl)
require(XML)

rm(list=ls())

## seleciona o link alvo e converte em caracter
baixaURL = function(doi)
{
     ## link doi
     urlDOI = paste0("http://dx.doi.org/", doi)

     ## download url
     web = getURLContent(urlDOI)
     tc = textConnection(web)
     web = readLines(tc)
     close(tc)

     ## captura os links
     lnk = getHTMLLinks(web)

     ## converte para chr
     doc = htmlParse(lnk)
     w = capture.output(doc)

     return(w)
}##end baixaURL

## prepara a url para download
urlPDF = function(w, journal)
{
     a = unlist(strsplit(w, split = "\\s"))
     b = unique(grep("pdf|PDF", a, value = TRUE))
     cc = grep("href+", b, value = TRUE)
     d = gsub("href\\=|\"|>", "", cc)
     h = gsub(".*pdf|.*PDF", "", d)
     outPDF = gsub(h[1], "", d)

     return(paste0("http://", journal, outPDF))
}##end naturePDF

## faz o download do pdf
baixaPDF = function(urls, dest = "~")
{
     j = unlist(strsplit(urls, "/"))
     namePDF = grep(".pdf|.PDF", j, value = T)

     ## se houver pdf extra
     for(i in 1:length(urls))
     {
         dir_name = paste0(dest, namePDF[i])
         download.file(urls[i], dir_name)
     }##end for
}##end baixaPDF

doiNature = c("10.1038/nutd.2016.11", "10.1038/srep17841", 
"10.1038/srep25762")
doiPLOS = c("10.1371/journal.pone.0123511", "10.1371/journal.pbio.1002461")

j1 = "www.nature.com/"
j2 = "journals.plos.org"

DATA = data.frame(DOI = c(doiNature, doiPLOS), Journal = c(j1, j1, j1, 
j2, j2), stringsAsFactors = FALSE)

destDir = "~/"

for(n in 1:nrow(DATA))
{
     w = baixaURL(DATA$DOI[n])
     urls = urlPDF(w, DATA$Journal[n])
     print(urls)
     baixaPDF(urls, destDir) ## faz o download
}


saudações

Em 22/05/2016 23:23, Elias Carvalho escreveu:
> Desculpe Leonardo, segue o código mínimo, tem dois DOIs para poder 
> testar:
>
> *library(metagear)
> *
> *
> *
> *DOI <- "10.1371/journal.pone.0123511" # Disponível em: 
> http://goo.gl/rhtvFx*
> *# DOI <- "10.1038/srep17841"            # Disponível em: 
> http://goo.gl/rNwOpk*
> *filename <- "ArtigoTeste.pdf"
> *
> *folder <- "~"
> *
> *PDF_download(DOI, directory = folder, theFileName = filename, 
> validatePDF = TRUE, quiet = FALSE)*
>
>
> Em 22 de maio de 2016 09:41, Elias Carvalho <ecacarva em gmail.com 
> <mailto:ecacarva em gmail.com>> escreveu:
>
>     Bom dia Pessoal
>
>     Estou baixando tentando baixar alguns pdf de artigos científicos
>     pelo DOI usando o pacote metagear, porém a maioria apresenta a
>     mensagem "failed, no valid url links detected", ou
>     "cannot open: HTTP status was '404 Not Found' PDF download...
>     skipped", mesmo ligando o proxy da universidade.
>
>     De 1800 artigos que preciso consegui por volta de uns 200 download
>     apenas.
>
>     Alguém poderia me dar uma ajuda em como resolver este problema ?
>
>     -- 
>     Best regards... 8^)
>
>     “The mind that is open to new ideas never come back
>     to its original size” /Albert Einstein/
>
>
>     -- 
>     Obrigado
>     Elias
>
>
>
>
> -- 
> Best regards... 8^)
>
> “The mind that is open to new ideas never come back
> to its original size” /Albert Einstein/
>
>
> -- 
> Obrigado
> Elias
>
>
> _______________________________________________
> 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/20160527/9ac68044/attachment.html>


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