Watch-IP

PythonでWatch-IPを使う

watch-ip-sdk(PyPI、v0.1.1)は、Python標準ライブラリのurllibを基盤とした依存関係のないクライアントでGET /v1/geoをラップします。IPルックアップはカバーしておらず、以下のバッチガイドではそのエンドポイントを直接呼び出しています。

インストール

Python 3.9以降が必要です。サードパーティの依存関係はありません—このパッケージは標準ライブラリのurllibを使用します。

pip

pip install watch-ip-sdk

クイックスタート

GET /v1/geoは訪問者自身のブラウザから呼び出されるように設計されています。Pythonから呼び出すということは、代わりに自分のサーバーから呼び出すことを意味するため、リクエストにはブラウザが自動的に送信するOriginヘッダーが含まれません—originを明示的に渡し、キーの許可オリジンのいずれかに設定してください。設定しない場合、APIはorigin_not_allowedで呼び出しを拒否します。

Python

from watch_ip import WatchIP

client = WatchIP("wip_pub_xxxxxxxx", origin="https://example.com")
geo = client.get_geo()

print(geo["country"], geo["city"], geo["timezone"])

エラー処理とタイムアウト

すべての失敗はstatusと安定したcodeを持つWatchIPErrorを送出します。get_geo()は秒単位のオプションのタイムアウトを受け取ります(デフォルトは10.0)。

Python

from watch_ip import WatchIP, WatchIPError

client = WatchIP("wip_pub_xxxxxxxx", origin="https://example.com")

try:
    geo = client.get_geo(timeout=5.0)
except WatchIPError as err:
    print(err.code, err.status, err)

IPルックアップとバッチルックアップ:直接HTTPを使う

このSDKにはGET /v1/lookup/{ip}やPOST /v1/lookup用のメソッドがありません—どちらも、このパッケージがラップする公開可能キーではなくシークレットキーで認証するサーバー間エンドポイントです。urllibで直接呼び出してください。Pythonバッチガイドでは、これを土台に完全なチャンク分割の例を構築しています。

Python

import json
import urllib.request

request = urllib.request.Request(
    "https://api.watch-ip.com/v1/lookup",
    data=json.dumps({"ips": ["203.0.113.1", "2001:db8::1"]}).encode(),
    headers={
        "Authorization": "Bearer YOUR_SECRET_KEY",
        "Content-Type": "application/json",
    },
)
with urllib.request.urlopen(request) as response:
    result = json.load(response)

関連ページ