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())
|
API.get_cover_art(id_or_url, music_brainz_config())
|
||||||
end
|
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)
|
defp music_brainz_config, do: MusicBrainz.Config.resolve(:music_library)
|
||||||
end
|
end
|
||||||
|
|||||||
+21
-1
@@ -8,7 +8,7 @@ defmodule MusicBrainz.API do
|
|||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
alias MusicBrainz.{ReleaseGroupSearchResult, ReleaseSearchResult}
|
alias MusicBrainz.{Artist, ReleaseGroupSearchResult, ReleaseSearchResult}
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Uses the [lookup](https://musicbrainz.org/doc/MusicBrainz_API#Lookups) endpoint with the release group id and include the
|
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()
|
|> get_request()
|
||||||
end
|
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 """
|
@doc """
|
||||||
Uses the [cover art](https://musicbrainz.org/doc/Cover_Art_Archive/API) endpoint with the release group id to get the cover image.
|
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)}
|
{request, Map.put(response, :body, releases)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp parse_artist({request, response}) do
|
||||||
|
artist = Artist.from_api_response(response.body)
|
||||||
|
|
||||||
|
{request, Map.put(response, :body, artist)}
|
||||||
|
end
|
||||||
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