"""analytics - stateless API proxy for Google Analytics (GA4) and Sklik. Runs behind the AppFactory Caddy reverse proxy at /apps/. 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//... . 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 )