Class: Nanoc::DataSources::LastFM Deprecated
- Inherits:
-
Nanoc::DataSource
- Object
- Nanoc::DataSource
- Nanoc::DataSources::LastFM
- Defined in:
- lib/nanoc/data_sources/deprecated/last_fm.rb
Overview
Deprecated.
Fetch data from online data sources manually instead
Instance Attribute Summary
Attributes inherited from Nanoc::DataSource
#config, #items_root, #layouts_root
Instance Method Summary (collapse)
Methods inherited from Nanoc::DataSource
#create_item, #create_layout, #down, #initialize, #layouts, #loading, #setup, #sync, #unuse, #up, #update, #use
Methods included from PluginRegistry::PluginMethods
#all, #identifier, #identifiers, #named, #register
Constructor Details
This class inherits a constructor from Nanoc::DataSource
Instance Method Details
- (Object) items
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/nanoc/data_sources/deprecated/last_fm.rb', line 8 def items @items ||= begin require 'json' require 'uri' # Check configuration if config[:username].nil? raise 'LastFM data source requires a username in the configuration' end if config[:api_key].nil? raise 'LastFM data source requires an API key in the configuration' end # Get data @http_client ||= Nanoc::Extra::CHiCk::Client.new _status, _headers, data = *@http_client.get( 'http://ws.audioscrobbler.com/2.0/' + '?method=user.getRecentTracks' + '&format=json' + '&user=' + URI.escape(config[:username]) + '&api_key=' + URI.escape(config[:api_key]) ) # Parse as JSON parsed_data = JSON.parse(data) raw_items = parsed_data['recenttracks']['track'] # Convert to items raw_items.enum_with_index.map do |raw_item, i| # Get artist data _artist_status, _artist_headers, artist_data = *@http_client.get( 'http://ws.audioscrobbler.com/2.0/' + '?method=artist.getInfo' + '&format=json' + ( if raw_item['artist']['mbid'].empty? '&artist=' + URI.escape(raw_item['artist']['#text']) else '&mbid=' + URI.escape(raw_item['artist']['mbid']) end ) + '&api_key=' + URI.escape(config[:api_key]) ) # Parse as JSON parsed_artist_data = JSON.parse(artist_data) raw_artist_info = parsed_artist_data['artist'] # Build data content = '' # Handle track dates if raw_item['@attr'] && raw_item['@attr']['nowplaying'] == 'true' track_played_at = Time.now = true else track_played_at = Time.parse(raw_item['date']['#text']) = false end attributes = { :name => raw_item['name'], :artist => { :name => raw_artist_info['name'], :url => raw_artist_info['url'] }, :url => raw_item['url'], :played_at => track_played_at, :now_playing => } identifier = "/#{i}/" mtime = nil # Build item Nanoc::Item.new(content, attributes, identifier, mtime) end end end |