diff --git a/app/adapters/lastfm_adapter.rb b/app/adapters/lastfm_adapter.rb new file mode 100644 index 0000000..ec01a2d --- /dev/null +++ b/app/adapters/lastfm_adapter.rb @@ -0,0 +1,37 @@ +class LastfmAdapter < BaseAdapter + class << self + def required_keys + %i(username api_key) + end + + def auth_type + :none + end + + def website_link + "https://www.last.fm" + end + + def title + "Last.fm" + end + + def valid_credentials?(credentials) + username, api_key = credentials.values_at(:username, :api_key) + username.present? && api_key.present? + end + end + + def scrobbles + username, api_key = credentials.values_at(:username, :api_key) + resp = Faraday.get("http://ws.audioscrobbler.com/2.0/?method=user.getinfo&user=#{username}&api_key=#{api_key}&format=json") + + user_info = JSON.parse(resp.body) + if user_info + user_info.fetch("user.playcount").to_i + else + raise "Can't fetch user playcount" + end + end + +end diff --git a/app/assets/images/logos/lastfm.png b/app/assets/images/logos/lastfm.png new file mode 100644 index 0000000..57097c7 Binary files /dev/null and b/app/assets/images/logos/lastfm.png differ diff --git a/app/metrics/lastfm/scrobbles.rb b/app/metrics/lastfm/scrobbles.rb new file mode 100644 index 0000000..eae35e1 --- /dev/null +++ b/app/metrics/lastfm/scrobbles.rb @@ -0,0 +1,8 @@ +PROVIDERS.fetch(:lastfm).register_metric :scrobbles do |metric| + metric.title = "Scrobbles" + metric.description = "Number of scrobbles" + + metric.block = proc do |adapter| + Datapoint.new value: adapter.scrobbles + end +end diff --git a/config/initializers/providers.rb b/config/initializers/providers.rb index 06ed2d7..0a019df 100644 --- a/config/initializers/providers.rb +++ b/config/initializers/providers.rb @@ -1,5 +1,5 @@ PROVIDERS = %i( - googlefit trello pocket beeminder bcycle stackoverflow + googlefit trello pocket beeminder bcycle stackoverflow lastfm ).map do |p_key| adapter = "#{p_key}_adapter".camelize.constantize [p_key, Provider.new(p_key, adapter)]