0
CANT IMPORT - API POST PYTHON SCRIPT
Hey guys, a newbie talking. I'm creating a python Script to import my data but can't do it, I dunno whats missing but I keep getting Internal Error because of the Timeout, I've already restart my workspace but that doesnt seem to work. Here's my code:
import csv
import json
import requests
from datetime import datetime
# Configuración de la API Ninox
url = "https://api.ninox.com/v1/teams/XXXXXXX/databases/XXXXXXXXX/tables/P/records"
headers = {
"Authorization": "Bearer XXXXXXXXX-XXXXXXXXX-XXXXXXXX-XXXXXXX",
"Content-Type": "application/json"
}
# Lista de campos que deben ser numéricos
numeric_fields = [
"DevolProvCto", "DevolProvUni", "DevolProvVta", "InvFinCto", "InvFinUni", "InvFinVta",
"RebajaVta", "RecibosCto", "RecibosPzs", "RecibosVta", "VentaNetaaCosto",
"VentaNetaenPesos", "VentaNetaenUnidades", "TransfEntCto", "TransfEntUni", "TransfEntVta",
"TransfSalCto", "TransfSalUni", "TransfSalVta", "VentaNetaenPesosAnt", "VentaNetaenUnidadesAnt",
"PVPCosto", "PVPVenta", "MargenObtenidoInv", "MargenObtenidoVenta"
]
def parse_numeric(value):
if value is None or value.strip() == "":
return None
value = value.replace(",", "").replace("%", "").strip()
try:
num = float(value)
return int(num) if num.is_integer() else num
except ValueError:
return value
def formatear_fecha(fecha_str):
if not fecha_str or fecha_str.strip() == "":
return None
try:
fecha = datetime.strptime(fecha_str.strip(), "%d/%m/%Y")
return fecha.strftime("%Y-%m-%d")
except ValueError:
# Si falla la conversión, se retorna el valor original
return fecha_str.strip()
def convertir_fila(row):
nuevos_campos = {}
for key, value in row.items():
if key == "DiaFecha":
nuevo_valor = formatear_fecha(value)
elif key in numeric_fields:
nuevo_valor = parse_numeric(value)
else:
nuevo_valor = value.strip() if value and value.strip() != "" else None
# Solo añadimos la clave si el valor no es None
if nuevo_valor is not None:
nuevos_campos[key] = nuevo_valor
return {"fields": nuevos_campos}
def leer_csv(ruta_archivo):
registros = []
with open(ruta_archivo, mode='r', encoding='latin1', newline='') as csvfile:
lector = csv.DictReader(csvfile)
for row in lector:
registros.append(convertir_fila(row))
return registros
def enviar_a_api(registros):
# Utilizamos ensure_ascii=False para preservar los acentos y caracteres especiales
payload = json.dumps(registros, ensure_ascii=False)
print("Payload a enviar:", payload)
response = requests.post(url, headers=headers, data=payload)
print("Código de estado:", response.status_code)
print("Respuesta:", response.text)
if response.status_code in (200, 201):
print("Datos importados exitosamente.")
else:
print("Error al importar datos.")
def main():
ruta_csv = "/Users/main/Downloads/test.csv"
registros = leer_csv(ruta_csv)
enviar_a_api(registros)
if __name__ == "__main__":
main()
Every time I Run de script, my output is this:
Código de estado: 504
Respuesta: <html><body><h1>504 Gateway Time-out</h1>
The server didn't respond in time.
</body></html>
Does anyone has the same problem?
Greetings, hope anyone can help me
Reply
Content aside
- 9 days agoLast active
- 18Views
-
1
Following