|
- #!/usr/bin/env fish
- #set fish_trace on
-
- function usage
- begin
- echo "Read TSV release data from sdtin > query Deezer API > output JSON"
- exit 1
- end
- end
-
- argparse -n (status current-filename) 'h/help' -- $argv
- if test $status -ne 0
- usage
- end
-
- if set -q _flag_help
- usage
- end
-
- set API_OUT (mktemp -t rls.deezer.API.XXXXXXXX.json)
- set DAPI "https://api.deezer.com/search/album"
- set UA "search-deezer.fish/v0.0.3"
-
- while read -l -d (printf '\t') ORG A T C B F E Y
- if test -z "$A"; or test -z "$T"
- echo "WARN: Skipping empty artist / title input"
- continue
- end
-
- set _in_A "$A"; set _in_T "$T"; set _in_C "$C";
- set _in_B "$B"; set _in_F "$F"; set _in_E "$E"; set _in_Y "$Y"
-
- sleep .2
- set API_CODE (curl -s -G "$DAPI" --user-agent "$UA" -w '%{http_code}' -o "$API_OUT" --data-urlencode "q=$A $T $E" --data-urlencode "strict=on")
-
- if test $status -ne 0
- echo "curl API request failed" >&2
- rm "$API_OUT"
- continue
- end
-
- if test $API_CODE -ne 200
- begin
- echo "Deezer API status code $CODE"
- echo $ORG
- end >&2
- rm "$API_OUT"
- continue
- end
-
- set API_COUNT (jq -r .total "$API_OUT")
- if test $status -ne 0
- begin
- echo "Failed parsing API result"
- echo $ORG
- end >&2
- rm "$API_OUT"
- continue
- end
-
- if test "$API_COUNT" = "null"
- begin
- echo "ERR: API result has no total count"
- echo $ORG
- end >&2
- rm "$API_OUT"
- continue
- end
-
- if test $API_COUNT -eq 0
- echo '{}' | jq -SMc --arg rls "$ORG" --arg api_count "$API_COUNT" \
- --arg a "$_in_A" --arg t "$_in_T" --arg c "$_in_C" \
- --arg b "$_in_B" --arg f "$_in_F" --arg e "$_in_E" --arg y "$_in_Y" \
- '{
- "_scene_release_name": $rls,
- "_source": "api.deezer.com",
- "_search_result_count": $api_count | tonumber,
- "_artist": $a,
- "_title": $t,
- "_catno": $c,
- "_barcode": $b,
- "_format": $f,
- "_edition": $e,
- "_year": $y
- }'
- rm "$API_OUT"
- continue
- else if test $API_COUNT -ge 1
- jq -SMc --arg rls "$ORG" --arg api_count "$API_COUNT" \
- --arg a "$_in_A" --arg t "$_in_T" --arg c "$_in_C" \
- --arg b "$_in_B" --arg f "$_in_F" --arg e "$_in_E" --arg y "$_in_Y" \
- '. + {
- "_scene_release_name": $rls,
- "_source": "api.deezer.com",
- "_search_result_count": $api_count | tonumber,
- "_artist": $a,
- "_title": $t,
- "_catno": $c,
- "_barcode": $b,
- "_format": $f,
- "_edition": $e,
- "_year": $y
- }' "$API_OUT"
- end
- rm "$API_OUT"
- end
|