#!/usr/bin/env python3
import json, urllib.request, urllib.parse
from datetime import datetime, timedelta

token = None
for line in open("/root/site/yandex/.env", encoding="utf-8"):
    if line.startswith("YANDEX_ACCESS_TOKEN="):
        token = line.split("=", 1)[1].strip()
H = {"Authorization": f"OAuth {token}"}

def api(url):
    req = urllib.request.Request(url, headers=H)
    return json.loads(urllib.request.urlopen(req, timeout=60).read())

# 1. Метрика: счётчики через stat-эндпоинт с id=... — попробуем получить список из cookies сессии
# Проще: попробуем узнать counter id из HTML сайта (метрика подключена?)
import re, urllib.request as u
UA = {"User-Agent": "Mozilla/5.0"}
t = u.urlopen(u.Request("https://dobrotniy-dom.ru/", headers=UA), timeout=60).read().decode("utf-8", errors="replace")
ids = set(re.findall(r'mc\.yandex\.(?:ru|com)/metrika/tag\.js[^"]*|ym\((\d+)|\{window\.yaCounter(\d+)|counterId\s*[:=]\s*"?(\d+)', t))
flat = set()
for grp in ids:
    for g in (grp if isinstance(grp, tuple) else (grp,)):
        if g and g.isdigit():
            flat.add(g)
print("Счётчики Метрики на сайте:", flat if flat else "не найдены в HTML")

# 2. Директ: список кампаний
try:
    q = urllib.parse.urlencode({"page": 1, "per_page": 50})
    data = api(f"https://api.direct.yandex.com/json/v5/campaigns?{q}")
    print("\nДирект:", json.dumps(data, ensure_ascii=False)[:300])
except urllib.error.HTTPError as e:
    print("\nДирект:", e.code, e.read().decode()[:200])

# 3. Проверим оба эндпоинта метрики на токен
for url in ["https://api-metrika.yandex.net/management/v1/counters?per_page=100",
            "https://api-metrika.yandex.net/management/v1/counters?per_page=100&status=Active"]:
    try:
        d = api(url)
        print("\n", url[:60], "->", json.dumps(d, ensure_ascii=False)[:400])
    except urllib.error.HTTPError as e:
        print("\n", url[:60], "->", e.code, e.read().decode()[:150])
