improved MB API wrappres
This commit is contained in:
@@ -366,6 +366,7 @@ esac
|
|||||||
while true; do
|
while true; do
|
||||||
case "${1:-}" in
|
case "${1:-}" in
|
||||||
"--artist")
|
"--artist")
|
||||||
|
mb_artist "$2" >>/tmp/foo
|
||||||
name="$(mb_artist "$2" | $JQ -r '.name')"
|
name="$(mb_artist "$2" | $JQ -r '.name')"
|
||||||
secsymb="$(printf "$FORMAT_TYPE_HAS_SECONDARY" "")"
|
secsymb="$(printf "$FORMAT_TYPE_HAS_SECONDARY" "")"
|
||||||
sel=$(
|
sel=$(
|
||||||
|
130
src/sh/api.sh
130
src/sh/api.sh
@@ -1,93 +1,143 @@
|
|||||||
|
MB_MAX_RETRIES=10
|
||||||
MB_BROWSE_STEPS=100
|
MB_BROWSE_STEPS=100
|
||||||
|
USER_AGENT="$APP_NAME/$APP_VERSION ($APP_WEBSITE)"
|
||||||
|
SLEEP_ON_ERROR=1
|
||||||
export MB_BROWSE_STEPS
|
export MB_BROWSE_STEPS
|
||||||
|
|
||||||
api_mb_artist() {
|
__api_mb() {
|
||||||
|
tmpout=$(mktemp)
|
||||||
|
for _ in $(seq "$MB_MAX_RETRIES"); do
|
||||||
|
case "$1" in
|
||||||
|
"artist")
|
||||||
$CURL \
|
$CURL \
|
||||||
|
--output "$tmpout" \
|
||||||
--get \
|
--get \
|
||||||
--data fmt=json \
|
--data fmt=json \
|
||||||
--data inc="url-rels+artist-rels+aliases" \
|
--data inc="url-rels+artist-rels+aliases" \
|
||||||
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
|
-A "$USER_AGENT" \
|
||||||
"https://musicbrainz.org/ws/2/artist/$1"
|
"https://musicbrainz.org/ws/2/artist/$2"
|
||||||
}
|
;;
|
||||||
api_mb_releasegroup() {
|
"releasegroup")
|
||||||
$CURL \
|
$CURL \
|
||||||
|
--output "$tmpout" \
|
||||||
--get \
|
--get \
|
||||||
--data fmt=json \
|
--data fmt=json \
|
||||||
--data inc=artist-credits \
|
--data inc=artist-credits \
|
||||||
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
|
-A "$USER_AGENT" \
|
||||||
"https://musicbrainz.org/ws/2/release-group/$1"
|
"https://musicbrainz.org/ws/2/release-group/$2"
|
||||||
}
|
;;
|
||||||
|
"release")
|
||||||
api_mb_release() {
|
|
||||||
$CURL \
|
$CURL \
|
||||||
|
--output "$tmpout" \
|
||||||
--get \
|
--get \
|
||||||
--data fmt=json \
|
--data fmt=json \
|
||||||
--data inc="recordings+artist-credits+release-groups+labels" \
|
--data inc="recordings+artist-credits+release-groups+labels" \
|
||||||
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
|
-A "$USER_AGENT" \
|
||||||
"https://musicbrainz.org/ws/2/release/$1"
|
"https://musicbrainz.org/ws/2/release/$2"
|
||||||
}
|
;;
|
||||||
|
"browse-artist-releasegroups")
|
||||||
api_mb_browse_artist_releasegroups() {
|
|
||||||
$CURL \
|
$CURL \
|
||||||
|
--output "$tmpout" \
|
||||||
--get \
|
--get \
|
||||||
--data fmt=json \
|
--data fmt=json \
|
||||||
--data inc=artist-credits \
|
--data inc=artist-credits \
|
||||||
--data limit="$MB_BROWSE_STEPS" \
|
--data limit="$MB_BROWSE_STEPS" \
|
||||||
--data offset="${2:-0}" \
|
--data offset="$3" \
|
||||||
--data artist="$1" \
|
--data artist="$2" \
|
||||||
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
|
-A "$USER_AGENT" \
|
||||||
"https://musicbrainz.org/ws/2/release-group"
|
"https://musicbrainz.org/ws/2/release-group"
|
||||||
}
|
;;
|
||||||
|
"browse-releasegroup-releases")
|
||||||
api_mb_browse_releasegroup_releases() {
|
|
||||||
$CURL \
|
$CURL \
|
||||||
|
--output "$tmpout" \
|
||||||
--get \
|
--get \
|
||||||
--data fmt=json \
|
--data fmt=json \
|
||||||
--data inc="artist-credits+labels+media+release-groups" \
|
--data inc="artist-credits+labels+media+release-groups" \
|
||||||
--data limit="$MB_BROWSE_STEPS" \
|
--data limit="$MB_BROWSE_STEPS" \
|
||||||
--data offset="${2:-0}" \
|
--data offset="$3" \
|
||||||
--data release-group="$1" \
|
--data release-group="$2" \
|
||||||
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
|
-A "$USER_AGENT" \
|
||||||
"https://musicbrainz.org/ws/2/release"
|
"https://musicbrainz.org/ws/2/release"
|
||||||
|
;;
|
||||||
|
"search-artist")
|
||||||
|
$CURL \
|
||||||
|
--output "$tmpout" \
|
||||||
|
--get \
|
||||||
|
--data fmt=json \
|
||||||
|
--data-urlencode query="$2" \
|
||||||
|
-A "$USER_AGENT" \
|
||||||
|
"https://musicbrainz.org/ws/2/artist"
|
||||||
|
;;
|
||||||
|
"search-releasegroup")
|
||||||
|
$CURL \
|
||||||
|
--output "$tmpout" \
|
||||||
|
--get \
|
||||||
|
--data fmt=json \
|
||||||
|
--data inc=artist-credits \
|
||||||
|
--data-urlencode query="$2" \
|
||||||
|
-A "$USER_AGENT" \
|
||||||
|
"https://musicbrainz.org/ws/2/release-group"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if ! $JQ -e '.error' "$tmpout" >/dev/null 2>/dev/stdout; then
|
||||||
|
cat "$tmpout"
|
||||||
|
rm -f "$tmpout"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
sleep "$SLEEP_ON_ERROR"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
rm -f "$tmpout"
|
||||||
|
err "Failed to fetch MusicBrainz data for $1 $2"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
api_mb_artist() {
|
||||||
|
__api_mb "artist" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
api_mb_releasegroup() {
|
||||||
|
__api_mb "releasegroup" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
api_mb_release() {
|
||||||
|
__api_mb "release" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
api_mb_browse_artist_releasegroups() {
|
||||||
|
__api_mb "browse-artist-releasegroups" "$1" "${2:-0}"
|
||||||
|
}
|
||||||
|
|
||||||
|
api_mb_browse_releasegroup_releases() {
|
||||||
|
__api_mb "browse-releasegroup-releases" "$1" "${2:-0}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Argument: Search string
|
# Argument: Search string
|
||||||
api_mb_search_artist() {
|
api_mb_search_artist() {
|
||||||
$CURL \
|
__api_mb "search-artist" "$1"
|
||||||
--get \
|
|
||||||
--data fmt=json \
|
|
||||||
--data-urlencode query="$1" \
|
|
||||||
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
|
|
||||||
"https://musicbrainz.org/ws/2/artist"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
api_mb_search_releasegroup() {
|
api_mb_search_releasegroup() {
|
||||||
$CURL \
|
__api_mb "search-releasegroup" "$1"
|
||||||
--get \
|
|
||||||
--data fmt=json \
|
|
||||||
--data inc=artist-credits \
|
|
||||||
--data-urlencode query="$1" \
|
|
||||||
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
|
|
||||||
"https://musicbrainz.org/ws/2/release-group"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
api_discogs_artist() {
|
api_discogs_artist() {
|
||||||
$CURL \
|
$CURL \
|
||||||
--get \
|
--get \
|
||||||
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
|
-A "$USER_AGENT" \
|
||||||
"https://api.discogs.com/artists/$1"
|
"https://api.discogs.com/artists/$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
api_wikidata_sitelinks() {
|
api_wikidata_sitelinks() {
|
||||||
$CURL \
|
$CURL \
|
||||||
--get \
|
--get \
|
||||||
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
|
-A "$USER_AGENT" \
|
||||||
"https://www.wikidata.org/w/rest.php/wikibase/v1/entities/items/$1/sitelinks"
|
"https://www.wikidata.org/w/rest.php/wikibase/v1/entities/items/$1/sitelinks"
|
||||||
}
|
}
|
||||||
|
|
||||||
api_wikipedia_en_summary() {
|
api_wikipedia_en_summary() {
|
||||||
$CURL \
|
$CURL \
|
||||||
--get \
|
--get \
|
||||||
-A "$APP_NAME/$APP_VERSION ($APP_WEBSITE)" \
|
-A "$USER_AGENT" \
|
||||||
"https://en.wikipedia.org/api/rest_v1/page/summary/$1"
|
"https://en.wikipedia.org/api/rest_v1/page/summary/$1"
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user