GenderAPI V2 · دليل التنفيذ

استخدام GenderAPI.io V2 مع Python

استدعِ GenderAPI.io V2 من Python بمثال يعتمد على المكتبة القياسية. أرسل الأسماء وعناوين البريد الإلكتروني وأسماء المستخدمين، وعالج الطلبات المجمّعة المختلطة، واقرأ حقول data وmeta في الاستجابة.

PythonPython 3.10+HTTP على الخادم

GenderAPI.io تاريخ التحديث:

جهّز مشروع Python يعمل على الخادم

يستدعي هذا الدليل نقطة النهاية https://api.genderapi.io/api/v2/gender في GenderAPI.io V2 باستخدام مفتاح API في ترويسة Bearer. استخدم Python 3.10 أو إصدارًا أحدث، ونزّل genderapi_v2.py إلى مشروعك. يستخدم المثال urllib.request وjson من المكتبة القياسية في Python؛ ولا يحتاج إلى أي حزمة pip.

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

إعداد بيئة Python
python3 --version
export GENDERAPI_API_KEY="YOUR_API_KEY"

أرسل طلبًا واحدًا يعتمد صراحةً على مجموعة البيانات فقط

احفظ الكود التالي باسم single.py بجوار الملف الذي نزّلته، ثم شغّل python3 single.py. ترسل الدالة المساعدة type: name وvalue: Alice وoptions.ai_mode: off بتنسيق JSON. اقرأ التقدير من data، وتفاصيل الطلب والخصم من meta. يستهلك الاستدعاء الناجح رصيدًا واحدًا، بما في ذلك النتيجة غير المعروفة؛ ولا يضمن الاسم المستخدم في المثال الحصول على تقدير.

تقبل make_item القيم name أو email أو username، وتتطلب تحديد وضع الذكاء الاصطناعي صراحةً. أضف country فقط عندما يتوفر لديك سياق ذو صلة. تتطلب الدالة المساعدة مفتاح API سداسي عشريًا من 24 حرفًا قبل الإرسال. وهذا يتحقق من الصيغة، لا من وجود المفتاح. كما ترفض الاستجابات الناجحة من التجربة حسب عنوان IP بوصفها عدم تطابق في نمط الوصول؛ ويجري هذا الفحص بعد وصول الاستجابة، لذا لا يمكنه التراجع عن رصيد التجربة المستهلك.

بحث فردي في Python
from genderapi_v2 import GenderAPIError, make_item, predict

try:
    response = predict(make_item("name", "Alice", ai_mode="off"))
except GenderAPIError as error:
    # Record a reference; do not log the whole error response.
    print("Request failed:", error.request_id)
    raise SystemExit(1)
else:
    result = response["data"]
    print(result["result_status"], result["gender"])
    print(result["confidence"], result["confidence_kind"])
    print(response["meta"]["usage"])

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

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

الحقلطريقة الاستخدام
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. تُخصم أرصدة النتيجة غير المعروفة الناجحة. ولا يثبت فقدان الاستجابة أن الطلب كان مجانيًا.

عالج طلبًا مجمّعًا مختلطًا واحتفظ بمعرّفات الصفوف

يعالج GenderAPI.io V2 الطلبات المجمّعة المختلطة عبر POST https://api.genderapi.io/api/v2/gender/batch: حتى 50 عنصرًا مع مفتاح حساب، أو حتى 10 عناصر في التجربة حسب عنوان IP. تتطلب هذه الأمثلة مفتاح حساب. أعطِ كل عنصر قيمة id ثابتة وفريدة ووضع ذكاء اصطناعي محددًا صراحةً. يمكن أن يجمع الطلب المجمّع بين الأسماء وعناوين البريد الإلكتروني وأسماء المستخدمين، مع سياق country اختياري لكل عنصر.

اقرأ كل عنصر في data والملخص في meta.summary. قد تتضمن استجابة HTTP 200 أخطاء في بعض العناصر؛ وقد يعيد الطلب المجمّع الذي فشلت كل عناصره استجابة Problem على المستوى الأعلى تتضمن النتائج. تُحتسب النتائج غير المعروفة الناجحة ضمن succeeded. ويتيح لك index وid الأصليان ربط كل نتيجة بالصف المصدر الصحيح.

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

طلب مجمّع في Python
from genderapi_v2 import GenderAPIError, make_item, predict_batch

items = [
    make_item("name", "Alice", ai_mode="off", item_id="row-1"),
    make_item("email", "alex@example.com", ai_mode="off", item_id="row-2"),
    make_item("username", "sample_handle", ai_mode="off", item_id="row-3"),
]
try:
    response = predict_batch(items)
except GenderAPIError as error:
    # Retained error.response can include batch results and billing.
    print("Batch needs review:", error.request_id)
    raise SystemExit(1)
