134 lines
4.3 KiB
Bash
134 lines
4.3 KiB
Bash
# The only IDs uses here are MusicBrainz IDs
|
|
|
|
# Helper methods to retrieve from cache, if it exists, and otherwise populate
|
|
# cache and retrieve
|
|
__mb_artist_cache_or_fetch() {
|
|
if ! cache_get_artist "$1"; then
|
|
api_mb_artist "$1" | cache_put_artist "$1"
|
|
cache_get_artist "$1"
|
|
fi
|
|
}
|
|
|
|
__mb_releasegroup_cache_or_fetch() {
|
|
if ! cache_get_releasegroup "$1"; then
|
|
api_mb_releasegroup "$1" | cache_put_releasegroup "$1"
|
|
cache_get_releasegroup "$1"
|
|
fi
|
|
}
|
|
|
|
__mb_release_cache_or_fetch() {
|
|
if ! cache_get_release "$1"; then
|
|
api_mb_release "$1" | cache_put_release "$1"
|
|
cache_get_release "$1"
|
|
fi
|
|
}
|
|
|
|
__mb_artist_cache_or_fetch_releasegroups() {
|
|
if ! cache_get_artist_releasegroups "$1"; then
|
|
api_mb_browse_artist_releasegroups "$1" | cache_put_artist_releasegroups "$1"
|
|
rg="$(cache_get_artist_releasegroups "$1")"
|
|
total=$(printf "%s" "$rg" | $JQ -r '."release-group-count"')
|
|
seen=$MB_BROWSE_STEPS
|
|
while [ "$total" -gt "$seen" ]; do
|
|
# Fetch remaning release groups, and append to cache
|
|
sleep 1 # Make sure we don't get blocked (we prefer not to handle failed requests...)
|
|
api_mb_browse_artist_releasegroups "$1" "$seen" | cache_append_artist_releasegroups "$1"
|
|
seen=$((seen + MB_BROWSE_STEPS))
|
|
done
|
|
cache_get_artist_releasegroups "$1"
|
|
fi
|
|
}
|
|
|
|
__mb_releasegroup_cache_or_fetch_releases() {
|
|
if ! cache_get_releasegroup_releases "$1"; then
|
|
api_mb_browse_releasegroup_releases "$1" | cache_put_releasegroup_releases "$1"
|
|
releases="$(cache_get_releasegroup_releases "$1")"
|
|
total=$(printf "%s" "$releases" | $JQ -r '."release-count"')
|
|
seen=$MB_BROWSE_STEPS
|
|
while [ "$total" -gt "$seen" ]; do
|
|
# Fetch remaning releases, and append to cache
|
|
sleep 1 # Make sure we don't get blocked (we prefer not to handle failed requests...)
|
|
api_mb_browse_releasegroup_releases "$1" "$seen" | cache_append_releasegroup_releases "$1"
|
|
seen=$((seen + MB_BROWSE_STEPS))
|
|
done
|
|
cache_get_releasegroup_releases "$1"
|
|
fi
|
|
}
|
|
|
|
# Get MusicBrainz json for artist
|
|
# @argument $1: MusicBrainz Artist ID
|
|
mb_artist() {
|
|
__mb_artist_cache_or_fetch "$1"
|
|
}
|
|
|
|
# Get Wikidata json for artist
|
|
# @argument $1: MusicBrainz Artist ID
|
|
mb_artist_wikidata() {
|
|
if ! cache_get_artist_wikidata "$1"; then
|
|
wikidataid=$(mb_artist "$1" |
|
|
$JQ -r '.relations |
|
|
map(select(.type=="wikidata")) |
|
|
.[0].url.resource // ""' |
|
|
awk -F "/" '{print $NF}')
|
|
[ ! "$wikidataid" ] && return
|
|
api_wikidata_sitelinks "$wikidataid" | cache_put_artist_wikidata "$1"
|
|
cache_get_artist_wikidata "$1"
|
|
fi
|
|
}
|
|
|
|
# Get Wikipedia (English) summary json for artist
|
|
# @argument $1: MusicBrainz Artist ID
|
|
mb_artist_enwikipedia() {
|
|
if ! cache_get_artist_enwikipedia "$1"; then
|
|
# To fetch the wikipedia data, we need the wikipedia URL
|
|
# There are two possibly ways to get the wikipedia URL
|
|
# 1. From the website relations in MB (MB artists donw have wiki rels)
|
|
# 2. MB website relations -> Wikidata -> Wikipedia
|
|
# Lately, Wikipedia pages are not stored in the MB artist url relations.
|
|
# For obvious reasons it is recommended to link to wikidata only. So, we
|
|
# take the second route.
|
|
wikidata=$(mb_artist_wikidata "$1" || true)
|
|
wikiid=$(printf "%s" "$wikidata" |
|
|
$JQ -r '.enwiki.url // ""' |
|
|
awk -F "/" '{print $NF}')
|
|
[ ! "$wikiid" ] && return
|
|
api_wikipedia_en_summary "$wikiid" | cache_put_artist_enwikipedia "$1"
|
|
cache_get_artist_enwikipedia "$1"
|
|
fi
|
|
}
|
|
|
|
# Get Discogs json for artist
|
|
# @argument $1: MusicBrainz Artist ID
|
|
mb_artist_discogs() {
|
|
if ! cache_get_artist_discogs "$1"; then
|
|
discogsid=$(mb_artist "$1" |
|
|
$JQ -r '.relations |
|
|
map(select(.type=="discogs")) |
|
|
.[0].url.resource // ""' |
|
|
awk -F "/" '{print $NF}')
|
|
[ ! "$discogsid" ] && return
|
|
api_discogs_artist "$discogsid" | cache_put_artist_discogs "$1"
|
|
cache_get_artist_discogs "$1"
|
|
fi
|
|
}
|
|
|
|
# Get release-groups json for artist
|
|
# @argument $1: MusicBrainz Artist ID
|
|
mb_artist_releasegroups() {
|
|
__mb_artist_cache_or_fetch_releasegroups "$1"
|
|
}
|
|
|
|
# Get MusicBrainz json for release group
|
|
# @argument $1: MusicBrainz Release-Group ID
|
|
mb_releasegroup() {
|
|
__mb_releasegroup_cache_or_fetch "$1"
|
|
}
|
|
|
|
mb_releasegroup_releases() {
|
|
__mb_releasegroup_cache_or_fetch_releases "$1"
|
|
}
|
|
|
|
mb_release() {
|
|
__mb_release_cache_or_fetch "$1"
|
|
}
|