Class: Notu::MostPlayedTracks

Inherits:
Object
  • Object
show all
Includes:
Listing
Defined in:
lib/notu/most_played_tracks.rb

Constant Summary collapse

PERIODS =
{
  '7 days' => 'LAST_7_DAYS',
  '30 days' => 'LAST_30_DAYS',
  '90 days' => 'LAST_90_DAYS',
  '365 days' => 'LAST_365_DAYS',
  'Overall' => '',
}

Instance Attribute Summary collapse

Attributes included from Listing

#library

Instance Method Summary collapse

Methods included from Listing

#page_urls, #pages_count

Constructor Details

#initialize(library, options = {}) ⇒ MostPlayedTracks

Returns a new instance of MostPlayedTracks.



17
18
19
20
21
# File 'lib/notu/most_played_tracks.rb', line 17

def initialize(library, options = {})
  super(library)
  options = options.stringify_keys.reverse_merge('period' => PERIODS.keys.first)
  self.period = options['period']
end

Instance Attribute Details

#periodObject

Returns the value of attribute period.



15
16
17
# File 'lib/notu/most_played_tracks.rb', line 15

def period
  @period
end

Instance Method Details

#each(&block) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/notu/most_played_tracks.rb', line 23

def each(&block)
  return unless block_given?
  page_urls.each do |url|
    document = HtmlDocument.get(url)
    (document/'table.chartlist tbody tr').each do |element|
      artist = (element/'td.chartlist-name .chartlist-artists').first.try(:text) || next
      title = (element/'td.chartlist-name .link-block-target').first.try(:text) || next
      plays_count = (element/'td.chartlist-countbar .countbar-bar-value').text.gsub(/[^\d]/, '').presence || next
      yield(Track.new(artist: artist, plays_count: plays_count, title: title))
    end
  end
  nil
end

#paramsObject



37
38
39
# File 'lib/notu/most_played_tracks.rb', line 37

def params
  { 'date_preset' => PERIODS[period] }
end

#pathObject



41
42
43
# File 'lib/notu/most_played_tracks.rb', line 41

def path
  'library/tracks'
end