SDK Python — whatsapp-data-sdk

ไคลเอ็นต์ Python อย่างเป็นทางการสำหรับ WhatsApp Data API การตอบสนองแบบกำหนดประเภทข้อมูล การพึ่งพาเพียงหนึ่งเดียว (requests) การค้นหาแบบแคชก่อน และลำดับชั้นของข้อยกเว้นที่ชัดเจน

1 การพึ่งพา
พิมพ์ (py.typed)
พอร์ต npm SDK
PyPIGitHub

ติดตั้ง

pip install whatsapp-data-sdk

รองรับ Python เวอร์ชัน 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)

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/host ผ่านทาง base_url, cache_base_url, rapidapi_host และ rapidapi_cache_host ได้

การค้นหาแบบแคชก่อน (ประหยัดค่าใช้จ่าย)

ฟังก์ชัน 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

ข้อมูลที่แคชไว้ซึ่งระบุว่าไม่มีอยู่ใน WhatsApp จะนับเป็นข้อมูลที่ตรงกัน (ไม่ต้องตรวจสอบซ้ำโดยไม่จำเป็น) มีเพียงข้อมูลที่ไม่พบในฐานข้อมูลเท่านั้นที่จะถูกบันทึกในระบบจริง

เอกสารอ้างอิง API

ทุกเมธอดจะแมปแบบ 1:1 กับเอนด์พอยต์ของตลาดกลาง - ครอบคลุมการใช้งานเช่นเดียวกับ npm SDK และใช้การตั้งชื่อแบบ 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

ข้อความ "ไม่พบ" จะได้รับการแก้ไข — ไม่แสดงข้อผิดพลาด

หมายเลขที่ไม่ปรากฏใน WhatsApp เป็นเรื่องปกติ ดังนั้นปัญหาเหล่านี้จะได้รับการแก้ไข (จะไม่ก่อให้เกิดปัญหาเพิ่มเติม):

get_profile / get_profile_no_picture / check_cached จะส่งคืนค่า dict ที่มี exists=False (และ code=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ข้อโต้แย้งที่ไม่ดี (เกิดขึ้นก่อนการร้องขอใดๆ; ไม่มีสถานะ)
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)

คำขอ 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 รีวิว)