2014-02-05 52 views
0

我正在使用Node.js腳本從StackOverflow收集數據。我知道所有的迴應都是gzip,所以我把代碼放在那個應該照顧的地方。我的腳本如下:StackOverflow API不返回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); 
}); 

非但沒有JSON的輸出,我得到如下回應:

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

如果你使用'的問題是什麼。的toString()'? – Joe

回答

3

Joe的解決方案是正確的 - request正在返回一個緩衝流;將其轉換爲toString()將解決該問題。

此外,雖然,它看起來像你不是實際調用JSON端點(你調用一個HTML文檔頁面?)

試試這個:

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())); 
});