insert_btc_values_last_year 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/bin/bash
  2. DB_HOST="localhost"
  3. DB_PORT="5432"
  4. DB_USER="report_db"
  5. DB_NAME="report_db"
  6. DB_PASSWORD="123456" # ATENÇÃO: Em produção, considere usar .pgpass ou outra forma segura para a senha
  7. API_URL="https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=365&interval=daily"
  8. echo "Buscando dados diários do Bitcoin dos últimos 365 dias..."
  9. RESPONSE=$(curl -s "$API_URL")
  10. if [ -z "$RESPONSE" ]; then
  11. echo "Não foi possível obter resposta da API. Verifique sua conexão ou a URL."
  12. exit 1
  13. fi
  14. # Itera sobre cada item de preço
  15. echo "$RESPONSE" | jq -c '.prices[]' | while read -r item; do
  16. timestamp=$(echo "$item" | jq -r '.[0]')
  17. price=$(echo "$item" | jq -r '.[1]')
  18. # Converte o timestamp para data (YYYY-MM-DD). Use -u para GMT/UTC.
  19. date=$(date -u -d "@$((timestamp/1000))" '+%Y-%m-%d')
  20. echo "Inserindo valor BTC de $price em $date..."
  21. # Comando psql para inserir dados
  22. # O "ON CONFLICT (btc_value_date) DO NOTHING" é crucial aqui para não falhar em datas duplicadas.
  23. PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" <<EOF
  24. INSERT INTO btc_value (btc_value_value, btc_value_date)
  25. VALUES ('$price', '$date')
  26. ON CONFLICT (btc_value_date) DO NOTHING;
  27. EOF
  28. # Verifica o código de saída do psql para cada inserção
  29. if [ $? -ne 0 ]; then
  30. echo "AVISO: Erro ao inserir valor para a data $date. Pode ser duplicidade."
  31. fi
  32. done
  33. echo "Concluído! Verifique a tabela 'btc_value' no banco de dados para confirmar a inserção."