পাইথন এসডিকে — হোয়াটসঅ্যাপ-ডেটা-এসডিকে

হোয়াটসঅ্যাপ ডেটা এপিআই-এর অফিসিয়াল পাইথন ক্লায়েন্ট। টাইপ করা প্রতিক্রিয়া, একটিমাত্র নির্ভরতা (অনুরোধ), ক্যাশে-ফার্স্ট লুকআপ এবং একটি পরিচ্ছন্ন এক্সেপশন হায়ারার্কি।

১টি নির্ভরতা
টাইপ করা (py.typed)
এনপিএম এসডিকে পোর্ট
PyPIGitHub

ইনস্টল করুন

pip install whatsapp-data-sdk

পাইথন ৩.৮-৩.১৩ সমর্থিত। সম্পূর্ণ টাইপ-চেকার সমর্থনের (mypy, pyright) জন্য এতে একটি py.typed মার্কার অন্তর্ভুক্ত রয়েছে।

দ্রুত শুরু

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) থাকে।
শূন্য মিল সহ অনুসন্ধান একটি খালি পৃষ্ঠা ফেরত দেয় (success=False, data['docs'] == [])।
হোয়াটসঅ্যাপ নয় এমন নম্বরের জন্য `get_device_count` ব্যবহার করলে `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 ছাড়া)।
AuthError৪০১ / ৪০৩ — অনুপস্থিত/অবৈধ/অননুমোদিত কী।
RateLimitError429 — যখন সার্ভার Retry-After পাঠায়, তখন এটি .retry_after_ms বহন করে।
HttpError2xx ছাড়া অন্য যেকোনো ফ্রিকোয়েন্সি (যেমন 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 (179 পর্যালোচনা)