diff --git a/spot-record.sh b/spot-record.sh index c28d308..30f8e92 100755 --- a/spot-record.sh +++ b/spot-record.sh @@ -5,34 +5,79 @@ API_KEY="bg_28730a088b4b71c307ed5773b84d8267" API_SECRET="f7e4872f828c99612df009c3641421fc41d9dfb9cfc56dce3311fdaae70f5b29" PASSPHRASE="cQTVzepB6KuFWgWLgCpB6kW84iiqJr3u" -# === ENDPOINT Y PARÁMETROS === +# === ENDPOINT === METHOD="GET" BASE_URL="https://api.bitget.com" ENDPOINT="/api/v2/tax/spot-record" -# Rango de tiempo: del 1 al 30 de enero de 2025 (máx. permitido) -START_TIME="1735689600000" # 2025-01-01 00:00:00 UTC -END_TIME="1738272000000" # 2025-01-31 00:00:00 UTC -LIMIT="100" +# === ARCHIVO SALIDA === +OUTPUT_FILE="spot-record-2025.csv" +> "$OUTPUT_FILE" -QUERY_STRING="startTime=${START_TIME}&endTime=${END_TIME}&limit=${LIMIT}" -FULL_URL="${BASE_URL}${ENDPOINT}?${QUERY_STRING}" +# === CABECERA CSV === +echo '"id","coin","spotTaxType","amount","fee","balance","ts","fecha_gmt1","bizOrderId"' > "$OUTPUT_FILE" -# === TIMESTAMP oficial desde Bitget === -TIMESTAMP=$(curl -s https://api.bitget.com/api/v2/public/time | jq -r '.data.serverTime') +# === FUNCIONES === +function timestamp() { + date -u -j -f "%Y-%m-%d" "$1" +"%s" +} -# === STRING A FIRMAR === -PREHASH="${TIMESTAMP}${METHOD}${ENDPOINT}?${QUERY_STRING}" +function build_request() { + local START_TS_MS="$1" + local END_TS_MS="$2" + local LIMIT=100 + local QUERY_STRING="startTime=${START_TS_MS}&endTime=${END_TS_MS}&limit=${LIMIT}" + local FULL_URL="${BASE_URL}${ENDPOINT}?${QUERY_STRING}" -# === FIRMA BASE64 === -SIGNATURE=$(echo -n "${PREHASH}" | openssl dgst -sha256 -hmac "${API_SECRET}" -binary | base64) + local TIMESTAMP=$(curl -s https://api.bitget.com/api/v2/public/time | jq -r '.data.serverTime') + local PREHASH="${TIMESTAMP}${METHOD}${ENDPOINT}?${QUERY_STRING}" + local SIGNATURE=$(echo -n "${PREHASH}" | openssl dgst -sha256 -hmac "${API_SECRET}" -binary | base64) -# === PETICIÓN FIRMADA === -curl -s "${FULL_URL}" \ - -H "ACCESS-KEY: ${API_KEY}" \ - -H "ACCESS-SIGN: ${SIGNATURE}" \ - -H "ACCESS-TIMESTAMP: ${TIMESTAMP}" \ - -H "ACCESS-PASSPHRASE: ${PASSPHRASE}" \ - -H "Content-Type: application/json" \ - -H "locale: en-US" \ - | jq . \ No newline at end of file + curl -s "${FULL_URL}" \ + -H "ACCESS-KEY: ${API_KEY}" \ + -H "ACCESS-SIGN: ${SIGNATURE}" \ + -H "ACCESS-TIMESTAMP: ${TIMESTAMP}" \ + -H "ACCESS-PASSPHRASE: ${PASSPHRASE}" \ + -H "Content-Type: application/json" \ + -H "locale: en-US" +} + +# === BUCLE POR BLOQUES DE 30 DÍAS === +START_DATE="2025-01-01" +END_DATE="2026-01-01" + +CURRENT_DATE="$START_DATE" + +while [[ "$CURRENT_DATE" < "$END_DATE" ]]; do + NEXT_DATE=$(date -j -v+30d -f "%Y-%m-%d" "$CURRENT_DATE" +"%Y-%m-%d") + + START_MS=$(($(timestamp "$CURRENT_DATE") * 1000)) + END_MS=$(($(timestamp "$NEXT_DATE") * 1000)) + + echo "🔄 Consultando de $CURRENT_DATE a $NEXT_DATE..." + + RESPONSE=$(build_request "$START_MS" "$END_MS") + + echo "$RESPONSE" | jq -r ' + if .code == "00000" and (.data | length > 0) then + .data[] | [ + .id, + .coin, + .spotTaxType, + .amount, + .fee, + .balance, + .ts, + (.ts|tonumber/1000 | strflocaltime("%Y-%m-%d %H:%M:%S +0100")), + .bizOrderId + ] | @csv + else + empty + end + ' >> "$OUTPUT_FILE" + + sleep 2 + CURRENT_DATE="$NEXT_DATE" +done + +echo "✅ Exportado como $OUTPUT_FILE" \ No newline at end of file