2017-12-02 23 views
0

안녕하세요, 나는 프로 퍼블 리카 비영리 탐색기 API를 통해 PDF 파일을 다운로드하려면 R을 사용하려고 : 나는 API를 조회 할 때 https://projects.propublica.org/nonprofits/apiR 다운로드 파일 리디렉션 오류가

, 그것은 PDF 파일에 대한 링크를 반환합니다. 그러나 이러한 링크는 AWS로 리디렉션됩니다 (예 : https://projects.propublica.org/nonprofits/download-filing?path=2015_06_T%2F13-1624100_990T_201406.pdf

이 토론에서 제안한대로 method = "curl", extra='-L'을 지정하려고했습니다. R download file redirect. 이것은 상태 127을 반환합니다.

CRAN에서 "Downloader"패키지를 사용해 보았습니다. 이 파일을 다운로드하지만 열려고 할 때 Adobe에서 "메모리 부족"이라고 말하면 어떤 방식 으로든 손상된 것으로 보입니다.

누구에게 조언이 있습니까?

답변

0

그냥 httr (API 액세스에도 사용해야 함)을 사용하십시오.

library(httr) 

pp_doc_url <- "https://projects.propublica.org/nonprofits/download-filing?path=2015_06_T%2F13-1624100_990T_201406.pdf" 

GET(
    url = pp_doc_url, 
    write_disk("file.pdf"), 
    verbose() 
) -> res 

여기에 리디렉션을 보여주는 상세한 출력은 다음에있다 : :

여기
## -> GET /nonprofits/download-filing?path=2015_06_T%2F13-1624100_990T_201406.pdf HTTP/1.1 
## -> Host: projects.propublica.org 
## -> User-Agent: libcurl/7.54.0 r-curl/3.0 httr/1.3.1 
## -> Accept-Encoding: gzip, deflate 
## -> Accept: application/json, text/xml, application/xml, */* 
## -> 
## <- HTTP/1.1 302 Found 
## <- Content-Type: text/html; charset=utf-8 
## <- X-Frame-Options: SAMEORIGIN 
## <- X-XSS-Protection: 1; mode=block 
## <- X-Content-Type-Options: nosniff 
## <- Location: https://pp-990.s3.amazonaws.com/2015_06_T/13-1624100_990T_201406.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAI7C6X5GT42DHYZIA%2F20171202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20171202T002756Z&X-Amz-Expires=1800&X-Amz-SignedHeaders=host&X-Amz-Signature=f90caae6a793239be8342d0ecbd96ff6f80b1821921cfadae00f78129a38a79f 
## <- Cache-Control: max-age=0, private, must-revalidate 
## <- Content-Encoding: gzip 
## <- Transfer-Encoding: chunked 
## <- Accept-Ranges: bytes 
## <- Date: Sat, 02 Dec 2017 00:27:57 GMT 
## <- Via: 1.1 varnish 
## <- Connection: keep-alive 
## <- X-Served-By: cache-bos8228-BOS 
## <- X-Cache: MISS 
## <- X-Cache-Hits: 0 
## <- X-Timer: S1512174477.810292,VS0,VE194 
## <- Vary: Accept,Accept-Encoding,Content-Type 
## <- 
## -> GET /2015_06_T/13-1624100_990T_201406.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAI7C6X5GT42DHYZIA%2F20171202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20171202T002756Z&X-Amz-Expires=1800&X-Amz-SignedHeaders=host&X-Amz-Signature=f90caae6a793239be8342d0ecbd96ff6f80b1821921cfadae00f78129a38a79f HTTP/1.1 
## -> Host: pp-990.s3.amazonaws.com 
## -> User-Agent: libcurl/7.54.0 r-curl/3.0 httr/1.3.1 
## -> Accept-Encoding: gzip, deflate 
## -> Accept: application/json, text/xml, application/xml, */* 
## -> 
## <- HTTP/1.1 200 OK 
## <- x-amz-id-2: fycJGU5JQZ+o+aTOWFa86ZFyasv7XEH6RGsmXNo29+CtgDC8IZ438Ek61Bo/nUlRhk3fPKPXdMg= 
## <- x-amz-request-id: AB2E8B3421A6B7BB 
## <- Date: Sat, 02 Dec 2017 00:27:58 GMT 
## <- Last-Modified: Thu, 13 Aug 2015 19:22:03 GMT 
## <- ETag: "fd89377252531684bec1828db05c54e6" 
## <- Cache-Control: no-cache, no-store 
## <- Content-Language: en 
## <- Accept-Ranges: bytes 
## <- Content-Type: application/pdf 
## <- Content-Length: 537542 
## <- Server: AmazonS3 
## <- 

는 응답 오브젝트의 내용이다 :

res 
## Response [https://pp-990.s3.amazonaws.com/2015_06_T/13-1624100_990T_201406.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAI7C6X5GT42DHYZIA%2F20171202%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20171202T002756Z&X-Amz-Expires=1800&X-Amz-SignedHeaders=host&X-Amz-Signature=f90caae6a793239be8342d0ecbd96ff6f80b1821921cfadae00f78129a38a79f] 
## Date: 2017-12-02 00:27 
## Status: 200 
## Content-Type: application/pdf 
## Size: 538 kB 
## <ON DISK> file.pdf 

을 그리고, 여기에 파일을 증거 write_disk()은 당신의 BFF입니다 다운로드되었습니다 :

file.info("file.pdf") 
##   size isdir mode    mtime    ctime    atime uid gid uname grname 
## file.pdf 537542 FALSE 644 2017-12-01 19:27:57 2017-12-01 19:27:57 2017-12-01 19:27:58 xxx xx xxxxxxxx xxxxx 

"생산"에 verbose()을 그대로 둡니다.

+0

@hrbrmstr 덕분에 완벽하게 작동했습니다. – canyon