পাইথন এসডিকে — হোয়াটসঅ্যাপ-ডেটা-এসডিকে
হোয়াটসঅ্যাপ ডেটা এপিআই-এর অফিসিয়াল পাইথন ক্লায়েন্ট। টাইপ করা প্রতিক্রিয়া, একটিমাত্র নির্ভরতা (অনুরোধ), ক্যাশে-ফার্স্ট লুকআপ এবং একটি পরিচ্ছন্ন এক্সেপশন হায়ারার্কি।
ইনস্টল করুন
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.com | wp-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"খুঁজে পাওয়া যায়নি" সমাধান করে — এটি কোনো ত্রুটি তৈরি করে না।
হোয়াটসঅ্যাপে নেই এমন নম্বর একটি স্বাভাবিক ফলাফল, তাই এগুলি সমাধান হয়ে যায় (কখনও বাড়ে না):
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 | 429 — যখন সার্ভার 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)সম্পর্কিত
আমাদের ব্যবহারকারীরা যা বলেন
আমাদের সন্তুষ্ট গ্রাহকদের কাছ থেকে আসল পর্যালোচনা