GenderAPI V2 · Guía de implementación

Integra GenderAPI.io V2 con Python

Consulta nombres, correos y usuarios con la biblioteca estándar de Python. Gestiona lotes, resultados desconocidos, créditos y errores con un ejemplo descargable.

PythonPython 3.10+HTTP en el servidor

Por GenderAPI.io Revisión:

Prepara tu proyecto Python en el servidor

Utiliza Python 3.10 o posterior y descarga genderapi_v2.py en tu proyecto. El ejemplo llama a https://api.genderapi.io/api/v2/gender con una clave Bearer mediante urllib.request y json de la biblioteca estándar; no necesita un paquete pip.

Define GENDERAPI_API_KEY en el entorno del servidor. YOUR_API_KEY no es una clave válida. No incluyas la clave real en el control de versiones, cuadernos compartidos, paquetes React/Vue ni código del navegador. El navegador debe llamar a tu servidor autenticado y este debe enviar la petición a GenderAPI.io. Importar el archivo o ejecutarlo sin la opción explícita de demo no envía consultas.

Prepara tu proyecto Python en el servidor
python3 --version
export GENDERAPI_API_KEY="YOUR_API_KEY"

Envía tu primera consulta solo al conjunto de datos

Guarda el código como single.py junto al archivo descargado y ejecuta python3 single.py. predict envía type: name, value: Alice y options.ai_mode: off en JSON. Lee la predicción en data y los datos de solicitud y facturación en meta.

Esta consulta completada cuesta 1 crédito, aunque gender sea null. El nombre de ejemplo no garantiza un resultado. Puedes enviar nombres, correos o usuarios; añade country solo si tienes contexto relevante.

El archivo auxiliar exige un modo de IA explícito y una clave hexadecimal de 24 caracteres. Esto valida el formato, no su existencia. En respuestas correctas verifica que meta.access.mode sea api_key. Rechaza ip_trial como discrepancia de acceso, pero esa comprobación posterior a la respuesta no recupera créditos de prueba ya consumidos.

Envía tu primera consulta solo al conjunto de datos
from genderapi_v2 import GenderAPIError, make_item, predict

try:
    response = predict(make_item("name", "Alice", ai_mode="off"))
except GenderAPIError as error:
    # Record a reference; do not log the whole error response.
    print("Request failed:", error.request_id)
    raise SystemExit(1)
else:
    result = response["data"]
    print(result["result_status"], result["gender"])
    print(result["confidence"], result["confidence_kind"])
    print(response["meta"]["usage"])

Interpreta el resultado junto con sus evidencias

Una asociación inferida no equivale al género declarado por la persona. Conserva por separado el dato original, las evidencias de la respuesta y la información facilitada por la persona. unknown es un resultado válido; no lo conviertas en una categoría inventada.

CampoCómo utilizarlo
data.gender / data.result_statusUtiliza male o female solo cuando el resultado sea identified. Conserva el valor JSON null cuando sea unknown.
data.name / data.matchRevisa el nombre devuelto y el candidato seleccionado. Una coincidencia parcial no demuestra que el dato pertenezca a una persona con ese nombre.
data.confidence / data.confidence_kindLa confianza se expresa entre 0 y 1, o como null. observed_frequency procede de recuentos almacenados; model_reported es una puntuación de IA. Evalúa los umbrales por separado para cada tipo.
data.source / data.sample_countDistingue dataset, ai y none. Los resultados de IA no tienen un recuento de muestras almacenadas. El tamaño de la muestra no es una medida de exactitud.
meta.access.modeComprueba api_key en una integración de cuenta. Si falta la clave o no se reconoce, puede utilizarse la prueba compartida por IP.
meta.usageRevisa charged_credits y billing_status. Un resultado unknown completado correctamente consume créditos. No recibir la respuesta no demuestra que la consulta haya sido gratuita.

Conserva la identidad de cada fila en los lotes mixtos

Envía lotes mixtos mediante POST https://api.genderapi.io/api/v2/gender/batch. Se admiten hasta 50 elementos con clave de cuenta o 10 en la prueba por IP. Estos ejemplos requieren una clave de cuenta. Asigna a cada elemento un id estable y único, un modo de IA explícito y country cuando corresponda. Puedes combinar nombres, correos y usuarios.

Revisa cada elemento de data y el resumen meta.summary. HTTP 200 puede incluir errores de elementos; si todos fallan, puede devolverse un Problem de nivel superior con los resultados. Los resultados unknown completados cuentan como succeeded. id e index permiten vincular cada resultado con su fila original.

Divide los trabajos grandes en grupos de hasta 50 y empieza enviándolos secuencialmente. Guarda la respuesta y el uso antes del siguiente grupo. Si hay problemas de conexión, acceso o facturación sin confirmar, detente y aclara el estado del grupo actual. Ajusta la concurrencia según los límites de la cuenta; el límite de elementos no garantiza una velocidad.

Conserva la identidad de cada fila en los lotes mixtos
from genderapi_v2 import GenderAPIError, make_item, predict_batch

items = [
    make_item("name", "Alice", ai_mode="off", item_id="row-1"),
    make_item("email", "alex@example.com", ai_mode="off", item_id="row-2"),
    make_item("username", "sample_handle", ai_mode="off", item_id="row-3"),
]
try:
    response = predict_batch(items)
