2014-10-02 1 views
5

R에서 RCurl 패키지의 getURL 함수를 사용하여 API 페이지에서 데이터를 긁어 내려고합니다. 내 문제는 해당 응답을 복제 할 수 없다는 것입니다. R을 사용하여 요청을 만들 때 Chrome에서 URL을 열 때 본질적으로 Chrome에서 API 페이지 (URL 아래)를 열면 제대로 작동하지만 R에서 getURL을 사용하여 요청하거나 Chrome) '500 Internal Server Error'응답을 받았으며 찾고있는 예쁜 JSON이 아닙니다. 문제API를 긁을 때 'RCurl'[R] package getURL 웹 페이지 오류가 발생했습니다.

URL/API : 여기 http://www.bluenile.com/api/public/loose-diamond/diamond-details/panel?country=USA&currency=USD&language=en-us&productSet=BN&sku=LD04077082

내 (실패)입니다 [R]에 요청.

test2 <- fromJSON(getURL("http://www.bluenile.com/api/public/loose-diamond/diamond-details/panel?country=USA&currency=USD&language=en-us&productSet=BN&sku=LD04077082", ssl.verifypeer = FALSE, useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36")) 

내 연구는 지금까지 먼저 나는 스택이 이전의 질문에 고개 (문제가 해결되지 않았다하지만 여전히 필요할 수 있습니다) 요청에 내 사용자 에이전트에 추가 : ViralHeat API issues with getURL() command in RCurl package

다음 솔루션정보 R Disparity between browser and GET/getURL

내 아이디어 : 내 이론적 근거를 안내하는이 도움이 포스트 보았다이것은 나의 전문 분야가 아니지만 내 요청에 요청에 요청을 완료하는 데 필요한 쿠키가 부족하다는 것입니다 (따라서 브라우저에서 시크릿 모드로 작동하지 않는 이유).

성공적인 요청 : enter image description here

실패 요청 :

enter image description here

누구나 어떤 아이디어가 나는 실패한 요청에 성공적으로 요청의 요청과 응답을 비교? 내가 만든 두 번째 게시물에서 MrFlick이 제안한 패키지 RSelenium 패키지를 사용해 볼까요?

답변

6

이것은 정중 한 사이트입니다. 귀하가보다 나은 사용자 경험을 제공하기 위해 어떤 통화를 사용하는지 등을 알고 싶습니다. 방문 페이지에 다수의 쿠키를 설정하여이를 수행합니다. 그래서 우리는 우리가 페이지가 우리가 원하는 고토 소송을 따라 방문 페이지가 처음 쿠키를 얻기로 이동합니다

library(RCurl) 
myURL <- "http://www.bluenile.com/api/public/loose-diamond/diamond-details/panel?country=USA&currency=USD&language=en-us&productSet=BN&sku=LD04077082" 
agent="Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0" 

#Set RCurl pars 
curl = getCurlHandle() 
curlSetOpt(cookiejar="cookies.txt", useragent = agent, followlocation = TRUE, curl=curl) 
firstPage <- getURL("http://www.bluenile.com", curl=curl) 
myPage <- getURL(myURL, curl = curl) 

library(RJSONIO) 
> names(fromJSON(myPage)) 
[1] "diamondDetailsHeader" "diamondDetailsBodies" "pageMetadata"   "expandedUrl"   
[5] "newVersion"   "multiDiamond" 

와 쿠키를 :

> getCurlInfo(curl)$cookielist 
[1] ".bluenile.com\tTRUE\t/\tFALSE\t2412270275\tGUID\tDA5C11F5_E468_46B5_B4E8_D551D4D6EA4D"                  
[2] ".bluenile.com\tTRUE\t/\tFALSE\t1475342275\tsplit\tver~3&presetFilters~TEST"                    
[3] ".bluenile.com\tTRUE\t/\tFALSE\t1727630275\tsitetrack\tver~2&jse~0"                       
[4] ".bluenile.com\tTRUE\t/\tFALSE\t1425230275\tpop\tver~2&china~false&french~false&ie~false&internationalSelect~false&iphoneApp~false&survey~false&uae~false" 
[5] ".bluenile.com\tTRUE\t/\tFALSE\t1475342275\tdsearch\tver~6&newUser~true"                     
[6] ".bluenile.com\tTRUE\t/\tFALSE\t1443806275\tlocale\tver~1&country~IRL&currency~EUR&language~en-gb&productSet~BNUK"           
[7] ".bluenile.com\tTRUE\t/\tFALSE\t0\tbnses\tver~1&ace~false&isbml~false&fbcs~false&ss~0&mbpop~false&sswpu~false&deo~false"         
[8] ".bluenile.com\tTRUE\t/\tFALSE\t1727630275\tbnper\tver~5&NIB~0&DM~-&GUID~DA5C11F5_E468_46B5_B4E8_D551D4D6EA4D&SESS-CT~1&STC~32RPVK&FB_MINI~false&SUB~false" 
[9] "#HttpOnly_www.bluenile.com\tFALSE\t/\tFALSE\t0\tJSESSIONID\tB8475C3AEC08205E5AC6252C94E4B858"                
[10] ".bluenile.com\tTRUE\t/\tFALSE\t1727630278\tmigrationstatus\tver~1&redirected~false"  
+0

신난다. 나는 cookiejar로 일해 보았지만 아무 것도 밝혀 내지 못했습니다. 먼저 그들의 첫 페이지를 방문해야했습니다. 영리한. 이것이 사실인지 어떻게 알았습니까? – stanekam

+3

크롬 시크릿 모드가 실패했다는 사실로 인해 방문 페이지를 살펴보고 무엇이 설정되어 있는지 알 수있었습니다. – jdharrison

+0

브라보, 완벽하게 작동합니다! 인상적인 문제 해결 및 이해. – Tom

관련 문제