Recopilación de episodios mediante API¶
Un sistema externo puede leer episodios mediante GET /watcher/client-api/v3/episodes y guardarlos. Solo devuelve episodios accesibles para el usuario. Se requieren los permisos correspondientes sobre el archivo de las cámaras.
El recopilador consulta Watcher con los filtros indicados y guarda los episodios. El ejemplo exporta una vez un intervalo fijo; las condiciones para recopilación continua se explican después.
Preparar el acceso¶
- Elija un usuario con acceso al archivo de las cámaras.
- Obtenga
access_tokeno clave personal según las instrucciones de autenticación. - Prepare dirección Watcher, nombre técnico de cámara y límites del intervalo en milisegundos Unix. Use los mismos valores en ambos ejemplos.
Leer episodios¶
curl --fail-with-body --get \
--header 'Authorization: Bearer <token>' \
--data-urlencode 'media=entrance-example' \
--data-urlencode 'opened_at_gte=1793692800000' \
--data-urlencode 'opened_at_lte=1793779200000' \
--data-urlencode 'limit=100' \
'https://watcher.example.com/watcher/client-api/v3/episodes'
Sustituya media por el nombre de cámara. El tiempo se expresa en milisegundos Unix. La respuesta contiene episodes y cursores. Envíe next como cursor hasta terminar.
Guardar como JSON Lines¶
El ejemplo exporta el intervalo a episodes.jsonl. Requiere Python 3 sin paquetes adicionales. Guárdelo como collect_episodes.py, sustituyendo base, media y los límites:
import json
import os
from urllib.parse import urlencode
from urllib.request import Request, urlopen
base = "https://watcher.example.com/watcher/client-api/v3"
params = {
"media": "entrance-example",
"opened_at_gte": 1793692800000,
"opened_at_lte": 1793779200000,
"limit": 100,
}
headers = {"Authorization": "Bearer " + os.environ["WATCHER_TOKEN"]}
with open("episodes.jsonl", "w", encoding="utf-8") as output:
while True:
req = Request(base + "/episodes?" + urlencode(params), headers=headers)
with urlopen(req, timeout=30) as response:
result = json.load(response)
for episode in result.get("episodes", []):
output.write(json.dumps(episode, ensure_ascii=False) + "\n")
cursor = result.get("next")
if not cursor:
break
params["cursor"] = cursor
Defina el token en el entorno y ejecute:
read -rs WATCHER_TOKEN
export WATCHER_TOKEN
python3 collect_episodes.py
unset WATCHER_TOKEN
Tras read, pegue el token y pulse Intro; la entrada queda oculta. Si termina correctamente, episodes.jsonl contiene un objeto JSON por línea. Compare cámara y tiempos con el intervalo; abra uno de los episodios en Watcher para comprobarlo.
- Archivo vacío tras una solicitud correcta — no se recibieron episodios accesibles del intervalo. Compruebe cámara, tiempo y permisos.
- HTTP 401 o 403 — compruebe token, sesión y permisos de archivo. Repita tras corregir el acceso.
- Error de conexión o tiempo de espera — compruebe dirección y conectividad desde el recopilador. Repita al restablecerla; un archivo de una ejecución interrumpida puede estar incompleto.
Para recopilación continua, persista el estado fuera del proceso y actualice por episode_id: un episodio puede recibirse otra vez con cambios. La integración determina intervalos y orden. Una exportación no garantiza entrega de todos los cambios posteriores.