b622f76a02
- 新增穿山甲 GroMore「聚合数据报告 API」对接,按天 T+1 拉取后台 revenue(预估)与 api_revenue(收益API,更接近结算),在广告收益报表大盘 + 按天趋势级展示,与客户端自报 eCPM 折算的预估并列对照;逐条广告事件行不动(仍是客户端预估)。 - 链路:integrations/pangle_report.py(MD5 签名,与官方文档两个测试向量逐字节一致)→ scripts/sync_pangle_revenue.py(拉昨天/--days 回补)→ 新表 ad_pangle_daily_revenue (repositories/ad_pangle_revenue.py:upsert + 按日聚合)→ admin/repositories/ad_revenue.py 汇总,新增 total_pangle_revenue_yuan / total_pangle_api_revenue_yuan / daily[].pangle_*。 - 穿山甲无用户/类型/场景维度:仅全量视图(未按 user/ad_type/feed_scene 过滤)给值,否则置 None;join key 用 ad_unit_id(=客户端配的 104xxx),非 code_id。 - 新增配置 PANGLE_REPORT_USER_ID/ROLE_ID/SECURITY_KEY(≠发奖 m-key)+ site_id→应用映射; 含单测(签名向量+分页解析);已真连穿山甲验证。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: zzhyyyyy <2685922758@qq.com> Reviewed-on: #92 Co-authored-by: zhuzihao <zhuzihao@wonderable.ai> Co-committed-by: zhuzihao <zhuzihao@wonderable.ai>
3.4 KiB
3.4 KiB
ad_pangle_daily_revenue — 穿山甲 GroMore 天级收益
模型:app/models/ad_pangle_revenue.py | 读写:app/repositories/ad_pangle_revenue.py | 拉取:app/integrations/pangle_report.py + scripts/sync_pangle_revenue.py
存放从穿山甲 GroMore 数据 API(聚合数据报告 API,天级、T+1)按天拉取的收益,供 admin 广告收益报表 的「穿山甲后台收益」做汇总/趋势级展示, 与客户端自报 eCPM 折算的预估互为对照(看 gap)。
粒度 = 日期 × 应用(app_env) × 代码位(our_code_id) × 广告源(adn)。穿山甲不提供分用户/设备维度
(官方明确),故本表无 user_id,也无法挂到逐条广告事件;报表逐条行仍用客户端预估。
数据流
- 写:
scripts/sync_pangle_revenue(线上每天 ~10:30 由 systemd timer 跑)调pangle_report.fetch_daily_report拉昨天(可--days N回补),维度date,site_id,ad_unit_id, 映射site_id→app_env、ad_unit_id→our_code_id后upsert_daily_rows落库。按唯一键幂等,T+1 订正可重跑。 ⚠️ 用ad_unit_id(广告位ID=104xxx)而非code_id:实测code_id返回底层各 ADN 代码位(如983674557),对不上我们的口径。 - 读:
ad_pangle_revenue.aggregate_by_date按日期汇总 → admin 报表total_pangle_revenue_yuan/total_pangle_api_revenue_yuan/daily[].pangle_*。
字段
| 列 | 类型 | 说明 |
|---|---|---|
id |
int PK | |
report_date |
str(10) idx | 北京时间 YYYY-MM-DD(拉取 time_zone=8),与 ad_ecpm_record.report_date 同口径可 join |
app_env |
str(16) | prod(傻瓜比价正式)/ test(测试);由 site_id 经 settings.pangle_report_site_id_to_env 映射;未映射记 site:<id> |
site_id |
str(32) | null | 原始 GroMore AppId(留痕) |
our_code_id |
str(64) idx | 广告位 ID(= 接口 ad_unit_id = 客户端配的 104xxx = ad_ecpm_record.our_code_id),join key。⚠️ 非 code_id(那是底层各 ADN 代码位,对不上);-1 为 GroMore 未归因桶 |
adn |
str(16) | 广告源(接口 network);当前默认口径不分广告源(按 ad_unit_id 汇总),统一 "" |
revenue_yuan |
float | 预估收益(元)← 接口 revenue(排序价×展示/1000,所有 ADN) |
api_revenue_yuan |
float | null | 收益Api(元)← 接口 api_revenue(各 ADN 经 Reporting 回传、更接近结算);未配 / 当天为 null |
ecpm |
str(32) | null | 预估 eCPM 原值(接口 ecpm,单位元/千次,与客户端 getEcpm 的「分」不同) |
impressions |
int | 展示次数 ← 接口 imp_cnt |
currency |
str(8) | 货币(接口 currency,正常 cny) |
synced_at |
datetime | 最近同步写入时间(可被回补覆盖) |
唯一约束 uq_ad_pangle_daily (report_date, app_env, our_code_id, adn);adn 用 "" 而非
NULL,避免 NULL 在唯一约束里互不相同导致 upsert 重复。
局限
- T+1:当天数据穿山甲不出
api_revenue,revenue也次日才稳;报表「今天」此两列多为空。 revenuevsapi_revenue:前者所有 ADN 都有(预估口径);后者需后台为该 ADN 配置 Reporting 才回传,部分 ADN 可能长期为空。结算仍以各 ADN 结算单 / 穿山甲后台为准。