<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Audioscrobbler code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 12:51:35 GMT</pubDate>
    <description>DZone Snippets: Audioscrobbler code</description>
    <item>
      <title>Audioscrobbler</title>
      <link>http://snippets.dzone.com/posts/show/5481</link>
      <description>"now_playing" won't have any effect to the statistics, for that use "submit". Use "submit" AFTER playing the song.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'digest/md5'&lt;br /&gt;require 'fileutils'&lt;br /&gt;require 'md5'&lt;br /&gt;require 'net/http'&lt;br /&gt;require 'thread'&lt;br /&gt;require 'uri'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Config={}&lt;br /&gt;Config[:user]="yourlastfmusername"&lt;br /&gt;Config[:password]="yourpassword"&lt;br /&gt;&lt;br /&gt;Submission_settings={}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def do_handshake&lt;br /&gt;		timestamp = Time.now.gmtime.to_i.to_s&lt;br /&gt;&lt;br /&gt;		md5 = Digest::MD5.hexdigest(Config[:password])&lt;br /&gt;		md5 = Digest::MD5.hexdigest(md5 + timestamp)&lt;br /&gt;&lt;br /&gt;# replace c=tst and v=1.0 to a vaild id of a last.fm client.&lt;br /&gt;&lt;br /&gt;		query = "/?hs=true&amp;p=1.2&amp;c=tst&amp;v=1.0&amp;u=#{Config[:user]}&amp;t=#{timestamp}&amp;a=#{md5}"&lt;br /&gt;&lt;br /&gt;		begin&lt;br /&gt;			Net::HTTP.start("post.audioscrobbler.com", 80) do |http|&lt;br /&gt;				resp = http.get(query).body.strip&lt;br /&gt;&lt;br /&gt;				case resp&lt;br /&gt;				when /^OK\n([0-9a-z]+)\n(.+)\n(.+)/&lt;br /&gt;					puts("handshake succeeded")&lt;br /&gt;					Submission_settings[:session_id] = $1&lt;br /&gt;					Submission_settings[:now_playing_url] = URI.parse($2)&lt;br /&gt;					Submission_settings[:submission_url] = URI.parse($3)&lt;br /&gt;				when /^BANNED$/&lt;br /&gt;					puts("banned")&lt;br /&gt;				when /^BADTIME$/&lt;br /&gt;					puts("bad time, go fix your clock")&lt;br /&gt;				when /^FAILED (.+)$/&lt;br /&gt;					puts("handshake failed - #{resp}")&lt;br /&gt;				when /^BADAUTH$/&lt;br /&gt;					puts("handshake failed - bad username/password")&lt;br /&gt;				else&lt;br /&gt;					puts("bad response in handshake - #{resp}")&lt;br /&gt;				end&lt;br /&gt;			end&lt;br /&gt;		rescue SocketError =&gt; err&lt;br /&gt;			puts("socket error: #{err}")&lt;br /&gt;		rescue SystemCallError =&gt; err&lt;br /&gt;			puts("system call error: #{err}")&lt;br /&gt;		rescue IOError =&gt; err&lt;br /&gt;			puts("io error: #{err}")&lt;br /&gt;		rescue Timeout::Error&lt;br /&gt;			puts("timeout during handshake")&lt;br /&gt;		end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def now_playing(a)&lt;br /&gt;	[:band,:song,:album,:lenght,:nr,:mb].each do |i|&lt;br /&gt;		a[i]="" unless a[i]&lt;br /&gt;		a[i]=a[i].to_s.gsub(/ /,'_')&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	Net::HTTP.post_form(Submission_settings[:now_playing_url],{"s"=&gt;Submission_settings[:session_id],"a"=&gt;a[:band], "t"=&gt;a[:song], "b"=&gt;a[:album],"l"=&gt;a[:lenght], "n"=&gt;a[:nr], "m"=&gt;a[:mb]  })&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def submit(a)&lt;br /&gt;	[:band,:song,:album,:lenght,:rating,:nr,:mb].each do |i|&lt;br /&gt;		a[i]="" unless a[i]&lt;br /&gt;		a[i]=a[i].to_s.gsub(/ /,'_')&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;	Net::HTTP.post_form(Submission_settings[:now_playing_url],{"s"=&gt;Submission_settings[:session_id],"a[0]"=&gt;a[:band], "t[0]"=&gt;a[:song],"i[0]" =&gt;Time.now.to_i,"o[0]" =&gt; 'P', "r[0]"=&gt;a[:rating], "b[0]"=&gt;a[:album],"l[0]"=&gt;a[:lenght], "n[0]"=&gt;a[:nr], "m[0]"=&gt;a[:mb]  })&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 10 May 2008 14:37:05 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5481</guid>
      <author>rtzui (rtzui)</author>
    </item>
  </channel>
</rss>
