このプロジェクトで CodePen を使用しているため、コードに無限ループがあることがわかりました。余談ですが、無限ループの行番号は行 0 であると推定されます。そのため$(document).ready()
、コードと関係があると思われます。
私は jQuery/API の初心者なので、これが明らかな場合は申し訳ありません。
コードは次のとおりです。
$(document).ready(function() {
var key = '*****************';
var i = 0;
var hotArray = [];
function isInArray(value, array) {
return array.indexOf(value) > -1;
}
function getMusic() {
$.getJSON('http://developer.echonest.com/api/v4/song/search?api_key=' + key + '&artist=led+zeppelin&sort=song_hotttnesss-desc&results=50&bucket=song_hotttnesss', function(data) {
while ($('.songs li').length < 10) {
if (!(isInArray(data.response['songs'][i]['hotttnesss'], hotArray))) {
$('.songs').append('<li>' + data.response['songs'][i]['title'] + '</li>');
hotArray.push(data.response['songs'][i]['hotttnesss'])
}
}
i++;
});
};
$('.click').click(getMusic);
});
コードの簡単な説明:
ページの特定の部分をクリックすると、Led Zeppelin の上位 10 曲を取得しようとしています (後でユーザーが入力したアーティストに拡張されます)。しかし、Echo Nest API の仕組みでは、非常に多くの重複が返されます。たとえば、「天国への階段」と「天国への階段」は 2 つの別個の曲と見なされます。
この問題を回避するために、すべての曲に固有の各曲の「hotttnesss」値を使用しています。同じアーティストによる 2 つの曲が同じホットさを持つことができる唯一の方法は、これらの重複の場合のように、それらが実際に同じ曲である場合です。
そのため、報告された曲の数が 10 未満である間に、返された各曲をステップ実行し、その hotttness 値が既に報告された曲の hotttness 値の配列に含まれていない場合は曲を報告しています。曲を報告した後、その曲のホットネス値が配列に追加されます。