Support getting artist bios from Wikipedia (experimental)

This commit is contained in:
Claudio Ortolina
2026-02-09 15:19:35 +00:00
parent f82e764c94
commit bcae291cff
23 changed files with 639 additions and 31 deletions
+31
View File
@@ -10,6 +10,7 @@ defmodule MusicLibrary.Artists.ArtistInfo do
schema "artist_infos" do
field :musicbrainz_data, :map, default: %{}
field :discogs_data, :map, default: %{}
field :wikipedia_data, :map, default: %{}
field :image_data_hash, :string
has_one :note, Note, foreign_key: :musicbrainz_id
@@ -23,6 +24,7 @@ defmodule MusicLibrary.Artists.ArtistInfo do
:id,
:musicbrainz_data,
:discogs_data,
:wikipedia_data,
:image_data_hash
])
|> validate_required([:musicbrainz_data])
@@ -82,4 +84,33 @@ defmodule MusicLibrary.Artists.ArtistInfo do
_ -> nil
end
end
def wikidata_id(artist_info) do
relations = get_in(artist_info.musicbrainz_data, ["relations"]) || []
Enum.find_value(relations, fn
%{"type" => "wikidata", "url" => %{"resource" => "https://www.wikidata.org/wiki/" <> id}} ->
id
_ ->
nil
end)
end
def wikipedia_bio(artist_info) do
get_in(artist_info.wikipedia_data, ["intro_html"]) ||
get_in(artist_info.wikipedia_data, ["extract_html"])
end
def wikipedia_summary(artist_info) do
get_in(artist_info.wikipedia_data, ["extract"])
end
def wikipedia_url(artist_info) do
get_in(artist_info.wikipedia_data, ["content_urls", "desktop", "page"])
end
def wikipedia_description(artist_info) do
get_in(artist_info.wikipedia_data, ["description"])
end
end