أرسل type وvalue إلى GenderAPI.io V2. قارن معاملات استعلام GET بجسم JSON في طلبات POST، بما في ذلك country ووضع الذكاء الاصطناعي وforceToGenderize.
معاملات JSON في طلبات POST
المعامل
النوع
مطلوب
القيمة الافتراضية
الوصف
المعاملtype
النوعstring
مطلوبنعم
القيمة الافتراضية—
الوصففئة الإدخال: name أو email أو username.
المعاملvalue
النوعstring
مطلوبنعم
القيمة الافتراضية—
الوصفمطلوب. 1–254 حرفًا؛ غير فارغ ودون أحرف تحكم. يجب أن تكون قيم email بصيغة بريد إلكتروني صالحة.
المعاملcountry
النوعstring
مطلوبلا
القيمة الافتراضية—
الوصفرمز ISO 3166-1 alpha-2 اختياري بأحرف كبيرة، مثل TR أو US. قد يرجع البحث الخاص بدولة إلى مجموعة البيانات العامة.
المعاملforceToGenderize
النوعboolean
مطلوبلا
القيمة الافتراضيةfalse
الوصفابحث في مجموعة البيانات أولًا، ثم استخدم الذكاء الاصطناعي الذي يفسّر الأسماء المستعارة إذا لم توجد نتيجة. مدعوم لـ name وemail وusername.
المعاملoptions
النوعobject
مطلوبلا
القيمة الافتراضية—
الوصفكائن يضم خيارات الذكاء الاصطناعي لكل مُدخل.
المعاملoptions.ai_mode
النوعstring
مطلوبلا
القيمة الافتراضيةfallback
الوصفالقيم المسموح بها: off وfallback وalways. مع forceToGenderize: true، احذف هذا الحقل أو استخدم fallback.
المعاملid
النوعstring
مطلوبلا
القيمة الافتراضية—
الوصفمعرّف اختياري من 1–64 حرفًا في JSON لطلبات POST. يُعاد بجوار نتيجة العنصر في الطلب المجمّع، ويجب أن يكون فريدًا داخل الطلب المجمّع. يُقبل في التقديرات الفردية لكنه لا يُعاد في الاستجابة. غير مدعوم في استعلامات GET.
تعني الشرطة (—) عدم وجود قيمة افتراضية. احذف المُدخلات الاختيارية غير المستخدمة، ولا ترسل null. أمثلة الاستجابات توضيحية وليست قيمًا افتراضية. تعني «يمكن أن يكون null» أن الحقل قد يحتوي على JSON null؛ أما الحقل المحذوف فموصوف بشكل منفصل.
احذف الحقول الاختيارية التي لا تستخدمها، ولا ترسل null أو سلاسل فارغة بدلًا من country أو options. يجب أن تكون القيم المنطقية في JSON هي true أو false، لا سلاسل نصية. النص بترميز UTF-8 مدعوم، ولا حاجة إلى نقل الأسماء حرفيًا إلى ASCII.
معاملات استعلام GET
المعامل
النوع
مطلوب
القيمة الافتراضية
الوصف
المعاملtype
النوعstring
مطلوبلا
القيمة الافتراضيةname
الوصففئة الإدخال: name أو email أو username.
المعاملvalue
النوعstring
مطلوبنعم
القيمة الافتراضية—
الوصفمطلوب. 1–254 حرفًا؛ غير فارغ ودون أحرف تحكم. يجب أن تكون قيم email بصيغة بريد إلكتروني صالحة.
المعاملcountry
النوعstring
مطلوبلا
القيمة الافتراضية—
الوصفرمز ISO 3166-1 alpha-2 اختياري بأحرف كبيرة، مثل TR أو US. قد يرجع البحث الخاص بدولة إلى مجموعة البيانات العامة.
المعاملforceToGenderize
النوعboolean
مطلوبلا
القيمة الافتراضيةfalse
الوصفابحث في مجموعة البيانات أولًا، ثم استخدم الذكاء الاصطناعي الذي يفسّر الأسماء المستعارة إذا لم توجد نتيجة. مدعوم لـ name وemail وusername.
المعاملai_mode
النوعstring
مطلوبلا
القيمة الافتراضيةfallback
الوصفالقيم المسموح بها: off وfallback وalways. مع forceToGenderize: true، احذف هذا الحقل أو استخدم fallback.
المعاملkey
النوعstring
مطلوبلا
القيمة الافتراضية—
الوصفمفتاح API الحالي لطلبات GET. فضّل ترويسة Authorization؛ وتستخدم المفاتيح المفقودة أو غير المعروفة التجربة حسب عنوان IP.
يستخدم GET الحقول type وvalue وcountry وforceToGenderize وai_mode مباشرة في سلسلة الاستعلام، إضافةً إلى المعامل الاختياري key. رمّز القيم باستخدام أداة ترميز معاملات URL في عميل HTTP لديك؛ فمثلًا يصبح @ هو %40. أرسل القيم المنطقية في GET على أنها true أو false. تُرفض الحقول غير المعروفة والقيم غير الصالحة.
قبل إرسال الطلب
أرسل طلبات التقدير إلى GenderAPI.io V2 عبر POST https://api.genderapi.io/api/v2/gender، مع type وvalue في جسم JSON. استخدم مفتاح GenderAPI.io الحالي في Authorization: Bearer YOUR_API_KEY مع Content-Type: application/json. اقرأ النتيجة في data، ومعلومات الوصول والخصم في meta. يُعالَج كل طلب بشكل مستقل.
اختر لغة البرمجة في مثال الكود. اضبط GENDERAPI_API_KEY في بيئة العملية قبل تشغيله. قد تستخدم المفاتيح المفقودة أو غير المعروفة التجربة المشتركة حسب عنوان IP، لذا تأكد عند ربط حساب من أن قيمة meta.access.mode هي api_key.
يستخدم هذا المثال حقول الطلب المشتركة لاسم. غيّر type وvalue لعنوان بريد إلكتروني أو اسم مستخدم، أو اضبط options.ai_mode وforceToGenderize كما هو موضح أعلاه.
كل طلب تقدير عملية جديدة مدفوعة، حتى عند إعادة المحاولة. لا تعيد هذه الأمثلة المحاولة تلقائيًا. تحقّق من حالة الخصم قبل إرسال طلب آخر.
قبل التشغيل: الوصول ومعالجة الأخطاء
شغّل هذه الأمثلة على خادمك. اضبط 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 body = { "type": "name", "value": "محمد", "country": "SA"};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+ مع 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")body = json.loads("{\"type\":\"name\",\"value\":\"محمد\",\"country\":\"SA\"}")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\":\"name\",\"value\":\"محمد\",\"country\":\"SA\"}"; 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\":\"name\",\"value\":\"محمد\",\"country\":\"SA\"}", 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.}
تطبيق وحدة تحكم (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") body := "{\"type\":\"name\",\"value\":\"محمد\",\"country\":\"SA\"}" 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. وثائق بيئة التشغيل