feat: add TaurusX CPM CPC and CPI

This commit is contained in:
王源
2026-10-15 17:53:45 +08:00
parent 01b4e3ddae
commit ecad390e63
3 changed files with 719 additions and 185 deletions
+22 -8
View File
@@ -91,6 +91,10 @@ def build_dataset(
for api_row in api_rows:
campaign_name = str(api_row.get("campaign_name") or "").strip()
country = str(api_row.get("country") or "").strip().upper()
impressions = int(float(api_row.get("impressions") or 0))
clicks = int(float(api_row.get("clicks") or 0))
conversions = int(float(api_row.get("conversions") or 0))
cost = round(float(api_row.get("cost") or 0), 4)
records.append(
{
"date": str(api_row.get("date") or ""),
@@ -98,14 +102,21 @@ def build_dataset(
"campaign_name": campaign_name,
"pkg": extract_pkg(campaign_name, country),
"country": country,
"impressions": int(float(api_row.get("impressions") or 0)),
"clicks": int(float(api_row.get("clicks") or 0)),
"conversions": int(float(api_row.get("conversions") or 0)),
"cost": round(float(api_row.get("cost") or 0), 4),
"impressions": impressions,
"clicks": clicks,
"conversions": conversions,
"cost": cost,
"cpm": round(cost / impressions * 1000, 6) if impressions else None,
"cpc": round(cost / clicks, 6) if clicks else None,
"cpi": round(cost / conversions, 6) if conversions else None,
}
)
records.sort(key=lambda row: (row["date"], row["cost"], row["clicks"]), reverse=True)
total_impressions = sum(row["impressions"] for row in records)
total_clicks = sum(row["clicks"] for row in records)
total_conversions = sum(row["conversions"] for row in records)
total_cost = round(sum(row["cost"] for row in records), 4)
fetched_at = datetime.now(timezone(timedelta(hours=8))).isoformat(timespec="seconds")
return {
"meta": {
@@ -119,10 +130,13 @@ def build_dataset(
"pkg_country_count": len({(row["pkg"].casefold(), row["country"]) for row in records if row["pkg"]}),
"countries": len({row["country"] for row in records if row["country"]}),
"unparsed_pkg_rows": sum(not row["pkg"] for row in records),
"impressions": sum(row["impressions"] for row in records),
"clicks": sum(row["clicks"] for row in records),
"conversions": sum(row["conversions"] for row in records),
"cost": round(sum(row["cost"] for row in records), 4),
"impressions": total_impressions,
"clicks": total_clicks,
"conversions": total_conversions,
"cost": total_cost,
"cpm": round(total_cost / total_impressions * 1000, 6) if total_impressions else None,
"cpc": round(total_cost / total_clicks, 6) if total_clicks else None,
"cpi": round(total_cost / total_conversions, 6) if total_conversions else None,
},
"records": records,
}