Repository navigation
Expand file tree
/
Copy pathmain.py
More file actions
55 lines (39 loc) · 1.96 KB
/
Copy pathmain.py
File metadata and controls
55 lines (39 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"""Punto de entrada: genera reportes diarios de GA4 y los exporta a CSV.
Recorre un rango de fechas y, por cada día, ejecuta los reportes indicados en
REPORT_TYPES (resueltos por el Factory Method) y los guarda en `backup/`.
Requiere un `.env` con SERVICE_ACCOUNT_FILE y GA4_PROPERTY_ID (ver `.env.example`).
"""
import os
from datetime import datetime, timedelta
import pandas as pd
from src.domain.ga4_report_domain import GA4ReportFactory
from src.infraestructure.ga4_report_conection import GA4Connection
from src.usecase.ga4_report_generate_usecase import ExecuteGA4ReportUseCase
from src.view.ga4_report_controller import GA4Controller
START_DATE = "2023-07-01"
END_DATE = "2023-12-01"
BACKUP_FOLDER = "backup"
REPORT_TYPES = ["activeUserspPerDay"] # añade "users" o "page_views" según necesites
def save_report(controller: GA4Controller, report_type: str, date_str: str, folder: str) -> None:
report = GA4ReportFactory.create_report(report_type, date_str, date_str)
result = controller.query_report(report)
df = pd.DataFrame(result['rows'], columns=result['headers'])
out_dir = os.path.join(folder, report_type)
os.makedirs(out_dir, exist_ok=True)
out_path = os.path.join(out_dir, f'{report_type}_report_{date_str}.csv')
df.to_csv(out_path, index=False)
print(f"{report_type} {date_str} -> {out_path}")
def main() -> None:
start_date = datetime.strptime(START_DATE, "%Y-%m-%d")
end_date = datetime.strptime(END_DATE, "%Y-%m-%d")
os.makedirs(BACKUP_FOLDER, exist_ok=True)
controller = GA4Controller(ExecuteGA4ReportUseCase(GA4Connection()))
current_date = start_date
while current_date <= end_date:
date_str = current_date.strftime("%Y-%m-%d")
report_folder = os.path.join(BACKUP_FOLDER, f'report_{date_str}')
for report_type in REPORT_TYPES:
save_report(controller, report_type, date_str, report_folder)
current_date += timedelta(days=1)
if __name__ == '__main__':
main()