Python SDK — whatsapp-data-sdk

WhatsAppデータAPI用の公式Pythonクライアント。型付きレスポンス、依存関係は1つ(リクエストのみ)、キャッシュ優先のルックアップ、そしてクリーンな例外階層を備えています。

1つの依存関係
型付き (py.typed)
npm SDK ポート
PyPIGitHub

インストール

pip install whatsapp-data-sdk

Python 3.8~3.13に対応。完全な型チェッカー(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() は、まず安価なキャッシュ/DB専用エンドポイントを読み込み、真のミスがあった場合にのみ有料のライブチェックにフォールバックします。

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に存在しない、信頼できるキャッシュされたレコードはヒットとしてカウントされます(無駄なライブでの再チェックは行われません)。真のNOT_IN_DATABASEミスのみがライブに反映されます。

APIリファレンス

すべてのメソッドはマーケットプレイスのエンドポイントに1対1で対応しており、npm SDKと同じ範囲をカバーし、スネークケースの命名規則を採用しています。

# 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 は exists=False (および code=NUMBER_NOT_FOUND) の辞書を返します。
検索結果がゼロの場合、空のページが返されます (success=False、data['docs'] == [])。
WhatsApp以外の番号に対して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なし)。
AuthError401 / 403 — キーが不足している、無効である、または登録されていない。
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 (176 レビュー)