#!/usr/bin/env python3
# Метрика: список счётчиков + цели + визиты за 7 дней
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())

# список счётчиков (management)
try:
    mgmt = api("https://api-metrika.yandex.net/management/v1/counters")
    counters = mgmt.get("counters", [])
    print("Счётчики Метрики:")
    for c in counters:
        print(f"  id={c['id']} {c.get('name')} | статус {c.get('status')} | сайт {c.get('site')}")
except urllib.error.HTTPError as e:
    print("Метрика management:", e.code, e.read().decode()[:200])
    counters = []

if counters:
    cid = counters[0]["id"]
    # цели
    try:
        goals = api(f"https://api-metrika.yandex.net/management/v1/counter/{cid}/goals")
        print("\nЦели счётчика:")
        for g in goals.get("goals", []):
            print(f"  id={g['id']} {g['name']} | {g.get('type')} | флаг конверсии: {g.get('is_retargeting')}")
    except urllib.error.HTTPError as e:
        print("Цели:", e.code, e.read().decode()[:150])

    # визиты и цели за 7 дней
    since = (datetime.now() - timedelta(days=7)).strftime("%Y-%m-%d")
    till = datetime.now().strftime("%Y-%m-%d")
    try:
        q = urllib.parse.urlencode({
            "id": cid, "date1": since, "date2": till,
            "metrics": "ym:s:visits,ym:s:users,ym:s:goal45673visits",
            "accuracy": "full",
        })
        data = api(f"https://api-metrika.yandex.net/management/v1/stat?{q}" if False else
                   f"https://api-metrika.yandex.net/stat/v1/data?{q}")
        print(f"\nСтатистика за {since}..{till}:")
        for row in data.get("data", []):
            print("  ", row.get("metrics"))
    except urllib.error.HTTPError as e:
        print("Статистика:", e.code, e.read().decode()[:200])
