116 lines
4.1 KiB
Python
116 lines
4.1 KiB
Python
"""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
|
||
)
|