کیت توسعه نرمافزار پایتون — whatsapp-data-sdk
کلاینت رسمی پایتون برای API داده واتساپ. پاسخهای تایپشده، یک وابستگی (درخواست)، جستجوهای مبتنی بر حافظه پنهان و یک سلسله مراتب استثنای تمیز.
نصب
pip install whatsapp-data-sdk
پشتیبانی از پایتون ۳.۸-۳.۱۳. به همراه نشانگر 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یک رکورد معتبر ذخیره شده در حافظه نهان واتساپ به عنوان یک رکورد موفق (بدون بررسی مجدد و بیفایده) در نظر گرفته میشود؛ فقط یک خطای واقعی NOT_IN_DATABASE از آن عبور میکند.
مرجع API
هر متد به صورت ۱:۱ به یک نقطه پایانی بازار نگاشت میشود - همان پوششی که npm SDK دارد، نامگذاری 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 | ۴۰۱ / ۴۰۳ — کلید موجود نیست/نامعتبر است/اشتراکگذاری لغو شده است. |
RateLimitError | ۴۲۹ - هنگامی که سرور Retry-After را ارسال کرد، حاوی .retry_after_ms است. |
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)مرتبط
آنچه کاربران ما میگویند
نظرات واقعی از مشتریان راضی ما