2015-04-20 10 views
6

Próbuję napisać prosty fragment kodu za pomocą NodeJS, aby odzyskać JSON z interfejsu API wymiany stosu.NodeJS zwracające śmieci JSON

Jest to API Jestem targetting- https://api.stackexchange.com/2.2/users?order=desc&sort=reputation&inname=donal%20rafferty&site=stackoverflow

I tu jest mój kod:

var https = require('https'); //Use NodeJS https module 

function getUserDataByName(userName, callback){ 

var stackOverflowUserURL = 'https://api.stackexchange.com/2.2/users?order=desc&sort=reputation&inname='+encodeURIComponent(userName)+'&site=stackoverflow'; 

https.get(stackOverflowUserURL, function(response){ 
    console.log("headers: ", response.headers); 
    if (response.statusCode == 200) { 
     var jsonString = ''; 
     response.on('data', function (chunk) { 
      jsonString += chunk; 
     }); 
     response.on('end', function() { 
      console.log((jsonString)); 
      callback(JSON.stringify(jsonString)); 
     }); 
    } 
    else{ 
     //error 
     console.log("Error"); 
    } 
}); 
} 

Jednak gdy uruchamiam to dane zawsze wraca w stanie śmieci jak tekst jak poniżej :

\ "\ u001f \ b \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0004 \ u0000uRn0 \ fB ږ \ u00132 \ u0010R �m�u\\u0018\\u0004ڢ\\u001d!��Jr=�ȿ�vS\\u0004\\u0005������H����C 7ր Q n \ u0014 \ u0014 {g \\ " ] + zV \ u001f (V % a n | ) QU .O \ u000e \ u0012 Ѹ \ u0005 \ u0003 \ u00130a \ u0006B S Ө C^ bw I \ u000bC b \ u0017e \ u0013 q \\ "D lO` @^\ nq \ u0017 | ի ? PFz i R \ u000f , [ pu {x \ b ~ k LUV \ u0012 \ u00194 l \ u000e ڕ \ rW \ u001c * \ u001a 9 \ u001e Q + Q > o ; a '\ btI b/ \ u0007 CK \ u0000 j ۯ \ u0003g | \ u0003 \ u0002 \ u0000 \ u0000 \

jestem przy założeniu, że jest coś nie tak z moim kodowania/dekodowania, ale nie mogę dowiedzieć się, co zrobić, aby rozwiązać ten problem ?

+0

Czy to skompresowany, może? Może być konieczne zdekompresowanie go za pomocą 'zlib' – tadman

+0

@DarrenSweeney" Kiedy nazywam to bezpośrednim, jest w porządku "--- Z przeglądarką? Przeglądarka automatycznie odszyfrowuje. Odpowiedź jest spakowana gzip, spójrz na nagłówek odpowiedzi. –

+0

Od dawna nie robiłem nic z node.js, ale rozglądając się w kółko, może się okazać, że musisz odpakować odpowiedź, która jest gzipowana (spójrz na nagłówek odpowiedzi, przeglądarka pokazuje zwykły tekst, ponieważ wykonuje ten krok automatycznie). --- Przykładowy kod: https://erikberg.com/api/examples/nodejs –

Odpowiedz

5

trzeba zdekodować odpowiedź jak to skompresowane

var https = require('https'); //Use NodeJS https module 
var zlib = require("zlib"); 

function getUserDataByName(userName, callback){ 

var stackOverflowUserURL = 'https://api.stackexchange.com/2.2/users?order=desc&sort=reputation&inname='+encodeURIComponent(userName)+'&site=stackoverflow'; 

https.get(stackOverflowUserURL, function(response){ 
    console.log("headers: ", response.headers); 
    console.log(response.statusCode) 
    if (response.statusCode == 200) { 
     var gunzip = zlib.createGunzip(); 
     var jsonString = ''; 
     response.pipe(gunzip); 
     gunzip.on('data', function (chunk) { 
      jsonString += chunk; 
     }); 
     gunzip.on('end', function() { 
      console.log((jsonString)); 
      callback(JSON.stringify(jsonString)); 
     }); 
     gunzip.on('error', function (e) { 
      console.log(e); 
     }); 
    } 
    else{ 
     //error 
     console.log("Error"); 
    } 
}); 
} 
+1

darn it you beat me to, wiedziałem, że został spakowany gzip i próbował dowiedzieć się, jak to rozszyfrować: D GJ: D – DrCord