#!/usr/bin/env ruby #Lorenz Röhrl 2006 #hurra@hurra.homelinux.org require "net/http" puts "fetching from last.fm" track=`dcop amarok player title` artist=`dcop amarok player artist` artist=artist[0...artist.length-1] track=track[0...track.length-1] puts artist puts track query="select tags.url from tags,artist where tags.title='#{track}' AND tags.artist=artist.id AND artist.name='#{artist}';" #puts query message=`dcop amarok collection query "select tags.url from tags,artist where tags.title='#{track}' AND tags.artist=artist.id AND artist.name='#{artist}';"` puts message message=message[0..message.length-2] #ar2= `dcop amarok collection query "select artist.name, tags.title from tags, artist where tags.artist=artist.id and url='#{message}';"` #artist=ar2.split("\n")[0] #track=ar2.split("\n")[1] track.gsub!( " ", "+" ) artist.gsub!( " ", "+" ) #http://www.last.fm/music/Belle+and+Sebastian/_/Expectations/+tags proxy_host = nil proxy_port = nil if ( ENV['http_proxy'] && proxy_uri = URI.parse( ENV['http_proxy'] ) ) proxy_host = proxy_uri.host proxy_port = proxy_uri.port end h = Net::HTTP.new( "www.last.fm", 80, proxy_host, proxy_port ) response = h.get( "/music/#{artist}/_/#{track}/+tags") erg=response.body() puts "extracting infos" erg.gsub!( "\n", "" ) # No need for LF, just complicates our RegExps erg.gsub!( "\r", "" ) # No need for CR, just complicates our RegExps erg=/
(.+)\?<\/a>/.match(erg) if erg!=nil erg=erg[1] ergar=Array.new() erg.split("/.match(arg)[1].gsub("+"," ") ergar.push(t) #puts t end end puts "found tags:" puts ergar.join(" - ") r=`dcop amarok collection query "select deviceid,uniqueid from statistics where url='#{message}';"` deviceid=r.split("\n")[0] uniqueid=r.split("\n")[1] puts "adding data to database tables" ergar.each do |e| test=`dcop amarok collection query "select count(name) from labels where name='#{e}';"` test=test[0..test.length-1] if test.to_i==0 #puts "#{e} not in" `dcop amarok collection query "INSERT INTO labels (name,type) VALUES('#{e}',1);"` else #puts "#{e} already in labels" end lid=`dcop amarok collection query "select id from labels where name='#{e}'"` test=`dcop amarok collection query "select count(tags_labels.url) from tags_labels,labels where tags_labels.deviceid='#{deviceid}' and tags_labels.url='#{message}' and tags_labels.uniqueid='#{uniqueid}' and tags_labels.labelid=#{lid}"` test=test[0..test.length-1] if test.to_i==0 #puts message + "_" + artist + "_" + track + "_" + lid.to_s + "_" + deviceid.to_s + "_" + uniqueid.to_s #puts "#{e} not in, adding .." `dcop amarok collection query "INSERT INTO tags_labels (deviceid,url,uniqueid,labelid) VALUES(#{deviceid},'#{message}','#{uniqueid}',#{lid});"` else #puts message + "_" + artist + "_" + track + "_" + lid.to_s + "_" + deviceid.to_s + "_" + uniqueid.to_s #puts "already in" end #puts "" end else puts "no tags found" end