Get artist from MusicBrainz

This commit is contained in:
Claudio Ortolina
2025-04-25 20:41:25 +01:00
parent 2c57f9bf65
commit 61e9a48b65
3 changed files with 48 additions and 1 deletions
+21 -1
View File
@@ -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
+23
View File
@@ -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