GenderAPI V2 · Guida all'implementazione

Usare GenderAPI.io V2 con Python

Chiama GenderAPI.io V2 da Python con un esempio basato sulla libreria standard. Invia nomi, indirizzi email e nomi utente, elabora batch misti e leggi i campi data/meta.

PythonPython 3.10+HTTP lato server

GenderAPI.io Aggiornato il:

Preparare un progetto Python lato server

Questa guida chiama l'endpoint di GenderAPI.io V2 https://api.genderapi.io/api/v2/gender con la chiave API nell'intestazione Bearer. Usa Python 3.10 o versioni successive e scarica genderapi_v2.py nel tuo progetto. L'esempio usa urllib.request e json della libreria standard di Python; non richiede alcun pacchetto pip.

Imposta GENDERAPI_API_KEY nell'ambiente del server. YOUR_API_KEY nell'esempio seguente non è una chiave valida. Non inserire credenziali reali in file sotto controllo di versione, notebook condivisi o applicazioni lato client. Importare il modulo o eseguirlo senza opzioni demo non invia alcuna richiesta.

Configurare l'ambiente Python
python3 --version
export GENDERAPI_API_KEY="YOUR_API_KEY"

Inviare una richiesta esplicita basata solo sul set di dati

Salva il codice seguente come single.py accanto al file scaricato ed esegui python3 single.py. Il modulo di supporto invia type: name, value: Alice e options.ai_mode: off in JSON. La previsione si legge in data, mentre le informazioni sulla richiesta e sull'addebito si trovano in meta.

Una chiamata riuscita costa 1 credito, anche in caso di risultato sconosciuto; il nome di esempio non garantisce una previsione. make_item accetta name, email o username e richiede una modalità IA esplicita. Aggiungi country solo quando disponi di un contesto pertinente.

Prima di inviare qualsiasi cosa, il modulo di supporto richiede una chiave API esadecimale di 24 caratteri. Questo verifica il formato della chiave, non la sua esistenza. Il modulo rifiuta inoltre le risposte riuscite della prova IP come modalità di accesso inattesa; il controllo avviene dopo la ricezione della risposta e non può annullare un credito di prova già consumato.

Ricerca singola in Python
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"])

Salvare il risultato insieme alle evidenze

Un'associazione dedotta non è il genere dichiarato da una persona. Salva separatamente l'input originale, le evidenze restituite e ciò che la persona ha dichiarato. Un risultato sconosciuto è un risultato valido e non dovrebbe diventare una categoria indovinata nella tua applicazione.

CampoUtilizzo
data.gender / data.result_statusUsa male o female solo con identified. In caso di risultato sconosciuto conserva il valore JSON null nativo.
data.name / data.matchVerifica il nome restituito e il candidato selezionato. Una corrispondenza su una sottostringa non dimostra che l'input appartenga a una persona con quel nome.
data.confidence / data.confidence_kindLa confidenza è su una scala da 0 a 1 oppure è null. observed_frequency si basa su frequenze memorizzate; model_reported è un valore fornito dall'IA. Valuta le soglie separatamente per ciascun tipo.
data.source / data.sample_countDistingui tra dataset, ai e none. I risultati dell'IA non hanno una dimensione del campione memorizzata. Una dimensione del campione non è un valore di accuratezza misurato.
meta.access.modeIn un'integrazione con account verifica che venga riportato api_key. Le chiavi mancanti o non riconosciute possono invece usare la prova IP condivisa.
meta.usageLeggi charged_credits e billing_status. Un risultato sconosciuto riuscito viene addebitato. Una risposta persa non dimostra che la richiesta sia stata gratuita.

Elaborare un batch misto e conservare l'id di ogni riga

GenderAPI.io V2 elabora batch misti tramite POST https://api.genderapi.io/api/v2/gender/batch: fino a 50 elementi con una chiave dell'account o 10 con la prova IP. Questi esempi richiedono una chiave dell'account. Assegna a ogni elemento un id stabile e univoco e una modalità IA esplicita. Un batch può combinare nomi, indirizzi email e nomi utente, e ogni elemento può avere un contesto country facoltativo.

Leggi ogni elemento in data e il riepilogo in meta.summary. Una risposta HTTP 200 può contenere errori di singoli elementi; un batch in cui tutti gli elementi non sono riusciti può restituire una risposta Problem di primo livello con i risultati. I risultati sconosciuti riusciti vengono contati in succeeded. Con index e id colleghi ogni risultato alla riga di origine corretta.

Per i lavori più grandi suddividi l'input in gruppi di al massimo 50 elementi e inviali inizialmente uno alla volta. Salva ogni risposta e il relativo utilizzo prima di passare al gruppo successivo. Fermati in caso di errore di trasporto, di errore di accesso all'account o di addebito non confermato e chiarisci la situazione del gruppo corrente. Introduci invii paralleli solo dopo aver verificato i limiti del tuo account; la dimensione massima del batch non garantisce una determinata capacità di elaborazione.

Ricerca batch in Python
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)

Decidere quando usare l'IA

forceToGenderize è facoltativo per nomi, indirizzi email e nomi utente. Quando è attivo, ometti ai_mode o usa fallback; off e always non possono essere combinati con questa opzione e restituiscono 422. Un saldo iniziale positivo basta per avviare una richiesta, anche se l'addebito finale rende il saldo negativo.