except GenderAPIError as error:
    # Retained error.response can include batch results and billing.
    print("Batch needs review:", error.request_id)
    raise SystemExit(1)
else:
    for item in response["data"]:
        if "error" in item:
            print(item["id"], "failed", item["error"]["code"])
        else:
            result = item["data"]
            print(item["id"], result["result_status"], result["gender"])
    print(response["meta"]["summary"])
    print(response["meta"]["usage"])
    if response["meta"]["summary"]["failed"]:
        raise SystemExit(2)

Elige cuándo utilizar la IA

forceToGenderize es opcional para nombres, correos electrónicos y nombres de usuario. Si lo activas, omite ai_mode o utiliza fallback; combinarlo con off o always devuelve un error 422. Basta con un saldo inicial positivo para iniciar la consulta, aunque el cargo final deje el saldo por debajo de cero.

El análisis de alias puede devolver un género con name: null. También puede devolver unknown. Ni el respaldo estándar de IA ni el análisis de alias garantizan una respuesta correcta o distinta de null.

El auxiliar Python exige ai_mode. Para alias, utiliza make_item('username', 'prenses', ai_mode='fallback', force_to_genderize=True). force_to_genderize se convierte en forceToGenderize en JSON.

Opción de la solicitudComportamientoCréditos por consulta completada
options.ai_mode: offConsulta únicamente el conjunto de datos.1 crédito, incluido unknown
options.ai_mode: fallbackConsulta primero el conjunto de datos y recurre a la IA estándar si no obtiene un género. Es el modo predeterminado de las consultas individuales.1 crédito en total, incluido el respaldo de IA
options.ai_mode: alwaysConsulta directamente a la IA.2 créditos
forceToGenderize: trueConsulta primero el conjunto de datos; si no encuentra un género, permite interpretar el significado de un alias personal, aunque no contenga un nombre real.1 crédito si el conjunto de datos resuelve la consulta; 2 en total si se utiliza IA

Decide cómo continuar después de un error

Los ejemplos envían cada operación una sola vez y no reintentan automáticamente. Cada nuevo envío es una nueva operación facturable. Un error de red o tiempo de espera indica que el cliente no recibió una respuesta completa; no demuestra que el servidor se haya detenido ni que no se hayan consumido créditos.

Guarda request_id y el estado de facturación junto con el registro del trabajo. El objeto de error conserva la respuesta para una revisión controlada; puede contener la entrada original. No escribas el objeto completo, la respuesta ni la clave API en registros rutinarios.

SituaciónDecisión de la aplicación
unknown completadoConserva null, reason y usage. Es un resultado completado y facturable, no un error que deba repetirse automáticamente.
422Corrige la entrada indicada en Problem Details antes de enviar una nueva solicitud.
401 / 403Comprueba el acceso a la cuenta y los créditos. Repetir la petición no resuelve la causa.
429Respeta Retry-After si está presente. Revisa el error y la facturación antes de planificar otro intento.
Error de red, tiempo de espera o respuesta ilegibleRegistra que el resultado y el cargo no están confirmados. Aclara el estado antes de reenviar; el cliente no puede deshacer una operación ya completada.
billing_status: unconfirmedcharged_credits y remaining_credits pueden ser null. Contacta con soporte con request_id; no sustituyas null por cero.
Algunos elementos del lote fallanGuarda primero los completados. Revisa la facturación de los fallidos y reenvía solo los que corresponda, no todo el lote.

Comprende los tiempos de espera y el comportamiento de conexión

El tiempo de espera de 10 segundos de urllib se aplica a operaciones de socket bloqueantes; no es un límite estricto para la duración total. El ejemplo bloquea redirecciones, analiza respuestas JSON correctas, conserva los Problem HTTP y no reintenta automáticamente.

Las pruebas locales usan respuestas simuladas para éxito, unknown, errores parciales, acceso y conexión. No realizan predicciones reales ni consumen créditos; tampoco miden disponibilidad, exactitud o latencia de producción. Cada comando explícito de demo mostrado envía una consulta facturable independiente.

Comprende los tiempos de espera y el comportamiento de conexión
python3 genderapi_v2.py --demo single
# Run separately to submit another billable sample batch:
python3 genderapi_v2.py --demo batch

Preguntas frecuentes

¿Por qué Python muestra None en lugar de null?

El analizador JSON de Python convierte null en None. Conserva ese valor desconocido; no lo sustituyas por un género predeterminado ni una confianza de cero.

¿Es un paquete SDK oficial?

La guía utiliza un archivo auxiliar HTTP descargable, no un SDK publicado por separado en pip o npm. Guárdalo junto a tu aplicación, revísalo y adáptalo a tu caso.

¿Se cobran créditos cuando gender es null?

Sí. Un resultado unknown completado también consume créditos. El ejemplo ai_mode: off de esta guía cuesta 1 crédito. Conserva el resultado y meta.usage; no repitas automáticamente una respuesta desconocida.

¿Puedo reutilizar directamente mi cliente V1?

Estos ejemplos utilizan los campos type/value y la respuesta data/meta de V2. Un paquete o conector V1 puede utilizar otro contrato. No cambies solo la URL: comprueba el endpoint, la autenticación, los campos y la facturación.

Referencias

La referencia API define las solicitudes y respuestas. La documentación del entorno explica las herramientas HTTP utilizadas.