else:
    for item in response["data"]:
        if "error" in item:
            print(item["id"], "failed", item["error"]["code"])
        else:
            result = item["data"]
            print(item["id"], result["result_status"], result["gender"])
    print(response["meta"]["summary"])
    print(response["meta"]["usage"])
    if response["meta"]["summary"]["failed"]:
        raise SystemExit(2)

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

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

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

تتطلب وحدة Python المساعدة هذه تحديد ai_mode دائمًا. للسماح بتفسير الأسماء المستعارة، استخدم make_item('username', 'prenses', ai_mode='fallback', force_to_genderize=True). وتحوّل الوحدة force_to_genderize إلى حقل JSON المسمى forceToGenderize.

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

قرّر ما تفعله بعد الفشل

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

احفظ معرّف الطلب المُعاد وحالة الخصم مع سجل المهمة. يحتفظ كائن الخطأ بالاستجابة للفحص المضبوط، لكنه قد يتضمن المُدخل الأصلي؛ فلا تكتب الكائن كاملًا أو الاستجابة أو مفتاح API في السجلات الروتينية.

النتيجةالقرار في التطبيق
نتيجة غير معروفة ناجحةاحتفظ بقيمة null وreason وusage. هذه نتيجة مكتملة قابلة للخصم، وليست صفًّا فاشلًا تُعاد محاولته تلقائيًا.
خطأ تحقق 422صحّح المُدخل الذي تحدده حقول Problem Details قبل إرسال طلب جديد.
401 / 403راجع صلاحية الوصول إلى الحساب أو الأرصدة المتاحة. لن يحل الإرسال المتكرر للطلب نفسه المشكلة الأساسية.
429التزم بقيمة Retry-After إن وُجدت. تحقّق من الخطأ وحالة الخصم، ثم جدول محاولة لاحقة مدروسة.
خطأ في الشبكة أو انتهاء المهلة أو استجابة غير قابلة للقراءةسجّل أن النتيجة والخصم غير مؤكدين. سوِّ الوضع قبل إعادة الإرسال؛ فالعميل لا يستطيع إلغاء عمل أكمله الخادم.
billing_status: unconfirmedقد تكون charged_credits وremaining_credits قيمتها null. تواصل مع فريق الدعم مع request_id قبل إعادة المحاولة؛ ولا تستبدل null بصفر.
فشل بعض عناصر الطلب المجمّعاحفظ العناصر المكتملة أولًا. راجع العناصر الفاشلة وخصمها، وأعد إرسال حالات الفشل المؤهلة فقط، لا الطلب المجمّع كاملًا.

افهم سلوك النقل في هذا المثال

مهلة urllib البالغة 10 ثوانٍ تنطبق على عمليات المقبس الحاجبة، وليست حدًّا أقصى مضمونًا للمدة الكاملة للطلب. يعطّل المثال عمليات إعادة التوجيه في HTTP، ويحلّل استجابات JSON الناجحة، ويحتفظ باستجابات HTTP Problem. ولا يعيد المحاولة تلقائيًا أبدًا.

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

عروض Python التوضيحية الاختيارية
python3 genderapi_v2.py --demo single
# Run separately to submit another billable sample batch:
python3 genderapi_v2.py --demo batch

الأسئلة الشائعة

لماذا تطبع Python القيمة None بدل null؟

يحوّل محلّل JSON في Python القيمة null إلى None. احتفظ بهذه القيمة غير المعروفة كما هي، ولا تحوّلها إلى جنس افتراضي أو إلى درجة ثقة صفرية عند حفظ النتيجة أو تصديرها.

هل تستهلك النتيجة غير المعروفة أرصدة؟

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

هل يعيد هذا المثال محاولة الطلب الفاشل؟

لا. كل طلب جديد عملية مستقلة. افحص الخطأ ونتائج كل عنصر وحالة الخصم قبل أن تقرر إعادة الإرسال. ولا يثبت غياب الاستجابة أن المحاولة السابقة كانت مجانية.

هل أحتاج إلى تثبيت حزمة؟

لا. نزّل المثال مباشرة من دليل GenderAPI.io هذا. لا يعتمد عند التشغيل على أي حزمة خارجية، وليس SDK منشورًا بشكل منفصل. إذا كنت تفضّل حزمة تخضع للصيانة، فإن حزم SDK الرسمية من GenderAPI.io تستدعي واجهة V2 API نفسها: pip install genderapi للغة Python أو npm install genderapi للغة JavaScript. راجع المثال وعدّله بما يناسب تطبيقك؛ وتبقى وثائق GenderAPI.io V2 هي مرجع عقد API.

المصادر

تحدد وثائق API الطلب والاستجابة. وتشرح وثائق بيئة التشغيل أدوات HTTP المستخدمة.