Python SDK — whatsapp-data-sdk

WhatsApp Veri API'si için resmi Python istemcisi. Türlü yanıtlar, tek bağımlılık (istekler), önbelleğe öncelikli aramalar ve temiz bir istisna hiyerarşisi.

1 bağımlılık
Türlü (py.typed)
npm SDK portu
PyPIGitHub

Düzenlemek

pip install whatsapp-data-sdk

Python 3.8-3.13 sürümleri desteklenmektedir. Tam tür denetleyici desteği (mypy, pyright) için py.typed işaretçisi ile birlikte gelir.

Hızlı başlangıç

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

Kimlik doğrulama ve taşıma

Anahtarınız her zaman x-rapidapi-key ile gönderilir. İsteklerin nereye gönderileceğini transport yöntemiyle seçin.

transportCanlı sunucuÖnbellek / Yalnızca veritabanı sunucusu
"proxy" (varsayılan)whatsapp-proxy.checkleaked.cc/number_cache aynı sunucuda
"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 aracılığıyla URL'leri/ana bilgisayarları geçersiz kılın.

Önbelleğe öncelikli aramalar (para tasarrufu sağlar)

`check_cached()` fonksiyonu önce ucuz önbellek/yalnızca veritabanı uç noktasını okur ve yalnızca gerçek bir önbellek hatası durumunda ücretli canlı önbelleğe geri döner.

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'ta olmayan, önbelleğe alınmış yetkili bir kayıt isabet olarak sayılır (gereksiz canlı yeniden kontrol yok); yalnızca gerçek bir "VERİTABANI DIŞINDA" hatası canlıya geçer.

API referansı

Her yöntem, bir pazar yeri uç noktasına birebir eşlenir - npm SDK'sı ile aynı kapsama alanı, snake_case isimlendirme.

# 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

"Bulunamadı" hatası çözülür, yeni bir hata oluşmaz.

WhatsApp'ta olmayan bir numara normal bir sonuçtur, bu nedenle bunlar çözülür (asla sorun yaratmaz):

get_profile / get_profile_no_picture / check_cached fonksiyonları exists=False (ve code=NUMBER_NOT_FOUND) değerine sahip bir sözlük döndürür.
Sıfır eşleşmeyle yapılan arama boş bir sayfa döndürüyor (success=False, data['docs'] == []).
WhatsApp dışı bir numara için get_device_count fonksiyonu success=False değerini döndürüyor.
p = client.get_profile("14155552671")
if not p.get("exists"):
    print("not on WhatsApp")

Şunlar hata verir: geçersiz numara (400), kimlik doğrulama (401/403), hız sınırlaması (429), zaman aşımı, ağ, 5xx.

Talep üzerine seçenekler

Her yöntem zaman aşımı (saniye) ve yeniden deneme seçeneklerini kabul eder:

client.get_profile("59898297150", timeout=5, retries=0)

Hatalar

Tüm hatalar WhatsAppDataError sınıfının bir alt sınıfından hata verir.

SınıfNe zaman
ValidationErrorGeçersiz argümanlar (herhangi bir istekten önce ortaya atılan; .status değeri olmayan argümanlar).
AuthError401 / 403 — eksik/geçersiz/abonelikten çıkarılmış anahtar.
RateLimitError429 — sunucu Retry-After gönderdiğinde .retry_after_ms değerini taşır.
HttpError2xx dışındaki diğer tüm kodlar (örneğin 400, 5xx); .status ve .body özelliklerine sahiptir.
TimeoutErrorİstek zaman aşımını aştı.
NetworkErrorUlaşım hatası.
WhatsAppDataErrorTemel sınıf.
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)

Çifte kota kullanımını önlemek için POST istekleri (bulk_check, bulk_check_db_*) otomatik olarak yeniden denenmez.

Telefon numarası formatları

Herhangi bir format işe yarar — SDK normalleştirir; yardımcı fonksiyonlar dışa aktarılır:

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)

İlgili

Kullanıcılarımız Ne Diyor

Memnun müşterilerimizden gerçek yorumlar

4.5/5 (176 yorumlar)