2010-04-30 1 views
0

타사 서버에서 호스팅되는 XML 데이터 피드에서 제품에 대한 정보를 가져 오는 레일 앱을 제작하고 있습니다. 이 XML은 gzipped로 보내지 만, 나는 어디서나 얻을 수있는 심각한 어려움을 겪고있다.레일에서 XML URL 열기 및 압축 해제

나는 이것으로 Google과 상당한 시간을 보냈지 만, 내 검색 결과는 Gzipped 입력을받는 대신 Gzipped 출력을 보내는 것에 관한 것 같습니다.

닫힌 나는 해결책에 와서 StackOverflow에서 왔지만 여전히 오류가 발생합니다.

첫 번째 인스턴스에서 수행하려는 작업은 XML 데이터를 브라우저에 인쇄 한 다음 처리하는 것으로 시작할 수 있습니다.

Zlib::DataError in Cron/get datafeedController#load_data 

잘못된 헤더 검사가

내가 추측이 그 의미 :

def load_data 
    url = "http://xml.domain.com/datafeed/" 
    xml_input = Net::HTTP.get(URI.parse(url)) 
    zstream = Zlib::Inflate.new 
    @xml_output = zstream.inflate(xml_input) 
    zstream.finish 
    zstream.close 
    end 

나는 그것에서지고있어 오류가 있습니다 : 여기에 내 현재 코드입니다 데이터가 예상되는 형식이 아니지만 어디서나 올바르게 수행하는 방법에 대한 정보를 찾을 수 없습니다. 제가 배제한 두 가지는 URL이 유효하고 응답이 Gzipped이지만,이 방법을 사용하는 방법과 함께 붙어 있습니다.

도움이 될 것입니다 .-)

+0

이것은 바보 같은 질문처럼 보일 수 있습니다,하지만 당신은 * 확실히 *이 gzip으로 압축 된 것입니까? 압축을 풀지 않고 그대로 데이터 처리를 시도 했습니까? 특히 작은 프로젝트/서비스에서 API에 대한 문서화가 실제 구현보다 뒤쳐지지 않는 경우는 드뭅니다. –

답변

2

분류 됨!

file = Net::HTTP.get(URI.parse(url)) 
gz = Zlib::GzipReader.new(StringIO.new(file)) 
whole_xml = gz.read 

그런 다음 XML 파싱 할 Hpricot을에로드 :

hp = Hpricot(whole_xml)