GenderAPI v2를 사용하여 사용자 이름과 닉네임을 예측합니다. forceToGenderize, 데이터 세트 우선 조회, AI 응답 필드 및 1 또는 2 크레딧 관세에 대해 알아보세요.
요청을 보내기 전에
JSON를 POST https://api.genderapi.io/api/v2/gender로 보냅니다. Authorization: Bearer YOUR_API_KEY 및 Content-Type: application/json에서 기존 API 키를 사용하세요. 모든 요청은 독립적으로 처리됩니다.
코드 예시에서 언어를 선택하세요. 실행하기 전에 프로세스 환경에서 GENDERAPI_API_KEY를 설정하십시오. 누락되거나 인식되지 않는 키는 공유된 IP 평가판을 사용할 수 있으므로 계정을 통합할 때 meta.access.mode가 api_key인지 확인하세요.
사용자 이름이나 별명에는 type: username를 사용하세요. 실제 이름을 추출할 수 없는 경우에도 prenses와 같은 별칭의 의미에서 성별을 추론하려면 forceToGenderize를 true로 설정합니다. 데이터 세트가 먼저 확인됩니다. 닉네임 예측은 name: null인 경우에도 성별을 반환할 수 있습니다.
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+; 표준 라이브러리. example.py로 저장하고 python3 example.py를 실행합니다. 런타임 문서
PHP 8+(cURL 확장 포함). example.php로 저장하고 php example.php를 실행합니다. 런타임 문서
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+; 표준 HTTP 클라이언트. GenderApiExample.java로 저장하고 java GenderApiExample.java를 실행합니다. 런타임 문서
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.}
.NET 8+ 콘솔 애플리케이션. 콘솔 프로젝트에서 Program.cs로 사용한 후 dotnet run를 실행하세요. 런타임 문서
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+; 표준 라이브러리. main.go로 저장하고 go run main.go를 실행합니다. 런타임 문서
예시 응답
이 합성 응답은 측정된 정확도나 보장된 실시간 결과가 아닌 JSON 모양을 보여줍니다. IP 평가판 액세스를 보여줍니다. 인증된 작업은 meta.access.mode: api_key 및 null 평가판 전용 할당량 필드를 보고합니다. 추론을 위한 데이터와 작업 청구 결과를 위한 meta.usage를 읽습니다.
이 예에서는 forceToGenderize: true를 사용합니다. 데이터 세트가 성별을 식별하는 경우 비용은 1크레딧입니다. 그렇지 않으면 AI가 별칭을 해석하고 완료된 요청에는 성별을 알 수 없는 경우에도 총 2크레딧이 소요됩니다. ai_mode를 생략하거나 fallback로 설정합니다. off 또는 always를 forceToGenderize와 함께 사용하면 HTTP 422가 반환됩니다.
닉네임 모드에서는 name: null를 사용한 성별 예측이 허용됩니다. 이는 실제 이름이 추출되지 않았음을 의미하며 구문 분석에 실패한 것은 아닙니다. AI가 성별을 반환하면 sample_count: null 및 confidence_kind: model_reported가 반환됩니다. 점수는 보정된 확률이 아니며 개인의 신원을 확인하지 않습니다.
forceToGenderize가 없으면 단일 사용자 이름 조회는 여전히 총 1 크레딧에 대해 일반 AI fallback로 기본 설정되지만 사용 가능한 실제 이름이 필요합니다. 데이터세트 전용 처리에는 options.ai_mode: off를 사용하세요.