Files
analytics/app/main.py
T
JiriUhlir 9cd5c8011b navod
2026-06-18 12:26:15 +02:00

116 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""analytics - stateless API proxy for Google Analytics (GA4) and Sklik.
Runs behind the AppFactory Caddy reverse proxy at /apps/<app-id>. ROOT_PATH is
injected as an env var; FastAPI's ``root_path`` makes Swagger UI and the OpenAPI
``servers`` use the proxy prefix so "Try it out" hits /apps/<app-id>/... .
The service stores no secrets. Every credential is supplied per request in an
X- header and used only to talk to the upstream API (see AGENTS.md and
``app.credentials``).
"""
import os
from fastapi import FastAPI
from . import config
from .errors import register_exception_handlers
from .logging_config import get_logger
from .routers import ga_admin, ga_data, meta, sklik
logger = get_logger(__name__)
ROOT_PATH = os.getenv("ROOT_PATH", "")
DESCRIPTION = """
Stateless proxy exposing **Google Analytics 4** and **Sklik** (Seznam) APIs.
Veškeré přihlašovací údaje se posílají v každém requestu jako `X-` hlavičky
služba si nic neukládá. Vyplníte je v Swaggeru po kliknutí na **Try it out**.
| Služba | Hlavička | Povinné |
| --- | --- | --- |
| Google Analytics | `X-GA-Access-Token` **nebo** `X-GA-Credentials` | jedna z nich |
| Google Analytics | `X-GA-Quota-Project` | ne |
| Sklik | `X-Sklik-Token` | ano |
| Sklik | `X-Sklik-User-Id` | ne (jen pro agenturní/MCC přístup) |
---
## Kde vzít přihlašovací údaje
### 🔹 Google Analytics 4
Potřebujete dvě věci: **přístup k API** a **ID property** (číslo, na které se
ptáte).
**ID property** (`property_id` v URL): v GA4 vpravo dole **Administrace →
Nastavení property** nahoře je *ID property*, např. `123456789`.
Pro přístup máte dvě možnosti (stačí jedna):
**A) Service account doporučeno pro automatizaci (`X-GA-Credentials`)**
1. [Google Cloud Console](https://console.cloud.google.com/) → vytvořte nebo
vyberte projekt.
2. **APIs & Services → Library** → povolte **Google Analytics Data API**
a **Google Analytics Admin API**.
3. **IAM & Admin → Service Accounts → Create service account**.
4. U vytvořeného účtu **Keys → Add key → Create new key → JSON** stáhne se
soubor s klíčem.
5. Z JSON souboru zkopírujte `client_email` a v GA4 ho přidejte k property:
**Administrace → Správa přístupu k property → +** , role **Viewer**
(Čtenář).
6. Celý JSON soubor zakódujte do **base64** a vložte do hlavičky
`X-GA-Credentials`:
- Windows PowerShell:
`[Convert]::ToBase64String([IO.File]::ReadAllBytes("klic.json"))`
- Linux/macOS: `base64 -w0 klic.json`
**B) Hotový OAuth2 token pro rychlý test (`X-GA-Access-Token`)**
1. [OAuth 2.0 Playground](https://developers.google.com/oauthplayground/).
2. Vlevo zadejte scope `https://www.googleapis.com/auth/analytics.readonly`
a klikněte **Authorize APIs** (přihlaste se Google účtem, který má přístup
k property).
3. **Exchange authorization code for tokens** → zkopírujte *Access token* do
hlavičky `X-GA-Access-Token`. Pozor: platí jen ~1 hodinu.
### 🔹 Sklik
Potřebujete **API token (klíč)** z účtu, jehož data chcete číst.
1. Přihlaste se na [sklik.cz](https://www.sklik.cz/).
2. Vpravo nahoře klikněte na **své uživatelské jméno → Nastavení**.
3. V nastavení účtu otevřete sekci **Přístup k API Drak**.
4. Klikněte na **Zobrazit token** a token zkopírujte do hlavičky
`X-Sklik-Token`.
> ⚠️ Každé vygenerování nového tokenu **zneplatní ten předchozí**. Token je
> vázaný na účet, pod kterým jste přihlášeni.
>
> Spravujete-li cizí účty (agentura/MCC), vložte cílové `userId` do hlavičky
> `X-Sklik-User-Id`.
---
Podrobnosti k jednotlivým endpointům jsou v `documentation/` v repozitáři.
""".strip()
app = FastAPI(
title=config.APP_NAME,
version=config.APP_VERSION,
description=DESCRIPTION,
root_path=ROOT_PATH,
)
register_exception_handlers(app)
app.include_router(meta.router)
app.include_router(ga_data.router)
app.include_router(ga_admin.router)
app.include_router(sklik.router)
logger.info(
"analytics started (version=%s, root_path=%r)", config.APP_VERSION, ROOT_PATH
)