Class: Nanoc3::DataSources::LastFM

### Home Classes Methods

### In Files

- lib/nanoc3/data_sources/deprecated/last_fm.rb

### Parent

Nanoc3::DataSource

### Methods

- #items

### Files

- ChangeLog
- LICENSE

### Class/Module Index

Quicksearch

- Nanoc3
- Nanoc3::ArrayExtensions
- Nanoc3::CLI
- Nanoc3::CLI::Base
- Nanoc3::CLI::Commands
- Nanoc3::CLI::Commands::Autocompile
- Nanoc3::CLI::Commands::Compile
- Nanoc3::CLI::Commands::CreateItem
- Nanoc3::CLI::Commands::CreateLayout
- Nanoc3::CLI::Commands::CreateSite
- Nanoc3::CLI::Commands::Debug
- Nanoc3::CLI::Commands::Help
- Nanoc3::CLI::Commands::Info
- Nanoc3::CLI::Commands::Update
- Nanoc3::CLI::Commands::View
- Nanoc3::CLI::Logger
- Nanoc3::CodeSnippet
- Nanoc3::Compiler
- Nanoc3::CompilerDSL
- Nanoc3::Context
- Nanoc3::DataSource
- Nanoc3::DataSources
- Nanoc3::DataSources::Delicious
- Nanoc3::DataSources::Filesystem
- Nanoc3::DataSources::FilesystemUnified
- Nanoc3::DataSources::FilesystemVerbose
- Nanoc3::DataSources::LastFM
- Nanoc3::DataSources::Twitter
- Nanoc3::DependencyTracker
- Nanoc3::DirectedGraph
- Nanoc3::Errors
- Nanoc3::Errors::CannotDetermineFilter
- Nanoc3::Errors::CannotLayoutBinaryItem
- Nanoc3::Errors::CannotUseBinaryFilter
- Nanoc3::Errors::CannotUseTextualFilter
- Nanoc3::Errors::DataNotYetAvailable
- Nanoc3::Errors::Generic
- Nanoc3::Errors::NoMatchingCompilationRuleFound
- Nanoc3::Errors::NoMatchingRoutingRuleFound
- Nanoc3::Errors::NoRulesFileFound
- Nanoc3::Errors::RecursiveCompilation
- Nanoc3::Errors::UnknownDataSource
- Nanoc3::Errors::UnknownFilter
- Nanoc3::Errors::UnknownLayout
- Nanoc3::Errors::UnmetDependency
- Nanoc3::Extra
- Nanoc3::Extra::AutoCompiler
- Nanoc3::Extra::CHiCk
- Nanoc3::Extra::CHiCk::CacheController
- Nanoc3::Extra::CHiCk::Client
- Nanoc3::Extra::CHiCk::RackClient
- Nanoc3::Extra::Deployers
- Nanoc3::Extra::Deployers::Rsync
- Nanoc3::Extra::FileProxy
- Nanoc3::Extra::TimeExtensions
- Nanoc3::Extra::VCS
- Nanoc3::Extra::VCSes
- Nanoc3::Extra::VCSes::Bazaar
- Nanoc3::Extra::VCSes::Dummy
- Nanoc3::Extra::VCSes::Git
- Nanoc3::Extra::VCSes::Mercurial
- Nanoc3::Extra::VCSes::Subversion
- Nanoc3::Extra::Validators
- Nanoc3::Extra::Validators::Links
- Nanoc3::Extra::Validators::Links::EachPairEnumerator
- Nanoc3::Extra::Validators::W3C
- Nanoc3::Filter
- Nanoc3::Filters
- Nanoc3::Filters::BlueCloth
- Nanoc3::Filters::CodeRay
- Nanoc3::Filters::ColorizeSyntax
- Nanoc3::Filters::ERB
- Nanoc3::Filters::Erubis
- Nanoc3::Filters::Haml
- Nanoc3::Filters::Kramdown
- Nanoc3::Filters::Less
- Nanoc3::Filters::Markaby
- Nanoc3::Filters::Maruku
- Nanoc3::Filters::RDiscount
- Nanoc3::Filters::RDoc
- Nanoc3::Filters::Rainpress
- Nanoc3::Filters::RedCloth
- Nanoc3::Filters::RelativizePaths
- Nanoc3::Filters::RubyPants
- Nanoc3::Filters::Sass
- Nanoc3::HashExtensions
- Nanoc3::Helpers
- Nanoc3::Helpers::Blogging
- Nanoc3::Helpers::Breadcrumbs
- Nanoc3::Helpers::Capturing
- Nanoc3::Helpers::Filtering
- Nanoc3::Helpers::HTMLEscape
- Nanoc3::Helpers::LinkTo
- Nanoc3::Helpers::Rendering
- Nanoc3::Helpers::Tagging
- Nanoc3::Helpers::Text
- Nanoc3::Helpers::XMLSitemap
- Nanoc3::Item
- Nanoc3::ItemRep
- Nanoc3::Layout
- Nanoc3::NotificationCenter
- Nanoc3::PluginRegistry
- Nanoc3::PluginRegistry::PluginMethods
- Nanoc3::Rule
- Nanoc3::RuleContext
- Nanoc3::Site
- Nanoc3::StringExtensions
- Nanoc3::Tasks
- Nanoc3::Tasks::Clean
- Array
- Enumerable
- Hash
- Object
- OrderedHash
- String
- Time

No matching classes.

# Nanoc3::DataSources::LastFM

@deprecated Fetch data from online data sources manually instead

### Public Instance Methods

items() click to toggle source

    # File lib/nanoc3/data_sources/deprecated/last_fm.rb, line 7
    def items
      @items ||= begin
        require 'json'
        require 'time'
        require 'uri'
        require 'enumerator'

        # Check configuration
        if self.config[:username].nil?
          raise RuntimeError, "LastFM data source requires a username in the configuration"
        end
        if self.config[:api_key].nil?
          raise RuntimeError, "LastFM data source requires an API key in the configuration"
        end

        # Get data
        @http_client ||= Nanoc3::Extra::CHiCk::Client.new
        status, headers, data = *@http_client.get(
          'http://ws.audioscrobbler.com/2.0/' +
            '?method=user.getRecentTracks' +
            '&format=json' +
            '&user=' + URI.escape(self.config[:username]) +
            '&api_key=' + URI.escape(self.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' +
              (
                raw_item['artist']['mbid'].empty? ?
                '&artist=' + URI.escape(raw_item['artist']['#text']) :
                '&mbid=' + URI.escape(raw_item['artist']['mbid'])
              ) +
              '&api_key=' + URI.escape(self.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
            now_playing = true
          else
            played_at = Time.parse(raw_item['date']['#text'])
            now_playing = 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 => now_playing
          }
          identifier = "/#{i}/"
          mtime = nil

          # Build item
          Nanoc3::Item.new(content, attributes, identifier, mtime)
        end
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.