Class: RSpotify::Artist

Inherits:
Base
  • Object
show all
Defined in:
lib/rspotify/artist.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#external_urls, #href, #id, #type, #uri

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#complete!, #embed, #method_missing, #respond_to?

Constructor Details

#initialize(options = {}) ⇒ Artist



46
47
48
49
50
51
52
53
54
55
# File 'lib/rspotify/artist.rb', line 46

def initialize(options = {})
  @followers  = options['followers']
  @genres     = options['genres']
  @images     = options['images']
  @name       = options['name']
  @popularity = options['popularity']
  @top_tracks = {}

  super(options)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class RSpotify::Base

Instance Attribute Details

#followersHash

Information about the followers of the artist



8
9
10
# File 'lib/rspotify/artist.rb', line 8

def followers
  @followers
end

#genresArray<String>

A list of the genres the artist is associated with. If not yet classified, the array is empty



8
9
10
# File 'lib/rspotify/artist.rb', line 8

def genres
  @genres
end

#imagesArray<Hash>

Images of the artist in various sizes, widest first



8
9
10
# File 'lib/rspotify/artist.rb', line 8

def images
  @images
end

#nameString

The name of the artist



8
9
10
# File 'lib/rspotify/artist.rb', line 8

def name
  @name
end

#popularityInteger

The popularity of the artist. The value will be between 0 and 100, with 100 being the most popular



8
9
10
# File 'lib/rspotify/artist.rb', line 8

def popularity
  @popularity
end

Class Method Details

.find(ids) ⇒ Artist+

Returns Artist object(s) with id(s) provided

Examples:

artist = RSpotify::Artist.find('7Ln80lUS6He07XvHI8qqHH')
artist.class #=> RSpotify::Artist
artist.name  #=> "Arctic Monkeys"

ids = %w(7Ln80lUS6He07XvHI8qqHH 3dRfiJ2650SZu6GbydcHNb)
artists = RSpotify::Artist.find(ids)
artists.class       #=> Array
artists.first.class #=> RSpotify::Artist


24
25
26
# File 'lib/rspotify/artist.rb', line 24

def self.find(ids)
  super(ids, 'artist')
end

.search(query, limit: 20, offset: 0, market: nil) ⇒ Array<Artist>

Returns array of Artist objects matching the query, ordered by popularity. It’s also possible to find the total number of search results for the query

Examples:

artists = RSpotify::Artist.search('Arctic')
artists = RSpotify::Artist.search('Arctic', limit: 10, market: 'US')
artists = RSpotify::Artist.search('Arctic', market: { from: user })

RSpotify::Artist.search('Arctic').total #=> 86


42
43
44
# File 'lib/rspotify/artist.rb', line 42

def self.search(query, limit: 20, offset: 0, market: nil)
  super(query, 'artist', limit: limit, offset: offset, market: market)
end

Instance Method Details

#albums(limit: 20, offset: 0, **filters) ⇒ Array<Album>

Returns array of albums from artist

Examples:

artist.albums
artist.albums(album_type: 'single,compilation')
artist.albums(limit: 50, country: 'US')


69
70
71
72
73
74
75
76
77
78
# File 'lib/rspotify/artist.rb', line 69

def albums(limit: 20, offset: 0, **filters)
  url = "artists/#{@id}/albums?limit=#{limit}&offset=#{offset}"
  filters.each do |filter_name, filter_value|
    url << "&#{filter_name}=#{filter_value}"
  end

  response = RSpotify.get(url)
  return response if RSpotify.raw_response
  response['items'].map { |i| Album.new i }
end

Returns array of similar artists. Similarity is based on analysis of the Spotify community’s listening history.

Examples:

artist.name #=> "Arctic Monkeys"
related_artists = artist.related_artists

related_artists.size       #=> 20
related_artists.first.name #=> "Miles Kane"


90
91
92
93
94
95
96
# File 'lib/rspotify/artist.rb', line 90

def related_artists
  return @related_artists unless @related_artists.nil? || RSpotify.raw_response
  response = RSpotify.get("artists/#{@id}/related-artists")

  return response if RSpotify.raw_response
  @related_artists = response['artists'].map { |a| Artist.new a }
end

#top_tracks(country) ⇒ Array<Track>

Returns artist’s 10 top tracks by country.

Examples:

top_tracks = artist.top_tracks(:US)
top_tracks.class       #=> Array
top_tracks.size        #=> 10
top_tracks.first.class #=> RSpotify::Track


108
109
110
111
112
113
114
# File 'lib/rspotify/artist.rb', line 108

def top_tracks(country)
  return @top_tracks[country] unless @top_tracks[country].nil? || RSpotify.raw_response
  response = RSpotify.get("artists/#{@id}/top-tracks?country=#{country}")

  return response if RSpotify.raw_response
  @top_tracks[country] = response['tracks'].map { |t| Track.new t }
end