#!/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())

CID = 91656034
since = (datetime.now() - timedelta(days=7)).strftime("%Y-%m-%d")
till = datetime.now().strftime("%Y-%m-%d")
print(f"Период: {since} .. {till}")

# 1. Визиты/пользователи
try:
    q = urllib.parse.urlencode({
        "id": CID, "date1": since, "date2": till,
        "metrics": "ym:s:visits,ym:s:users,ym:s:bounces,ym:s:pageDepth,ym:s:avgVisitDurationSeconds",
        "accuracy": "full",
    })
    data = api(f"https://api-metrika.yandex.net/stat/v1/data?{q}")
    print("\nВизиты:", data.get("totals"))
    print("По дням:", data.get("data"))
except urllib.error.HTTPError as e:
    print("stat:", e.code, e.read().decode()[:300])

# 2. Цели
try:
    q = urllib.parse.urlencode({
        "id": CID, "date1": since, "date2": till,
        "metrics": "ym:s:goalvisits,ym:s:goalusers",
        "dimensions": "ym:s:goal",
        "accuracy": "full", "limit": 30,
    })
    data = api(f"https://api-metrika.yandex.net/stat/v1/data?{q}")
    print("\nЦели:")
    for row in data.get("data", []):
        dims = [d["name"] for d in row.get("dimensions", [])]
        print("  ", dims, row.get("metrics"))
    print("Итого по целям:", data.get("totals"))
except urllib.error.HTTPError as e:
    print("goals:", e.code, e.read().decode()[:300])

# 3. Источники (откуда трафик)
try:
    q = urllib.parse.urlencode({
        "id": CID, "date1": since, "date2": till,
        "metrics": "ym:s:visits",
        "dimensions": "ym:s:lastTrafficSource",
        "accuracy": "full",
    })
    data = api(f"https://api-metrika.yandex.net/stat/v1/data?{q}")
    print("\nИсточники:")
    for row in data.get("data", []):
        print("  ", [d["name"] for d in row.get("dimensions", [])], row.get("metrics"))
except urllib.error.HTTPError as e:
    print("sources:", e.code, e.read().decode()[:200])
