ערכת פיתוח תוכנה לפייתון — whatsapp-data-sdk

לקוח רשמי של Python עבור WhatsApp Data API. תגובות מודפסות, תלות אחת (בקשות), חיפושים תחילה במטמון, והיררכיית חריגים נקייה.

תלות אחת
מודפס (py.typed)
יציאת SDK של npm
PyPIGitHub

לְהַתְקִין

pip install whatsapp-data-sdk

נתמך בפייתון 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.comwp-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() קוראת תחילה את נקודת הקצה הזולה של המטמון / DB-only וחוזרת לבדיקה חיה בתשלום רק במקרה של החמצה אמיתית.

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 נחשבת כפגיעה (אין בדיקה חוזרת בזבזנית של "לא ב-WhatsApp"); רק החמצה אמיתית של "לא ב-DATABASE" נופלת ל-"חיה".

הפניה ל-API

כל שיטה ממפה 1:1 לנקודת קצה בשוק - אותו כיסוי כמו ערכת ה-SDK של npm, ‏naming של 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

"לא נמצא" פותר - זה לא מעלה

מספר שלא נמצא בוואטסאפ הוא תוצאה נורמלית, לכן אלה נפתרים (לעולם לא עולים):

הפונקציה get_profile / get_profile_no_picture / check_cached מחזירה dict עם הפקודה exists=False (והקוד=NUMBER_NOT_FOUND).
חיפוש ללא התאמות מחזיר דף ריק (success=False, data['docs'] == []).
get_device_count עבור מספר שאינו של WhatsApp מחזירה success=False.
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).
AuthError401 / 403 - מפתח חסר/לא חוקי/לא רשום.
RateLimitError429 - נושא .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)

‏POSTs ‏(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)

קָשׁוּר

מה אומרים המשתמשים שלנו

ביקורות אמיתיות מלקוחות מרוצים שלנו

4.5/5 (176 ביקורות)