استخدم مفتاح GenderAPI.io الحالي مع مصادقة Bearer. تعرّف على الرصيد المشترك بين V1 وV2، والتجربة حسب عنوان IP، وكيفية التحقق من نوع الوصول.
المصادقة والتجربة المجانية
المعامل
النوع
مطلوب
القيمة الافتراضية
الوصف
المعاملAuthorization
النوعstring
مطلوبلا
القيمة الافتراضية—
الوصفأرسل Bearer YOUR_API_KEY لاستخدام حساب. تستخدم المفاتيح المفقودة أو غير المعروفة التجربة المشتركة حسب عنوان IP.
المعاملContent-Type
النوعstring
مطلوبPOST فقط
القيمة الافتراضية—
الوصفأرسل application/json في طلبات POST.
أرسل Authorization: Bearer YOUR_API_KEY من الخادم. استبدل YOUR_API_KEY بمفتاح GenderAPI.io الحالي. يستخدم الإصداران الرصيد نفسه، ولا حاجة إلى اشتراك منفصل أو مفتاح مخصص لـ V2.
تتطلب جميع طلبات POST الترويسة Content-Type: application/json. استخدم مفتاح API الحالي في ترويسة Bearer. يُعالَج كل طلب بشكل مستقل، وتُخصم أرصدة الطلبات المكررة كالمعتاد.
لا يقبل معامل الاستعلام key إلا GET /gender. في التكاملات، فضّل ترويسة Authorization، لأن عناوين URL قد تُحفظ في سجل التصفح وفي ملفات السجل. لا تضع المفاتيح الخاصة في كود الواجهة الأمامية.
يؤدي المفتاح المفقود أو غير الصالح التنسيق أو غير المعروف إلى استخدام التجربة حسب عنوان IP، المشتركة مع V1. أما المفتاح المعروف المعطّل أو المنتهي الصلاحية أو المقيّد فلا يؤدي إلى ذلك. تحقّق من meta.access.mode: api_key أو ip_trial أو unauthenticated. أسباب الانتقال إلى التجربة حسب عنوان IP هي api_key_missing أو api_key_invalid أو api_key_not_found. لذلك قد يحصل مفتاح غير صالح على استجابة ناجحة عبر التجربة حسب عنوان IP؛ فتحقّق دائمًا من وضع الوصول في بيئة الإنتاج.
تتجدد أرصدة التجربة حسب عنوان IP بعد انقضاء فترة 24 ساعة، وليس بالضرورة عند منتصف الليل. اقرأ resets_at عبر /usage. يتشارك هذه الحصة كل من يستخدم عنوان IP العام نفسه.
انسخ مفتاح API من حسابك في GenderAPI.io. استبدل YOUR_API_KEY أدناه بهذا المفتاح، ثم شغّل المثال الذي اخترته في جلسة الطرفية نفسها. تضبط هذه الأوامر متغير بيئة لتلك الجلسة فقط؛ والقيمة النائبة المنشورة ليست مفتاحًا صالحًا.
في تطبيق أو بيئة نشر، اضبط GENDERAPI_API_KEY كسرّ على جانب الخادم. لا تحمّل الأمثلة ملف .env تلقائيًا. أبقِ المفتاح خارج حِزم المتصفح ونظام التحكم في الإصدارات وعناوين URL العامة.
طرفية macOS/Linux
export GENDERAPI_API_KEY='YOUR_API_KEY'
Windows PowerShell
$env:GENDERAPI_API_KEY = 'YOUR_API_KEY'
تحقّق من الوصول دون استهلاك أرصدة
استدعِ GET /usage مع ترويسة Bearer. يعيد مفتاح الحساب الصالح meta.access.mode: api_key. إذا كانت النتيجة ip_trial، فتحقّق من المفتاح المنسوخ قبل طلب التقديرات. هذا الطلب مجاني، حتى للحساب الذي لم يتبقَّ فيه أي رصيد.
لا تستهلك قراءة الرصيد هذه أي أرصدة، لكنها تُحتسب ضمن حدود معدل الطلبات.
قبل التشغيل: الوصول ومعالجة الأخطاء
شغّل هذه الأمثلة على خادمك. اضبط GENDERAPI_API_KEY في بيئة العملية على مفتاح API الحالي. تأكد من أن قيمة meta.access.mode هي api_key: فالمفتاح غير المعروف قد يؤدي إلى استخدام التجربة حسب عنوان IP.
في استجابات JSON ذات رموز HTTP 4xx و5xx، يُحتفظ بجسم الخطأ وينتهي المثال برمز خروج غير صفري. تحقّق من code وaction وmeta.usage.billing_status قبل إعادة المحاولة.
// 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 response = await fetch("https://api.genderapi.io/api/v2/usage", { method: "GET", headers: { Authorization: `Bearer ${apiKey}`, }, 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+ مع fetch المدمج. احفظه باسم example.mjs وشغّل node example.mjs. وثائق بيئة التشغيل
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")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/usage", method="GET", headers={ "Authorization": "Bearer " + api_key, },)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"); 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/usage")) .timeout(Duration.ofSeconds(30)) .header("Authorization", "Bearer " + apiKey) .GET() .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.Get, "https://api.genderapi.io/api/v2/usage");request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);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.}
تطبيق وحدة تحكم (console) على .NET 8+. استخدمه كملف Program.cs في مشروع console، ثم شغّل 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") request, err := http.NewRequest("GET", "https://api.genderapi.io/api/v2/usage", nil) if err != nil { return err } request.Header.Set("Authorization", "Bearer " + apiKey) 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. وثائق بيئة التشغيل