scene release to discogs release
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

105 lignes
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