पायथन एसडीके — व्हाट्सएप-डेटा-एसडीके

WhatsApp डेटा API के लिए आधिकारिक Python क्लाइंट। टाइप किए गए रिस्पॉन्स, एक ही डिपेंडेंसी (रिक्वेस्ट), कैश-फर्स्ट लुकअप और एक साफ-सुथरा एक्सेप्शन हायरार्की।

1 निर्भरता
टाइप किया गया (py.typed)
एनपीएम एसडीके पोर्ट
PyPIGitHub

स्थापित करना

pip install whatsapp-data-sdk

पाइथन 3.8-3.13 समर्थित है। पूर्ण टाइप-चेकर समर्थन के लिए py.typed मार्कर के साथ आता है (mypy, कॉपीराइट)।

त्वरित शुरुआत

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")

base_url, cache_base_url, rapidapi_host, rapidapi_cache_host के माध्यम से URL/होस्ट को ओवरराइड करें।

कैश-फर्स्ट लुकअप (पैसे बचाएं)

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 चूक ही लाइव में दिखाई देती है।

एपीआई संदर्भ

प्रत्येक विधि सीधे मार्केटप्लेस एंडपॉइंट से मैप होती है - एनपीएम एसडीके के समान कवरेज, स्नेक केस नामकरण के साथ।

# 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 एक डिक्ट लौटाता है जिसमें exists=False (और code=NUMBER_NOT_FOUND) होता है।
शून्य मिलान के साथ खोज एक खाली पृष्ठ लौटाती है (सफलता = गलत, डेटा['दस्तावेज़'] == [])।
किसी गैर-व्हाट्सएप नंबर के लिए get_device_count कमांड सफलता=गलत लौटाता है।
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 भेजे जाने पर .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)

संबंधित

हमारे उपयोगकर्ता क्या कहते हैं

हमारे संतुष्ट ग्राहकों की वास्तविक समीक्षाएं

4.5/5 (176 समीक्षाएं)