2012-05-01 8 views
0

auth.getMobileSessionメソッドを使用して、last.fm REST APIを使用して構築されたlast.fmアプリケーションのユーザーを認証しようとしています。last.fm api ruby​​のauthTokenを作成する

password = Digest::MD5.hexdigest("my_password") 
auth_token = Digest::MD5.hexdigest("#{user_name}#{password}") 
url_with_params = URI.parse("#{url}?method=auth.getmobilesession&api_key=#{api_key}&username=#{user_name}&authtoken=#{auth_token}&api_sig=#{api_sig}&format=json") 
resp = Net::HTTP.get_response(url_with_params) 
puts JSON.parse(resp.body) 

私は取得しています出力は次のようになります。

Last.fmは、モバイルアプリケーションのために、我々はこれは私がRubyでやろうとしていますものですAuthToken

authToken (Required) : A 32-byte ASCII hexadecimal MD5 hash of the last.fm username and  the user's password hash. i.e. md5(username + md5(password)), where '+' represents a concatenation. The username supplied should match the string used to generate the authToken. 

送信する必要があると述べています:

{"error"=>4, "message"=>"Invalid authentication token. Please check username/password supplied"} 

私は間違っていると誰に教えてもらえますか?

答えて

1

私は実際にこれを行っています。あなたのために私のコードを手に入れましょう。

token = Digest::MD5.hexdigest("#{params[:lfmuser]}#{params[:pass]}") ## given md5 hashed password 
#token = Digest::MD5.hexdigest("#{params[:lfmuser]}#{Digest::MD5.hexdigest(params[:pass])}") ## given plaintext password 

## api_sig is all calls to the api put in alphabetical order, then the apisecret stuck on the end, then md5 hash it all. 
apisig = Digest::MD5.hexdigest("api_key#{@bot.config['lastfm.api_key']}authToken#{token}methodauth.getmobilesessionusername#{params[:lfmuser]}#{@bot.config['lastfm.secret']}") 
opts = {:cache => false} 
xml = @bot.httputil.get_response("#{lastfm_api_url}method=auth.getmobilesession&username=#{CGI.escape params[:lfmuser]}&authToken=#{token}&api_sig=#{apisig}", opts) 
response = Document.new xml.body 
unless response 
    m.reply "could not parse xml from last.fm - omg" 
    return 
end 
if xml.class == Net::HTTPBadRequest 
    m.reply "error from last.fm: #{response.root.elements["error"].text}" 
    return 
end 
## skey is used to do things that need authorization on last.fm, store this however you want 
skey = response.root.elements[1].elements["key"].text 

これはあなたがする必要がある基本です。

関連する問題