مجموعة أدوات تطوير البرمجيات (SDK) الخاصة بلغة بايثون — مجموعة أدوات تطوير البرمجيات الخاصة ببيانات واتساب
عميل بايثون الرسمي لواجهة برمجة تطبيقات بيانات واتساب. استجابات مكتوبة، تبعية واحدة (طلبات)، عمليات بحث تعتمد على ذاكرة التخزين المؤقت أولاً، وهيكل استثناءات واضح.
ثَبَّتَ
pip install whatsapp-data-sdk
يدعم Python 3.8-3.13. يأتي مع علامة py.typed لدعم كامل لمدقق الأنواع (mypy، pyright).
بدء سريع
from whatsapp_data_sdk import WhatsAppDataClient
client = WhatsAppDataClient(api_key="YOUR_KEY") # sent as x-rapidapi-key
profile = client.get_profile("59898297150")
print(profile.get("exists"), profile.get("about"), profile.get("profilePic"))المصادقة والنقل
يتم إرسال مفتاحك دائمًا باستخدام x-rapidapi-key. اختر وجهة الطلبات باستخدام بروتوكول النقل.
| transport | مقدم برامج مباشر | مضيف ذاكرة التخزين المؤقت / قاعدة البيانات فقط |
|---|---|---|
"proxy" (تقصير) | whatsapp-proxy.checkleaked.cc | /number_cache على نفس المضيف |
"rapidapi" | wp-data.p.rapidapi.com | wp-data-db-only.p.rapidapi.com |
client = WhatsAppDataClient(api_key="RAPIDAPI_KEY", transport="rapidapi")
تجاوز عناوين URL/المضيفين عبر base_url و cache_base_url و rapidapi_host و rapidapi_cache_host.
عمليات البحث التي تبدأ من ذاكرة التخزين المؤقت (توفير المال)
تقوم الدالة check_cached() بقراءة نقطة النهاية الخاصة بذاكرة التخزين المؤقت الرخيصة / قاعدة البيانات فقط أولاً، ولا تلجأ إلى فحص مباشر مدفوع إلا في حالة عدم وجود بيانات حقيقية.
r1 = client.check_cached("59898297150") # cacheFirst (default)
print(r1["_source"]) # "cache" | "live"
r2 = client.check_cached("59898297150", mode="cacheOnly") # never a live call
r3 = client.check_cached("59898297150", mode="live") # always freshيُعتبر السجل الموثوق المخزن مؤقتًا وغير الموجود على WhatsApp بمثابة نتيجة (لا توجد إعادة فحص مباشرة غير ضرورية)؛ فقط الخطأ الحقيقي NOT_IN_DATABASE هو الذي يظهر في النظام المباشر.
مرجع واجهة برمجة التطبيقات
كل طريقة تُطابق نقطة نهاية السوق بنسبة 1:1 - نفس التغطية التي توفرها حزمة تطوير البرامج npm، وتسمية snake_case.
# Profile & pictures
client.get_profile(number, telegram=True, include_carrier=True) # Get Profile Information
client.get_profile_no_picture(number) # (No profile pic)
pic = client.get_last_picture(number) # JPEG bytes -> pic.content, pic.to_data_uri()
client.get_device_count(number) # Device count
client.get_osint_info(number) # OSINT Info
# Breaches
client.get_phone_breaches(number, limit=50) # built-in (no external key)
client.get_phone_breaches_external(number, api_key="...") # your checkleaked.cc key
# Search & database
client.search(country_code="UY", is_business=True, limit=20) # Search
client.search_google_maps(latitude=-34.9, longitude=-56.16, radius=2000) # Search in Google Maps
client.get_leaked_numbers_info() # Leaked Numbers (500M) -> Drive link (MEGA tier)
client.download_entire_database() # Download the Entire DB -> Drive link (MEGA tier)
# Bulk
client.bulk_check(numbers) # live (max 50)
client.bulk_check_db_basic(numbers) # DB basic (max 1000)
client.bulk_check_db_full(numbers) # DB full (max 1000)
# Telegram / carrier
client.get_telegram_profile("59898297150") # experimental
client.get_telegram_profile(["num1", "num2"])
client.carrier_lookup(number) # Carrier Lookup
client.carrier_lookup_alt(number, page=2) # Carrier Lookup Alternativeيتم حل مشكلة "غير موجود" - ولا يتم طرحها.
يُعدّ عدم وجود رقم على واتساب نتيجة طبيعية، لذا يتم حلّ هذه المشكلة (ولا تظهر أبدًا):
p = client.get_profile("14155552671")
if not p.get("exists"):
print("not on WhatsApp")ما الذي يثيره: رقم غير صالح (400)، مصادقة (401/403)، حد المعدل (429)، مهلة، شبكة، 5xx.
خيارات لكل طلب
تقبل كل طريقة مهلة زمنية (بالثواني) ومحاولات إعادة:
client.get_profile("59898297150", timeout=5, retries=0)أخطاء
جميع حالات الفشل تؤدي إلى ظهور فئة فرعية من خطأ بيانات واتساب (WhatsAppDataError).
| فصل | متى |
|---|---|
ValidationError | حجج غير صحيحة (تم طرحها قبل أي طلب؛ لا يوجد .status). |
AuthError | 401 / 403 — مفتاح مفقود/غير صالح/غير مشترك فيه. |
RateLimitError | 429 — يحمل .retry_after_ms عندما أرسل الخادم Retry-After. |
HttpError | أي رمز آخر غير 2xx (مثل 400، 5xx)؛ يحتوي على .status، .body. |
TimeoutError | تجاوز الطلب المهلة الزمنية المحددة. |
NetworkError | فشل النقل. |
WhatsAppDataError | الفئة الأساسية. |
from whatsapp_data_sdk import AuthError, RateLimitError, WhatsAppDataError
try:
client.get_profile("59898297150")
except AuthError:
... # 401/403
except RateLimitError as e:
print(e.retry_after_ms)
except WhatsAppDataError as e:
print(e.status, e.body)لا تتم إعادة محاولة عمليات POST (bulk_check, bulk_check_db_*) تلقائيًا، لتجنب الإنفاق المزدوج للحصة.
تنسيقات أرقام الهواتف
أي تنسيق يعمل — يقوم SDK بتوحيد التنسيق؛ ويتم تصدير الأدوات المساعدة:
from whatsapp_data_sdk import to_digits, to_e164
to_digits("+598 98 297 150") # "59898297150" (path & live endpoints)
to_e164("59898297150") # "+59898297150" (bulk-DB endpoints require it)متعلق ب
ما يقوله مستخدمونا
تقييمات حقيقية من عملائنا الراضين