StackOverflow API not returning JSON



我正在使用node.js脚本从stackoverflow收集数据。我知道所有响应都是gzz的,所以我在其中提出了代码。我的脚本如下:

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

似乎没有什么对我有用的。无论我做什么,我仍然会得到缓冲结果。关于如何完成这项工作的任何帮助将不胜感激。

乔的解决方案是正确的 - 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()));
});

最新更新