48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
import requests
|
||
from pathlib import Path
|
||
from datetime import datetime
|
||
|
||
BASE_URL = "http://thinkcentre.local:8444"
|
||
|
||
def snapshot_all_hires(out_dir: str = "."):
|
||
out = Path(out_dir)
|
||
out.mkdir(exist_ok=True)
|
||
|
||
cameras = requests.get(f"{BASE_URL}/api/cameras", timeout=5).json()["cameras"]
|
||
|
||
results = {}
|
||
errors = {}
|
||
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||
|
||
for cam in cameras:
|
||
cam_id = cam["id"]
|
||
url = f"{BASE_URL}/api/snapshot/{cam_id}/hires"
|
||
|
||
try:
|
||
resp = requests.get(url, timeout=20)
|
||
if not resp.ok:
|
||
reason = resp.json().get("error", resp.text) if resp.content else resp.reason
|
||
print(f"{cam_id} ({cam['name']}): FEHLER {resp.status_code} – {reason}")
|
||
errors[cam_id] = reason
|
||
continue
|
||
|
||
filename = out / f"{ts}_{cam_id}_{cam['position']}.jpg"
|
||
filename.write_bytes(resp.content)
|
||
w = resp.headers.get("X-Frame-Width", "?")
|
||
print(f"{cam_id} ({cam['name']}): {len(resp.content)//1024} kB, {w}px → {filename.name}")
|
||
results[cam_id] = str(filename)
|
||
|
||
except requests.exceptions.Timeout:
|
||
print(f"{cam_id} ({cam['name']}): TIMEOUT (>20s)")
|
||
errors[cam_id] = "timeout"
|
||
except Exception as e:
|
||
print(f"{cam_id} ({cam['name']}): EXCEPTION – {e}")
|
||
errors[cam_id] = str(e)
|
||
|
||
return results, errors
|
||
|
||
if __name__ == "__main__":
|
||
files, errs = snapshot_all_hires("./files")
|
||
print("\nErfolg:", files)
|
||
if errs:
|
||
print("Fehler:", errs) |