Extract MusicBrainz.ReleaseGroup
This commit is contained in:
@@ -10,6 +10,8 @@ defmodule MusicBrainz.APIImpl do
|
|||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
|
alias MusicBrainz.ReleaseGroup
|
||||||
|
|
||||||
@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
|
||||||
artist credits.
|
artist credits.
|
||||||
@@ -399,19 +401,7 @@ defmodule MusicBrainz.APIImpl do
|
|||||||
"https://musicbrainz.org/ws/2/release-group?#{URI.encode_query(qs)}"
|
"https://musicbrainz.org/ws/2/release-group?#{URI.encode_query(qs)}"
|
||||||
|
|
||||||
with {:ok, result} <- json_get(url) do
|
with {:ok, result} <- json_get(url) do
|
||||||
{:ok,
|
{:ok, Enum.map(result["release-groups"], &ReleaseGroup.from_api_response/1)}
|
||||||
Enum.map(result["release-groups"], fn rg ->
|
|
||||||
%{
|
|
||||||
id: rg["id"],
|
|
||||||
type: parse_subtype(rg["primary-type"]),
|
|
||||||
title: rg["title"],
|
|
||||||
artists:
|
|
||||||
rg["artist-credit"]
|
|
||||||
|> Enum.map(fn ac -> ac["artist"]["name"] end)
|
|
||||||
|> Enum.join(", "),
|
|
||||||
release: rg["first-release-date"]
|
|
||||||
}
|
|
||||||
end)}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -490,11 +480,4 @@ defmodule MusicBrainz.APIImpl do
|
|||||||
error
|
error
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp parse_subtype("Album"), do: :album
|
|
||||||
defp parse_subtype("EP"), do: :ep
|
|
||||||
defp parse_subtype("Live"), do: :live
|
|
||||||
defp parse_subtype("Compilation"), do: :compilation
|
|
||||||
defp parse_subtype("Single"), do: :single
|
|
||||||
defp parse_subtype(_), do: :other
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
defmodule MusicBrainz.ReleaseGroup do
|
||||||
|
defstruct [:id, :type, :title, :artists, :release]
|
||||||
|
|
||||||
|
def from_api_response(rg) do
|
||||||
|
%__MODULE__{
|
||||||
|
id: rg["id"],
|
||||||
|
type: parse_subtype(rg["primary-type"]),
|
||||||
|
title: rg["title"],
|
||||||
|
artists:
|
||||||
|
rg["artist-credit"]
|
||||||
|
|> Enum.map(fn ac -> ac["artist"]["name"] end)
|
||||||
|
|> Enum.join(", "),
|
||||||
|
release: rg["first-release-date"]
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp parse_subtype("Album"), do: :album
|
||||||
|
defp parse_subtype("EP"), do: :ep
|
||||||
|
defp parse_subtype("Live"), do: :live
|
||||||
|
defp parse_subtype("Compilation"), do: :compilation
|
||||||
|
defp parse_subtype("Single"), do: :single
|
||||||
|
defp parse_subtype(_), do: :other
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user