Sha256: 9ae8e4a2ec7ededb6df4519aa6c26966843267b8bd5892fa54a5fbe5c8647856

Contents?: true

Size: 1.74 KB

Versions: 1

Compression:

Stored size: 1.74 KB

Contents

module Grooveshark
  module Request
    API_BASE        = 'cowbell.grooveshark.com'
    UUID            = 'A3B724BA-14F5-4932-98B8-8D375F85F266'
    CLIENT          = 'htmlshark'
    CLIENT_REV      = '20110606.04'
    COUNTRY         = {"CC2" => "0", "IPR" => "353", "CC4" => "1073741824", "CC3" => "0", "CC1" => "0", "ID" => "223"}
    TOKEN_TTL       = 120 # 2 minutes
    
    # Client overrides for different methods
    METHOD_CLIENTS = {
      'getStreamKeyFromSongIDEx' => 'jsqueue' 
    }
    
    # Perform API request
    def request(method, params={}, secure=false)
      refresh_token if @comm_token
      
      agent = METHOD_CLIENTS.key?(method) ? METHOD_CLIENTS[method] : CLIENT
      url = "#{secure ? 'https' : 'http'}://#{API_BASE}/more.php?#{method}"
      body = {
        'header' => {
          'session' => @session,
          'uuid' => UUID,
          'client' => agent,
          'clientRevision' => CLIENT_REV,
          'country' => COUNTRY
        },
        'method' => method,
        'parameters' => params
      }
      body['header']['token'] = create_token(method) if @comm_token
      
      begin
        data = RestClient.post(
          url, body.to_json,
          :content_type => :json,
          :accept => :json,
          :cookie => "PHPSESSID=#{@session}"
        )
      rescue Exception => ex
        raise GeneralError    # Need define error handling
      end
      
      data = JSON.parse(data)
      data = data.normalize if data.kind_of?(Hash)
      
      if data.key?('fault')
        raise ApiError.new(data['fault'])
      else
        data['result']
      end
    end
    
    # Refresh communications token on ttl
    def refresh_token
      get_comm_token if Time.now.to_i - @comm_token_ttl > TOKEN_TTL
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
grooveshark-0.2.2 lib/grooveshark/request.rb