Google Music Trends com Ruby

10/08/07

Logo do Google Music Trends O Google tem um serviço interessante chamado Music Trends que, baseado nas informações enviadas pelos usuários que utilizam GTalk, cria um ranking de músicas mais ouvidas. Em alguns países como EUA e Índia é possível até visualizar as estatísticas por estilo musical.

Infelizmente, o Google não possui API para estas estatísticas e, por isso, a única solução para obter tais informações é com scraping. Tendo este problema em mente, fiz uma classe que acessa o Google Music Trends e retorna as informações de maneira bastante simples.

require 'google_music_trends'
 
trends = GoogleMusicTrends.new
 
s = "GOOGLE MUSIC TRENDS\n===================\n"
 
trends.get(:genre => 'alternative & punk', :where => 'USA').each do |item|
  s << "Artist: %s\n" % item[:artist]
  s << "Song: %s\n" % item[:song]
  s << "Rank: #%s\n\n" % item[:rank] 
end
 
puts s

Você precisará ter o Hpricot instalado, então, se você ainda não o tiver, execute o comando gem install hpricot.

A classe está disponível no Subversion. Para pegar a versão mais recente, execute o comando svn co http://svn.simplesideias.com.br/general/ruby/google_music_trends

Removendo caracteres com o método trim no Ruby

02/08/07

Já precisou remover caracteres de uma string, com funções semelhantes a trim, rtrim e ltrim do PHP? Pois é! No Ruby você não tem isso nativamente. Para adicionar tais funcionalidades, basta estender a classe String com os métodos abaixo.

class String
  def trim!(chars)
    rtrim!(chars)
    ltrim!(chars)
  end
 
  def rtrim!(chars)
    gsub!(/(#{trim_prepare(chars)})+$/, '')
  end
 
  def ltrim!(chars)
    gsub!(/^(#{trim_prepare(chars)})+/, '')
  end
 
  def trim(chars)
    dup.rtrim(chars).ltrim(chars)
  end
 
  def rtrim(chars)
    dup.rtrim!(chars)
  end
 
  def ltrim(chars)
    dup.ltrim!(chars)
  end
 
  private
    def trim_prepare(chars)
      chars = chars.split("").collect { |char| Regexp.escape(char) }
      chars.join('|')
    end
end

Seu funcionamento é muito semelhante às funções do PHP. Veja:

text = '|_ ruby _|'
puts text.trim(' _|')  # both sides
puts text.ltrim(' _|') # left side
puts text.rtrim(' _|') # right side

Lembre-se que você não precisa passar os caracteres que serão removidos na ordem em que eles aparecem.

Código-fonte do Sounds Like

25/06/07

A Long Time Ago in a Galaxy Far, Far Away…

Conforme prometido, aqui está o código-fonte do Sounds Like, projeto enviado ao Rails Rally 2007: soundslikenow.tar.gz.

Vale lembrar que o código-fonte é o da mesma versão que foi enviado para o concurso e, portanto, é muito mais simples do que o que está atualmente em soundslikenow.org.

Divirta-se!