2010-01-08 2 views
2

사용자의 최근 트랙 대신 사용자가 좋아하는 아티스트를 표시하도록 this 스크립트를 사용자 정의하려고합니다.jQuery + get.JSON + Last.FM 문제

이것은 내가 생각해 낸 것이지만 전혀 작동하지 않습니다. 피드의 속성을 쉽게 변경한다고 생각했지만 분명히 그렇지 않습니다.

(function($){ 
$.fn.lastFM = function(options) { 

var defaults = { 
number: 10, 
username: 'willblackmore', 
apikey: '96e0589327a3f120074f74dbc8ec6443', 
artSize: 'medium', 
noart: 'images/noartwork.gif', 
onComplete: function(){} 
}, 
settings = $.extend({}, defaults, options); 



var lastUrl = 'http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user='+settings.username+'&api_key='+settings.apikey+'+'&limit='+settings.number+'&format=json&callback=?'; 
var $this = $(this); 

var container = $this.html(); 

$this.children(':first').remove(); 

if(settings.artSize == 'small'){imgSize = 0} 
if(settings.artSize == 'medium'){imgSize = 1} 
if(settings.artSize == 'large'){imgSize = 2} 

this.each(function() { 

$.getJSON(lastUrl, function(data){ 
$.each(data.topartists.artist, function(i, item){ 

if(item.image[1]['#text'] == ''){ 
    art = settings.noart; 
}else{ 
    art = stripslashes(item.image[imgSize]['#text']); 
} 

url = stripslashes(item.url); 
song = item.name; 
artist = item.playcount['#text']; 
album = item.streamable['#text']; 

$this.append(container); 

var $current = $this.children(':eq('+i+')'); 

$current.find('[class=lfm_song]').append(song); 
$current.find('[class=lfm_artist]').append(artist); 
$current.find('[class=lfm_album]').append(album); 
$current.find('[class=lfm_art]').append("<img src='"+art+"' alt='Artwork for "+album+"'/>"); 
$current.find('a').attr('href', url).attr('title', 'Listen to '+song+' on Last.FM').attr('target', '_blank'); 

//callback 
if(i==(settings.number-1)){ 
    settings.onComplete.call(this); 
} 

    }); 
}); 
}); 
}; 

//Clean up the URL's 
function stripslashes(str) { 
return (str+'').replace(/\0/g, '0').replace(/\\([\\'"])/g, '$1'); 
} 
})(jQuery);` 

아이디어가 있으십니까? 감사.

+0

api 키를 게시 하시겠습니까? – g33kz0r

답변

2

URL을 잘못 concencated했습니다. 유효한 내용 :

var lastUrl = 'http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=' + settings.username + '&api_key=' + settings.apikey + '&limit=' + settings.number + '&format=json&callback=?'; 

세부 정보 (오류 등)가 충분하지 않아 문제가 해결되지 않을 수 있습니다.

+2

그리고 어쨌든 URL을 만들기 위해 연결해서는 안됩니다. jQuery가 데이터를 올바르게 이스케이프하도록하려면 $ .getJSON의 두 번째 매개 변수를 사용해야합니다. jQuery 근처에서 보았던 거의 모든 * 연결의 사용은 잘못되어 피할 수 있습니다. –

+0

이것은 내 문제를 해결합니다! 감사! 따라서 간단합니다. URL을 볼 필요가 있습니다. 그 앞면에 ... '연결'이 무엇인지 모르겠지만, 예를 들어 '+ settings.username +''라고 생각하십니까? 왜 그것이 나쁘고 $ .getJSON의 두 번째 매개 변수는 무엇입니까? –

+0

내가 문제를 해결하면 내 대답을 받아 들여야합니다. 귀하의 질문에 관해서는 다른 질문을하십시오. 연결은 여러 문자열을 하나의 문자열로 묶는 것을 의미합니다 (+를 사용하면됩니다). –