Usa Watch-IP con Python
watch-ip-sdk (PyPI, v0.1.1) envuelve GET /v1/geo en un cliente sin dependencias construido sobre urllib de la biblioteca estándar de Python. No cubre IP lookup: la guía de lotes de abajo llama a ese endpoint directamente en su lugar.
Instalación
Requiere Python 3.9 o superior. Sin dependencias de terceros: el paquete usa urllib de la biblioteca estándar.
pip
pip install watch-ip-sdkInicio rápido
GET /v1/geo está diseñado para llamarse desde el propio navegador de un visitante. Llamarlo desde Python significa llamarlo desde tu propio servidor en su lugar, así que la solicitud no llevará el encabezado Origin que un navegador envía automáticamente: pasa origin explícitamente, configurado con uno de los orígenes permitidos de la clave, o la API rechaza la llamada con 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"])Manejo de errores y tiempos de espera
Cada falla lanza un WatchIPError con un status y un code estable. get_geo() acepta un timeout opcional en segundos (por defecto 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 lookup y lookup en lote: usa HTTP directo
Este SDK no tiene ningún método para GET /v1/lookup/{ip} ni POST /v1/lookup: ambos son endpoints de servidor a servidor autenticados con una clave secreta en lugar de la clave publicable que envuelve este paquete. Llámalos directamente con urllib; la guía de lotes en Python construye un ejemplo completo fragmentado sobre esta base.
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)Páginas relacionadas
- Guía de lotes en PythonEnriquece una lista de IP en lotes de 100.
- Referencia de GET /v1/lookup/:ipReferencia completa de campos para el endpoint de lookup de IP arbitraria.
- Referencia de POST /v1/lookupReferencia completa de campos para el endpoint de lookup de IP en lote.
- AutenticaciónClaves publicables vs. secretas, restricción por origen y límites de tasa.