# تحديد الجنس من اسم المستخدم أو الاسم المستعار

> فسّر اسم مستخدم باستخدام GenderAPI.io V2. جرّب المطابقة العادية للأسماء أو التفسير الاختياري للأسماء المستعارة، وتعرّف على تكلفة رصيد واحد أو رصيدين، واحتفظ بالنتائج غير المعروفة.

Canonical HTML: https://www.genderapi.io/ar/determine-gender-from-username

Last reviewed: 2026-09-29

## إشارات الاسم ومعنى الاسم المستعار أمران مختلفان

استخدم type: username لاسم مستخدم أو اسم مستعار. تُزال علامة @ الاختيارية في البداية عند المطابقة مع مجموعة البيانات. يراعي استخراج المرشحين الفواصل والأرقام، وقد يتحقق من أجزاء محدودة من السلسلة. يُبقي وضع الأسماء المستعارة المطابقة على الأجزاء الكاملة، لكنه لا يضيف هؤلاء المرشحين المبنيين على أجزاء السلسلة. يملك السجل المخزَّن المختار أعلى عدد إجمالي بين المرشحين المتاحين؛ ولا يدل ذلك على الاسم الحقيقي للشخص الذي يقف وراء الحساب.

يبحث الرجوع العادي إلى الذكاء الاصطناعي عن اسم أول يمكن التعرف عليه. ويسمح forceToGenderize أيضًا بارتباط عبر اسم مستعار شخصي عندما يتعذّر استخراج اسم حقيقي. قد يعيد كلا المسارين unknown؛ والعلامة التجارية أو الشخصية الخيالية أو الحساب المشترك لا تمثل بالضرورة شخصًا واحدًا.

| مثال على المُدخل | النهج | ما يجب التحقق منه |
| --- | --- | --- |
| `@alice.smith` | ابدأ بالرجوع العادي، الذي يبحث في مجموعة البيانات أولًا. | تحقّق من الاسم المختار وطريقة المطابقة؛ ولا تفترض أن الجزء الأول هو ما اختير. |
| `robert89` | قد تُزال الأرقام أثناء استخراج المرشحين. | الاسم المطابق ارتباط، وليس هوية مؤكدة. |
| `prenses` | فعّل forceToGenderize للسماح بمحاولة من الذكاء الاصطناعي تعتمد على الاسم المستعار عندما لا توجد نتيجة. | قد تكون قيمة gender غير null بينما name هو null. قيم الذكاء الاصطناعي من نوع model_reported. |
| `team_support` | تعامل مع حسابات الأدوار والحسابات المشتركة على أنها قد لا تخص شخصًا واحدًا. | احتفظ بـ unknown ولا تنسب هوية فردية إلى حساب مشترك. |

## جرّب تفسير الأسماء المستعارة في تكاملك

يفعّل هذا الطلب تفسير الأسماء المستعارة. يُبحث في مجموعة البيانات أولًا. وإذا لم تُعِد جنسًا، يمكن للذكاء الاصطناعي استخدام معنى الاسم المستعار. احذف forceToGenderize للبحث العادي؛ إذ تستخدم الطلبات الفردية الرجوع العادي إلى الذكاء الاصطناعي افتراضيًا في كل الأحوال.

في هذا المثال يُرسل سياق الدولة TR. استخدم سياقًا ذا صلة من تطبيقك، وتحقّق من data.match.scope؛ فالدولة المُرسلة لا تضمن وجود سجل خاص بها. ولا تدل على الجنسية ولا على مكان الإقامة.

شغّل هذه الأمثلة على خادمك. اضبط GENDERAPI_API_KEY في بيئة العملية على مفتاح API الحالي. تأكد من أن قيمة meta.access.mode هي api_key: فالمفتاح غير المعروف قد يؤدي إلى استخدام التجربة حسب عنوان IP.

كل طلب تقدير عملية جديدة مدفوعة، حتى عند إعادة المحاولة. لا تعيد هذه الأمثلة المحاولة تلقائيًا. تحقّق من حالة الخصم قبل إرسال طلب آخر.

في استجابات JSON ذات رموز HTTP 4xx و5xx، يُحتفظ بجسم الخطأ وينتهي المثال برمز خروج غير صفري. تحقّق من code وaction وmeta.usage.billing_status قبل إعادة المحاولة.

**cURL**

cURL 7.76+ في واجهة أوامر POSIX. شغّله في الطرفية.

```bash
curl --silent --show-error --fail-with-body --max-time 30 \
  --request POST 'https://api.genderapi.io/api/v2/gender' \
  --header "Authorization: Bearer ${GENDERAPI_API_KEY:?Set GENDERAPI_API_KEY}" \
  --header 'Content-Type: application/json' \
  --data '{
  "type": "username",
  "value": "prenses",
  "country": "TR",
  "forceToGenderize": true
}'
```

**JavaScript / Node.js**

Node.js 22+ مع fetch المدمج. احفظه باسم example.mjs وشغّل node example.mjs.

```javascript
// 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.
}
```

**Python**

