2016-04-22 6 views
0

Я пытаюсь получить первый URL-адрес предварительного просмотра от исполнителя, но каждый раз, когда я выполняю поиск, он возвращает сломанный json. Я могу разобрать его как строку, чтобы получить то, что мне нужно, но json будет намного проще. Вот мой код:Spotify API top-tracks broken

const https = require('https'); 
var open = require('open') 

function songError(){ 
    console.log('There was some kind of error fetching your artist ;('); 
} 

function getTopSong(p_id){ 
    https.get('https://api.spotify.com/v1/artists/'+p_id+'/top-tracks?country=BR', function(res){ 
     res.on("data", function(chunk){ 
      var json = JSON.parse(chunk.toString('utf8')); 
      console.log(json); 
     }); 
    }); 
} 

function getArtistID(p_name) { 
    https.get('https://api.spotify.com/v1/search?q='+encodeURI(p_name)+'&type=artist', function(res){ 
     res.on("data", function(chunk) { 
      var json = JSON.parse(chunk.toString('utf8')); 
      if(json['artists']['items'][0]['id'] != undefined || json['artists']['items'][0]['id'] != null){ 
       console.log('id: ',json['artists']['items'][0]['id']); 
       getTopSong(json['artists']['items'][0]['id']); 
      }else 
      { 
       songError(); 
      } 
     }); 
    }); 
} 

getArtistID("rage against the machine"); 

Там, кажется, ошибка в строке 329:

undefined:329 
    "available_markets" : [ "AR", "AU", "AT", "BE", "BO", "BR", "BG", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "DE", "EC", "EE", "SV", "FI", "FR", "GR", " 

Мой вопрос, я делаю что-то неправильно, или это действительно работает? Спасибо!

ответ

0

я мог свернуться без каких-либо проблем, по крайней мере:

$ curl -s 'https://api.spotify.com/v1/artists/2d0hyoQ5ynDBnkvAbJKORj/top-tracks?country=BR' | python -mjson.tool | tail 
      "id": "25CbtOzU8Pn17SAaXFjIR3", 
      "name": "Take The Power Back - Remastered", 
      "popularity": 58, 
      "preview_url": "https://p.scdn.co/mp3-preview/b44e8f96a219871587d0559970ca5dce71c891f2", 
      "track_number": 3, 
      "type": "track", 
      "uri": "spotify:track:25CbtOzU8Pn17SAaXFjIR3" 
     } 
    ] 
} 

Я не знаю много о nodejs, но вам не нужно сцепить все обратные вызовы res.on («данные»

?

https://nodejs.org/api/http.html#http_http_request_options_callback

https.get('https://api.spotify.com/v1/artists/' + p_id + '/top-tracks?country=BR', function(res) { 
    var body = []; 
    res.on("data", function(chunk) { 
    body.push(chunk); 
    }); 
    res.on("end", function() { 
    var json = JSON.parse(Buffer.concat(body).toString("utf8")); 
    console.log(json); 
    }); 
}); 

Если ответ долго и серверы Spotify решает отправить ответ обратно Chunked кодирования передачи, то nodejs модуль HTTP, вероятно, разделяет Рез ответьте также.

+0

Вот и все, я забыл соединить все это, глупая ошибка! спасибо! –

+0

И я просто понял, что это, вероятно, не имеет ничего общего с кодировкой передачи с сервера. Апи, вероятно, разложит тело на куски в любом случае, чтобы вы могли загружать гигабайты без необходимости читать все в памяти. – jooon