Get artist from MusicBrainz
This commit is contained in:
@@ -32,5 +32,9 @@ defmodule MusicBrainz do
|
||||
API.get_cover_art(id_or_url, music_brainz_config())
|
||||
end
|
||||
|
||||
def get_artist(musicbrainz_id) do
|
||||
API.get_artist(musicbrainz_id, music_brainz_config())
|
||||
end
|
||||
|
||||
defp music_brainz_config, do: MusicBrainz.Config.resolve(:music_library)
|
||||
end
|
||||
|
||||
+21
-1
@@ -8,7 +8,7 @@ defmodule MusicBrainz.API do
|
||||
|
||||
require Logger
|
||||
|
||||
alias MusicBrainz.{ReleaseGroupSearchResult, ReleaseSearchResult}
|
||||
alias MusicBrainz.{Artist, ReleaseGroupSearchResult, ReleaseSearchResult}
|
||||
|
||||
@doc """
|
||||
Uses the [lookup](https://musicbrainz.org/doc/MusicBrainz_API#Lookups) endpoint with the release group id and include the
|
||||
@@ -451,6 +451,20 @@ defmodule MusicBrainz.API do
|
||||
|> get_request()
|
||||
end
|
||||
|
||||
def get_artist(musicbrainz_id, config) do
|
||||
config
|
||||
|> new_request()
|
||||
|> Req.merge(
|
||||
url: "/artist/#{musicbrainz_id}",
|
||||
params: [
|
||||
fmt: "json",
|
||||
inc: "url-rels"
|
||||
]
|
||||
)
|
||||
|> Req.Request.append_response_steps(parse_artist: &parse_artist/1)
|
||||
|> get_request()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Uses the [cover art](https://musicbrainz.org/doc/Cover_Art_Archive/API) endpoint with the release group id to get the cover image.
|
||||
"""
|
||||
@@ -525,4 +539,10 @@ defmodule MusicBrainz.API do
|
||||
|
||||
{request, Map.put(response, :body, releases)}
|
||||
end
|
||||
|
||||
defp parse_artist({request, response}) do
|
||||
artist = Artist.from_api_response(response.body)
|
||||
|
||||
{request, Map.put(response, :body, artist)}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
defmodule MusicBrainz.Artist do
|
||||
@enforce_keys [:id, :name, :sort_name]
|
||||
defstruct [:id, :name, :sort_name, :country, :relations]
|
||||
|
||||
def from_api_response(r) do
|
||||
%__MODULE__{
|
||||
id: r["id"],
|
||||
name: r["name"],
|
||||
sort_name: r["sort-name"],
|
||||
country: r["country"],
|
||||
relations: parse_relations(r["relations"])
|
||||
}
|
||||
end
|
||||
|
||||
defp parse_relations(relations) do
|
||||
Enum.map(relations, fn relation ->
|
||||
%{
|
||||
type: relation["type"],
|
||||
url: relation["url"]
|
||||
}
|
||||
end)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user