Python 3.10+ مع المكتبة القياسية. احفظه باسم example.py وشغّل python3 example.py.

```python
import json
import os
import sys
import urllib.error
import urllib.request

api_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 None

request = 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.
```

**PHP**

PHP 8+ مع امتداد cURL. احفظه باسم example.php وشغّل php example.php.

```php
<?php
$apiKey = getenv('GENDERAPI_API_KEY');
if (!$apiKey) {
    throw new RuntimeException('Set GENDERAPI_API_KEY');
}
$body = json_decode('{"type":"username","value":"prenses","country":"TR","forceToGenderize":true}', true, 512, JSON_THROW_ON_ERROR);

$ch = curl_init('https://api.genderapi.io/api/v2/gender');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($body, JSON_THROW_ON_ERROR),
]);
$raw = curl_exec($ch);
if ($raw === false) {
    throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE) ?: '';
curl_close($ch);
if (strpos($contentType, 'json') === false) {
    throw new RuntimeException("HTTP $status: expected a JSON response");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
$output = json_encode($result, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . PHP_EOL;
if ($status < 200 || $status >= 300) {
    fwrite(STDERR, $output); // Preserve the Problem Details body.
    exit(1);
}
echo $output;
// For batches, inspect every item; HTTP 200 can contain item errors.
```

**Java**

Java 17+ مع عميل HTTP القياسي. احفظه باسم GenderApiExample.java وشغّل java GenderApiExample.java.

```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.
    }
}
```

**C# / .NET**

تطبيق وحدة تحكم (console) على .NET 8+. استخدمه كملف Program.cs في مشروع console، ثم شغّل dotnet run.

```csharp
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.
}
```

**Go**

Go 1.22+ مع المكتبة القياسية. احفظه باسم main.go وشغّل go run main.go.

```go
package main

import (
    "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)
    }
}
```