La modalità nickname può restituire un genere insieme a name: null. Può anche dare un risultato sconosciuto. Né il normale fallback IA né l'interpretazione dei nickname garantiscono una risposta corretta o un valore diverso da null.

Il modulo di supporto per Python richiede sempre ai_mode. Per l'interpretazione dei nickname usa make_item('username', 'prenses', ai_mode='fallback', force_to_genderize=True). Il modulo converte force_to_genderize nel campo JSON forceToGenderize.

Opzione della richiestaComportamentoCrediti per una ricerca riuscita
options.ai_mode: offUsa solo il set di dati.1, anche per un risultato sconosciuto
options.ai_mode: fallbackConsulta prima il set di dati e poi usa la normale IA se non viene restituito un genere. È il valore predefinito per le richieste singole.1 in totale, fallback IA incluso
options.ai_mode: alwaysUsa direttamente l'IA.2
forceToGenderize: trueConsulta prima il set di dati e poi lascia che l'IA interpreti un nickname personale o un alias, anche senza un vero nome proprio.1 per un risultato trovato nel set di dati; 2 in totale se viene usata l'IA

Decidere che cosa fare dopo un errore

Gli esempi inviano ogni operazione una sola volta. Non la ripetono mai automaticamente: un nuovo invio è una nuova operazione soggetta ad addebito. Un timeout o un errore di connessione significa che il client non ha ricevuto una risposta completa; non dimostra che il server abbia interrotto l'elaborazione né che non siano stati addebitati crediti.

Salva il request_id restituito e lo stato dell'addebito insieme al record del tuo lavoro. L'oggetto di errore conserva la risposta per un'analisi controllata, ma può contenere l'input originale: non scrivere nei log ordinari né l'intero oggetto né la risposta né la chiave API.

SituazioneDecisione dell'applicazione
Risultato sconosciuto riuscitoConserva null, reason e usage. È un risultato completato e addebitato, non una riga non riuscita da ritentare automaticamente.
Errore di convalida 422Correggi l'input indicato nei campi di Problem Details prima di inviare una nuova richiesta.
401 / 403Verifica l'accesso all'account o il saldo disponibile. Inviare di nuovo la stessa richiesta non risolve la causa.
429Rispetta l'intestazione Retry-After, se presente. Verifica l'errore e lo stato dell'addebito, poi pianifica consapevolmente il tentativo successivo.
Errore di rete, timeout o risposta illeggibileRegistra che il risultato e l'addebito non sono confermati. Chiarisci la situazione prima di inviare di nuovo; il client non può annullare un'elaborazione già completata sul server.
billing_status: unconfirmedcharged_credits e remaining_credits possono essere null. Contatta l'assistenza indicando il request_id prima di un nuovo tentativo; non sostituire null con zero crediti.
Errori in alcuni elementi di un batchSalva prima gli elementi completati. Verifica gli elementi non riusciti e il relativo addebito; invia di nuovo solo gli errori ammissibili, non l'intero batch.

Conoscere il comportamento di rete dell'esempio

Il timeout di 10 secondi di urllib si applica alle operazioni bloccanti sui socket; non è un limite garantito alla durata totale della richiesta. L'esempio disattiva i reindirizzamenti HTTP, analizza le risposte JSON riuscite e conserva le risposte Problem HTTP. Non ripete mai automaticamente le richieste.

I test locali usano risposte di trasporto simulate per chiamate riuscite, risultati sconosciuti, batch parzialmente riusciti, accesso all'account ed errori. Verificano la logica di controllo dell'esempio; non misurano la disponibilità dell'API in produzione, l'accuratezza dell'inferenza o i tempi di risposta. Ogni comando demo esplicito riportato di seguito invia una propria richiesta soggetta ad addebito.

Demo esplicite facoltative in Python
python3 genderapi_v2.py --demo single
# Run separately to submit another billable sample batch:
python3 genderapi_v2.py --demo batch

Domande frequenti

Perché Python mostra None invece di null?

Il decodificatore JSON di Python converte null in None. Conserva il valore sconosciuto: non sostituirlo con un genere predefinito né con una confidenza pari a zero quando salvi o esporti il risultato.

Un risultato sconosciuto consuma crediti?

Sì. Una normale ricerca riuscita costa 1 credito, anche quando gender è null. Il normale fallback IA è incluso in quel credito. La modalità always costa 2 crediti; forceToGenderize costa 1 credito se il risultato proviene dal set di dati, oppure 2 se viene usata l'IA.

L'esempio ripete una richiesta non riuscita?

No. Ogni nuova richiesta è un'operazione a sé. Verifica l'errore, i risultati dei singoli elementi e lo stato dell'addebito prima di decidere se inviare di nuovo. Una risposta mancante non dimostra che il tentativo precedente sia stato gratuito.

Devo installare un pacchetto?

No. Scarica l'esempio direttamente da questa guida di GenderAPI.io. Non ha dipendenze di esecuzione da pacchetti esterni e non è un SDK separato pubblicato su pip o npm. Esaminalo e adattalo alla tua applicazione; per il contratto dell'API fa fede la documentazione di GenderAPI.io V2.

Fonti

La documentazione API definisce richieste e risposte. La documentazione dell'ambiente di esecuzione descrive gli strumenti HTTP utilizzati.