scene release to discogs release
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
2.6KB

  1. #!/usr/bin/env fish
  2. function usage
  3. begin
  4. echo "Read TSV release data from sdtin > query Discogs API > output JSON"
  5. exit 1
  6. end
  7. end
  8. argparse -n (status current-filename) 'h/help' -- $argv
  9. if test $status -ne 0
  10. usage
  11. end
  12. if set -q _flag_help
  13. usage
  14. end
  15. set API_OUT (mktemp -t rls.API.XXXXXXXX.json)
  16. set DAPI "https://api.discogs.com/database/search"
  17. set UA "rls-discogs.fish/v0.0.3"
  18. if test -f ~/.discogs.token
  19. set TOKEN (cat ~/.discogs.token)
  20. end
  21. if test -z "$TOKEN"
  22. echo "Please place access token from https://www.discogs.com/settings/developers into ~/.discogs.token"
  23. exit 1
  24. end
  25. function discord_format
  26. switch $argv[1]
  27. case (seq 100)VINYL VINYL VLS Vinyl vinyl
  28. printf '%s' "Vinyl"
  29. case (seq 100)CD CD CDA CDS CDM CDEP EP
  30. printf '%s' "CD"
  31. case CDR CDREP
  32. printf '%s' "CDr"
  33. case TAPE
  34. printf '%s' "Cassette"
  35. case WEB SINGLE-WEB EP-WEB
  36. printf '%s' "File"
  37. case '*'
  38. printf '%s' "*"
  39. end
  40. end
  41. while read -l -d (printf '\t') ORG A T C B F E Y
  42. sleep 1
  43. set API_CODE (curl -s -G "$DAPI" --user-agent "$UA" -w '%{http_code}' -o "$API_OUT" -H "Authorization: Discogs token=$TOKEN" \
  44. --data-urlencode "type=release" \
  45. --data-urlencode "artist=$A" \
  46. --data-urlencode "release_title=$T" \
  47. --data-urlencode "catno=$C" \
  48. --data-urlencode "barcode=$B" \
  49. --data-urlencode "format=$(discord_format $F)" \
  50. --data-urlencode "year=$Y")
  51. if test $status -ne 0
  52. echo "curl API request failed" >&2
  53. rm "$API_OUT"
  54. continue
  55. end
  56. if test $API_CODE -ne 200
  57. begin
  58. echo "Discogs API status code $CODE"
  59. echo $ORG
  60. end >&2
  61. rm "$API_OUT"
  62. continue
  63. end
  64. set API_COUNT (jq -r .pagination.items "$API_OUT")
  65. if test $status -ne 0
  66. begin
  67. echo "Failed parsing API result"
  68. echo $ORG
  69. end >&2
  70. rm "$API_OUT"
  71. continue
  72. end
  73. if test $API_COUNT -eq 0
  74. echo '{}' | jq -SMc --arg rls "$ORG" --arg api_count "$API_COUNT" '
  75. {
  76. "_scene_release_name": $rls,
  77. "_query": "API",
  78. "_search_result_count": $api_count | tonumber,
  79. }'
  80. rm "$API_OUT"
  81. continue
  82. else if test $API_COUNT -ge 1
  83. jq -SMc --arg rls "$ORG" --arg api_count "$API_COUNT" '.results[0] |
  84. . + {
  85. "_scene_release_name": $rls,
  86. "_query": "API",
  87. "_search_result_count": $api_count | tonumber
  88. }' "$API_OUT"
  89. end
  90. rm "$API_OUT"
  91. end