2014-02-05 7 views
0

Node.js 스크립트를 사용하여 StackOverflow에서 데이터를 수집하고 있습니다. 나는 모든 응답이 gzip 된 것을 알고 있으므로 코드를 넣어서 처리해야한다. 다음과 같이 내 스크립트입니다 :StackOverflow API가 JSON을 반환하지 않습니다.

대신에, 나는 다음과 같은 응답을 받고있어 JSON 출력을 얻기의
var request = require('request'); 
var zlib = require('zlib'); 

function getStackOverflowResponse(url, callback){ 
    request(url, {encoding: null}, function(err, response, body){ 
     if(response.headers['content-encoding'] == 'gzip'){ 
      zlib.gunzip(body, function(err, dezipped) { 
      callback(dezipped); 
      }); 
     } else { 
      callback(body); 
     } 
    }); 
} 

var url = "https://api.stackexchange.com/docs/questions#pagesize=2&order=desc&min=2014-01-04&max=2014-02-02&sort=activity&tagged=apigee&filter=default&site=stackoverflow&run=true"; 

getStackOverflowResponse(url, function(questions) { 
    console.log(questions); 
}); 

:

Buffer 0d 0a 0d 0a 0d 0a 0d 0a 3c 21 44 4f 43 54 59 50 45 20 48 54 4d 4c 3e 0d 0a 3c 68 74 6d 6c 20 6c 61 6e 67 3d 22 65 6e 22 3e 0d 0a 3c 68 65 61 64 3e 20 0d ... 

는 응답이 개방에 동봉되어 나는 그래서 제거 꺾쇠 괄호 닫기 여기에 나타납니다.

가 대신 callback(dezipped);의 내가 callback(JSON.parse(dezipped));callback(JSON.parse(dezipped.toString()));

아무것도를 시도한 것은 나를 위해 일하게 될 것으로 보인다. 내가하는 일과 관계없이 나는 여전히 Buffer 결과를 얻는다. 이 작업을 수행하는 방법에 대한 도움은 크게 감사하겠습니다.

+2

을 : 당신이 실제로 JSON 엔드 포인트를 (? 당신은 HTML의 문서 페이지를 호출하고)

이 시도 호출하지 않는 것처럼

또한하지만, 그것은 보인다. toString()'? – Joe

답변

3

조 솔루션이 올바른 것입니다 - request이 버퍼 스트림을 반환하고 있습니다. toString()으로 변환하면 문제가 해결됩니다. 당신이 '질문을 사용하는 경우 어떤

var request = require('request'); 
var zlib = require('zlib'); 

function getStackOverflowResponse(url, callback) { 
    request(url, { 
     encoding: null 
    }, function (err, response, body) { 
     if (response.headers['content-encoding'] == 'gzip') { 
      zlib.gunzip(body, function (err, dezipped) { 
       callback(dezipped); 
      }); 
     } else { 
      callback(body); 
     } 
    }); 
} 

var url = "https://api.stackexchange.com/2.1/questions?pagesize=2&order=desc&min=2014-01-04&max=2014-02-02&sort=activity&tagged=apigee&filter=default&site=stackoverflow&run=true"; 

getStackOverflowResponse(url, function (questions) { 
    console.log(JSON.parse(questions.toString())); 
}); 
관련 문제