class Pandora::Song

Constants

ALL_AUDIO_FORMATS
DEFAULT_AUDIO_FORMATS

Attributes

album[R]
album_art_url[R]
album_explorer_url[R]
album_url[R]
allow_feedback[R]
amazon_album_asin[R]
amazon_album_digital_asin[R]
amazon_album_url[R]
amazon_song_digital_asin[R]
artist[R]
artist_explorer_url[R]
artist_url[R]
audio_url[R]
audio_urls[R]
gain[R]
itunes_song_url[R]
rating[R]
song_explorer_url[R]
title[R]
token[R]
url[R]

Public Class Methods

new(station, data, audio_formats) click to toggle source
# File lib/pandora/song.rb, line 26
def initialize(station, data, audio_formats)
  @station = station
  load_from_data(data, audio_formats)
end

Public Instance Methods

id() click to toggle source
# File lib/pandora/song.rb, line 31
def id
  load_explorer_data unless @id
  @id
end

Private Instance Methods

load_explorer_data() click to toggle source

Unfortunately the Tuner API track JSON doesn’t include the musicId, a track identifier that’s constant among different user sessions. However, we can fetch it via the Song’s Explorer XML URL.

# File lib/pandora/song.rb, line 74
def load_explorer_data
  document = Nokogiri::XML(Faraday.get(@song_explorer_url).body)
  @id = document.search('songExplorer').first['musicId']
end
load_from_data(data, audio_formats) click to toggle source
# File lib/pandora/song.rb, line 39
def load_from_data(data, audio_formats)
  @title = data['songName']
  @token = data['trackToken']
  @artist = data['artistName']
  @album = data['albumName']
  @album_art_url = data['albumArtUrl']
  @rating = data['songRating']
  @gain = data['trackGain']
  @allow_feedback = data['allowFeedback']
  @url = data['songDetailUrl']
  @album_url = data['albumDetailUrl']
  @artist_url = data['artistDetailUrl']

  @amazon_album_asin = data['amazonAlbumAsin']
  @amazon_album_digital_asin = data['amazonAlbumDigitalAsin']
  @amazon_song_digital_asin = data['amazonSongDigitalAsin']
  @amazon_album_url = data['amazonAlbumUrl']
  @itunes_song_url = data['itunesSongUrl']

  @song_explorer_url = data['songExplorerUrl']
  @album_explorer_url = data['albumExplorerUrl']
  @artist_explorer_url = data['artistDetailUrl']

  @audio_url = data['audioUrl']
  @audio_urls =
    if (additional_audio_urls = data['additionalAudioUrl'])
      Hash[audio_formats.zip(additional_audio_urls)]
    else
      {}
    end
end