- [مرجع V2 الكامل لأسماء المستخدمين](https://www.genderapi.io/ar/docs/v2/gender-from-username)

## احفظ النتيجة مع أدلتها

الارتباط المُستنتج ليس الجنس الذي يصرّح به الشخص. احفظ المُدخل الأصلي والأدلة المُعادة وما صرّح به الشخص كلًّا على حدة. النتيجة غير المعروفة نتيجة صالحة، ولا ينبغي أن تتحول في تطبيقك إلى فئة مُخمَّنة.

| الحقل | طريقة الاستخدام |
| --- | --- |
| `data.gender / data.result_status` | استخدم male أو female فقط مع identified. في النتيجة غير المعروفة، احتفظ بقيمة JSON null الأصلية. |
| `data.name / data.match` | تحقّق من الاسم المُعاد ومن المرشح المختار. لا تثبت المطابقة على جزء من السلسلة أن المُدخل يخص شخصًا بهذا الاسم. |
| `data.confidence / data.confidence_kind` | درجة الثقة على مقياس من 0 إلى 1 أو null. تستند observed_frequency إلى تكرارات مخزَّنة؛ أما model_reported فقيمة يقدّمها الذكاء الاصطناعي. قيّم العتبات لكل نوع على حدة. |
| `data.source / data.sample_count` | ميّز بين dataset وai وnone. لا تملك نتائج الذكاء الاصطناعي حجم عينة مخزَّنًا. وحجم العينة ليس قيمة دقة مقيسة. |
| `meta.access.mode` | في تكامل مرتبط بحساب، تحقّق من أن القيمة api_key. أما المفاتيح المفقودة أو غير المعروفة فقد تستخدم التجربة المشتركة حسب عنوان IP. |
| `meta.usage` | اقرأ charged_credits وbilling_status. تُخصم أرصدة النتيجة غير المعروفة الناجحة. ولا يثبت فقدان الاستجابة أن الطلب كان مجانيًا. |

- [حقول الاستجابة والنتائج غير المعروفة](https://www.genderapi.io/ar/docs/v2/responses)
- [شرح الدقة ودرجة الثقة](https://www.genderapi.io/ar/accuracy-methodology)
- [مصادر البيانات وملف قاعدة البيانات المؤرَّخ](https://www.genderapi.io/ar/data-provenance)

## متى تستخدم الذكاء الاصطناعي

forceToGenderize اختياري للأسماء وعناوين البريد الإلكتروني وأسماء المستخدمين. عند تفعيله، احذف ai_mode أو استخدم fallback؛ فلا يمكن الجمع بينه وبين off أو always، ويعيد ذلك 422. يكفي رصيد ابتدائي موجب لبدء الطلب، حتى لو جعل الخصم النهائي الرصيد سالبًا.

قد يعيد وضع الأسماء المستعارة جنسًا مع name: null، وقد يعطي أيضًا نتيجة غير معروفة. لا يضمن الرجوع العادي إلى الذكاء الاصطناعي ولا تفسير الأسماء المستعارة إجابة صحيحة أو قيمة غير null.

| خيار الطلب | السلوك | الأرصدة لكل بحث ناجح |
| --- | --- | --- |
| options.ai_mode: off | يستخدم مجموعة البيانات فقط. | 1، حتى للنتيجة غير المعروفة |
| options.ai_mode: fallback | يبحث في مجموعة البيانات أولًا، ثم يستخدم الذكاء الاصطناعي العادي إذا لم يُعَد جنس. وهو الإعداد الافتراضي للطلبات الفردية. | 1 إجمالًا، بما في ذلك الرجوع إلى الذكاء الاصطناعي |
| options.ai_mode: always | يستخدم الذكاء الاصطناعي مباشرة. | 2 |
| forceToGenderize: true | يبحث في مجموعة البيانات أولًا، ثم يترك للذكاء الاصطناعي تفسير اسم مستعار شخصي أو كنية، حتى دون اسم أول حقيقي. | 1 للنتيجة الموجودة في مجموعة البيانات؛ و2 إجمالًا إذا استُخدم الذكاء الاصطناعي |

- [خيارات الذكاء الاصطناعي وتفسير الأسماء المستعارة](https://www.genderapi.io/ar/docs/v2/ai-options)
- [الأرصدة والاستخدام](https://www.genderapi.io/ar/docs/v2/credits-and-usage)

## احتفظ بنتيجة كل اسم مستخدم عند معالجة قائمة

استخدم POST /api/v2/gender/batch لقوائم أسماء المستخدمين أو للقوائم المختلطة من الأسماء وعناوين البريد الإلكتروني وأسماء المستخدمين. الحد 50 عنصرًا مع مفتاح API أو 10 عناصر في التجربة حسب عنوان IP. لكل عنصر خيارات خاصة به للدولة وللذكاء الاصطناعي، ويجب أن تكون المعرّفات الاختيارية فريدة داخل الطلب المجمّع.

افتراضيًا، يستخدم الطلب المجمّع مجموعة البيانات فقط. فعّل fallback لكل عنصر إذا أردت استخدام الذكاء الاصطناعي العادي، أو اضبط forceToGenderize لكل عنصر لتفسير الأسماء المستعارة. افحص data أو error في كل نتيجة، واستخدم id أو index لمطابقة النتيجة مع الصف الأصلي. تُخصم أرصدة العناصر غير المعروفة الناجحة.

- [إنشاء طلب مجمّع ومعالجة الأخطاء الجزئية](https://www.genderapi.io/ar/docs/v2/batch)
- [الأخطاء والاستجابات المفقودة وإعادة المحاولة](https://www.genderapi.io/ar/docs/v2/errors-and-retries)

## اعرف ما الذي ترسله

لا يرسل العرض المباشر القيمة المُدخلة إلى GenderAPI.io إلا عندما ترسلها بنفسك. إذا استُخدم الذكاء الاصطناعي، تُنقل type وvalue وسياق الدولة المُرسل إلى الخدمة المهيأة للتقديرات. للحصول على تقدير يعتمد على مجموعة البيانات فقط، اضبط options.ai_mode: off في تكاملك دون forceToGenderize.

تصف سياسة الخصوصية واتفاقية معالجة البيانات وقائمة المعالجين الفرعيين شروط المعالجة المنشورة. النتيجة ارتباط مُستنتج، وما يصرّح به الشخص هو المقدَّم. لا تستخدمها أساسًا لقرارات ذات عواقب مهمة على أي شخص.

- [سياسة الخصوصية](https://www.genderapi.io/ar/privacy-policy)
- [اتفاقية معالجة البيانات](https://www.genderapi.io/ar/data-processing-agreement)
- [المعالجون الفرعيون](https://www.genderapi.io/ar/subprocessors)

## هل يجب أن يحتوي اسم المستخدم على اسم أول حقيقي؟

يتطلب التقدير العادي بالذكاء الاصطناعي اسمًا أول قابلًا للاستخدام. ومع forceToGenderize يمكن لـ API أيضًا محاولة الربط عبر اسم مستعار عندما لا يعطي البحث في مجموعة البيانات نتيجة. لا يتطلب هذا الوضع اسمًا أول حقيقيًا، وقد يعيد name: null.

## هل يضمن forceToGenderize الحصول على جنس؟

لا. فهو يتيح تفسير الأسماء المستعارة، لكن النتيجة النهائية قد تظل غير معروفة. احتفظ بقيمة JSON null الأصلية وتحقّق من result_status وreason.

## هل تفحص API ملف الحساب على وسائل التواصل الاجتماعي؟

تفسّر نقطة النهاية هذه القيمة المُرسلة فقط. ولا تجلب ملف الحساب أو منشوراته أو صوره لمعرفة صاحبه.

## هل يمكنني استخدام forceToGenderize مع الأسماء أو عناوين البريد الإلكتروني أيضًا؟

نعم. وهو اختياري للمُدخلات من نوع name وemail وusername. تُستخدم مجموعة البيانات أولًا، ثم الذكاء الاصطناعي مع تفسير الأسماء المستعارة إذا لم توجد نتيجة: رصيد واحد للنتيجة الموجودة في مجموعة البيانات أو رصيدان إجمالًا إذا استُخدم الذكاء الاصطناعي.
