Předvídejte z uživatelských jmen a přezdívek pomocí GenderAPI v2. Naučte se forceToGenderize, první vyhledávání datové sady, pole odezvy AI a tarif 1 nebo 2 kreditů.
Před odesláním požadavku
Pošlete JSON na POST https://api.genderapi.io/api/v2/gender. Použijte svůj stávající klíč API v Authorization: Bearer YOUR_API_KEY a Content-Type: application/json. Každá žádost je zpracována samostatně.
Vyberte svůj jazyk v příkladu kódu. Před spuštěním nastavte GENDERAPI_API_KEY v prostředí procesu. Chybějící nebo nerozpoznané klíče mohou používat sdílenou zkušební verzi IP, takže při integraci účtu potvrďte, že meta.access.mode je api_key.
Pro uživatelské jméno nebo přezdívku použijte type: username. Nastavte forceToGenderize na true, abyste odvodili pohlaví z významu aliasu, jako je prenses, i když nelze extrahovat žádné skutečné křestní jméno. Nejprve se zkontroluje datová sada. Predikce přezdívky může vrátit pohlaví, i když name: null.
Vyberte programovací jazyk.Nastavte klíč API, poté spusťte příklad na svém serveru.
Každý požadavek na predikci je nová zúčtovatelná operace, včetně opakování. Tyto příklady se automaticky neopakují. Před odesláním další žádosti zkontrolujte stav fakturace.
Než spustíte: přístup a zpracování chyb
Spusťte tyto příklady na svém serveru. Nastavte GENDERAPI_API_KEY v procesním prostředí na váš stávající klíč API. Potvrďte, že meta.access.mode je api_key: Nerozpoznaný klíč se může vrátit ke zkušební verzi IP.
Odpovědi HTTP 4xx a 5xx JSON zachovají tělo chyby a vrátí nenulový stav ukončení. Před dalším pokusem zkontrolujte code, action a meta.usage.billing_status.
cURL 7.76+ v prostředí POSIX. Spusťte ve svém terminálu. Runtime dokumentace
JavaScript / Node.js
// Server-side Node.js. Save as example.mjs.const apiKey = process.env.GENDERAPI_API_KEY;if (!apiKey) throw new Error("Set GENDERAPI_API_KEY");const body = { "type": "username", "value": "prenses", "country": "TR", "forceToGenderize": true};const response = await fetch("https://api.genderapi.io/api/v2/gender", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json", }, body: JSON.stringify(body), signal: AbortSignal.timeout(30_000), redirect: "error",});const raw = await response.text();if (!(response.headers.get("content-type") ?? "").includes("json")) { throw new Error(`HTTP ${response.status}: expected JSON; request ID ${response.headers.get("x-request-id")}`);}const result = JSON.parse(raw); // Also accepts application/problem+json.if (!response.ok) { console.error(`HTTP ${response.status}`, result); process.exitCode = 1; // A retry is a new operation; inspect billing first.} else { console.log(JSON.stringify(result, null, 2)); // For batches, inspect every item: HTTP 200 may contain item errors.}
Node.js 22+; vestavěný aport. Uložte jako example.mjs a spusťte node example.mjs. Runtime dokumentace
Python
import jsonimport osimport sysimport urllib.errorimport urllib.requestapi_key = os.environ.get("GENDERAPI_API_KEY")if not api_key: raise RuntimeError("Set GENDERAPI_API_KEY")body = json.loads("{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}")class NoRedirect(urllib.request.HTTPRedirectHandler): def redirect_request(self, req, fp, code, msg, headers, newurl): return Nonerequest = urllib.request.Request( "https://api.genderapi.io/api/v2/gender", method="POST", data=json.dumps(body).encode("utf-8"), headers={ "Authorization": "Bearer " + api_key, "Content-Type": "application/json", },)opener = urllib.request.build_opener(NoRedirect())try: response = opener.open(request, timeout=30)except urllib.error.HTTPError as error: response = error # Keep the Problem Details body on non-2xx responses.with response: status = response.status raw = response.read().decode("utf-8") if "json" not in response.headers.get("Content-Type", ""): raise RuntimeError(f"HTTP {status}: expected a JSON response") result = json.loads(raw)print(json.dumps(result, indent=2), file=sys.stderr if status >= 300 else sys.stdout)if not 200 <= status < 300: sys.exit(1) # Inspect code, action and billing before retrying.# For batches, inspect every item even when HTTP status is 200.
Python 3.10+; standardní knihovna. Uložte jako example.py a spusťte python3 example.py. Runtime dokumentace
PHP 8+ s rozšířením cURL. Uložte jako example.php a spusťte php example.php. Runtime dokumentace
Java
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.nio.charset.StandardCharsets;import java.time.Duration;public class GenderApiExample { private static String requiredEnv(String name) { String value = System.getenv(name); if (value == null || value.isBlank()) throw new IllegalStateException("Set " + name); return value; } public static void main(String[] args) throws Exception { String apiKey = requiredEnv("GENDERAPI_API_KEY"); String body = "{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}"; HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .followRedirects(HttpClient.Redirect.NEVER) .build(); HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.genderapi.io/api/v2/gender")) .timeout(Duration.ofSeconds(30)) .header("Authorization", "Bearer " + apiKey) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8)) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)); if (!response.headers().firstValue("content-type").orElse("").contains("json")) { throw new IllegalStateException("HTTP " + response.statusCode() + ": expected JSON"); } // JSON text; parse with your application's JSON library when integrating. if (response.statusCode() < 200 || response.statusCode() >= 300) { System.err.println(response.body()); // Includes Problem Details. System.exit(1); } System.out.println(response.body()); // For batches, inspect each item's data or error, including on HTTP 200. }}
Java 17+; standardní klient HTTP. Uložte jako GenderApiExample.java a spusťte java GenderApiExample.java. Runtime dokumentace
C# / .NET
using System;using System.Net.Http;using System.Net.Http.Headers;using System.Text;using System.Text.Json;string RequiredEnv(string name) => !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(name)) ? Environment.GetEnvironmentVariable(name)! : throw new InvalidOperationException($"Set {name}");var apiKey = RequiredEnv("GENDERAPI_API_KEY");using var handler = new HttpClientHandler { AllowAutoRedirect = false };using var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.genderapi.io/api/v2/gender");request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);request.Content = new StringContent("{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}", Encoding.UTF8, "application/json");using var response = await client.SendAsync(request);var raw = await response.Content.ReadAsStringAsync();if (!(response.Content.Headers.ContentType?.MediaType?.Contains("json") ?? false)) throw new InvalidOperationException($"HTTP {(int)response.StatusCode}: expected JSON");using var result = JsonDocument.Parse(raw);if (!response.IsSuccessStatusCode){ Console.Error.WriteLine(result.RootElement); // Preserve Problem Details. Environment.ExitCode = 1;}else{ Console.WriteLine(result.RootElement); // For batches, inspect every item even on HTTP 200.}
Konzolová aplikace .NET 8+. Použijte jako Program.cs v projektu konzoly a poté spusťte dotnet run. Runtime dokumentace
Go
package mainimport ( "encoding/json" "fmt" "io" "net/http" "os" "strings" "time")func requiredEnv(name string) string { value := os.Getenv(name) if value == "" { panic("Set " + name) } return value}func run() error { apiKey := requiredEnv("GENDERAPI_API_KEY") body := "{\"type\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}" request, err := http.NewRequest("POST", "https://api.genderapi.io/api/v2/gender", strings.NewReader(body)) if err != nil { return err } request.Header.Set("Authorization", "Bearer " + apiKey) request.Header.Set("Content-Type", "application/json") client := &http.Client{ Timeout: 30 * time.Second, CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, } response, err := client.Do(request) if err != nil { return err } defer response.Body.Close() raw, err := io.ReadAll(response.Body) if err != nil { return err } if !strings.Contains(response.Header.Get("Content-Type"), "json") || !json.Valid(raw) { return fmt.Errorf("HTTP %d: expected a JSON response", response.StatusCode) } if response.StatusCode < 200 || response.StatusCode >= 300 { return fmt.Errorf("HTTP %d: %s", response.StatusCode, raw) } fmt.Println(string(raw)) // For batches, inspect every item even on HTTP 200. return nil}func main() { if err := run(); err != nil { fmt.Fprintln(os.Stderr, err) // Keep Problem Details for error handling. os.Exit(1) }}
Go 1,22+; standardní knihovna. Uložte jako main.go a spusťte go run main.go. Runtime dokumentace
Příklad odpovědi
Tato syntetická odezva ilustruje tvar JSON, neměřenou přesnost nebo zaručený živý výsledek. Ukazuje IP-zkušební přístup; ověřená operace hlásí pole kvóty meta.access.mode: api_key a null pouze pro zkušební verzi. Přečtěte si data pro odvození a meta.usage pro výsledek účtování operace.
Tento příklad používá forceToGenderize: true. Pokud datová sada identifikuje pohlaví, cena je 1 kredit. Jinak AI interpretuje alias a dokončený požadavek stojí celkem 2 kredity, i když pohlaví zůstává neznámé. Vynechejte ai_mode nebo jej nastavte na fallback. Použití off nebo always spolu s forceToGenderize vrátí HTTP 422.
V režimu přezdívky je povolena předpověď pohlaví pomocí name: null. Znamená to, že nebylo extrahováno žádné skutečné křestní jméno, ne že analýza selhala. Pokud AI vrátí pohlaví, vrátí se sample_count: null a confidence_kind: model_reported. Skóre není kalibrovaná pravděpodobnost a neověřuje osobní identitu.
Bez forceToGenderize je vyhledávání jednoho uživatelského jména stále ve výchozím nastavení běžné AI fallback pro celkový 1 kredit, ale vyžaduje použitelné skutečné křestní jméno. Pro zpracování pouze datové sady použijte options.ai_mode: off.