| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- """Account-level bidding and placement config parsed from Feishu/DB."""
- from __future__ import annotations
- from dataclasses import dataclass
- BID_MODE_AVERAGE_COST = "average_cost"
- BID_MODE_MAX_CONVERSION = "max_conversion"
- @dataclass(frozen=True)
- class PlacementConfig:
- automatic_site_enabled: bool
- site_set: list[str]
- _BID_SCENE_VALUES = {
- "": BID_MODE_AVERAGE_COST,
- "平均成本": BID_MODE_AVERAGE_COST,
- "稳定成本": BID_MODE_AVERAGE_COST,
- "最大转化量": BID_MODE_MAX_CONVERSION,
- "最大转化量出价": BID_MODE_MAX_CONVERSION,
- "average_cost": BID_MODE_AVERAGE_COST,
- "max_conversion": BID_MODE_MAX_CONVERSION,
- # 兼容已经同步过的旧值。
- "BID_SCENE_NORMAL_AVERAGE": BID_MODE_AVERAGE_COST,
- "BID_SCENE_NORMAL_MAX": BID_MODE_MAX_CONVERSION,
- }
- _PLACEMENT_GROUPS = {
- "微信朋友圈": ["SITE_SET_MOMENTS"],
- "朋友圈": ["SITE_SET_MOMENTS"],
- "微信公众号与小程序": ["SITE_SET_WECHAT", "SITE_SET_WECHAT_PLUGIN"],
- "微信公众号": ["SITE_SET_WECHAT"],
- "微信插件": ["SITE_SET_WECHAT_PLUGIN"],
- "搜索场景": ["SITE_SET_SEARCH_SCENE"],
- "腾讯平台与内容媒体": [
- "SITE_SET_TENCENT_NEWS",
- "SITE_SET_TENCENT_VIDEO",
- "SITE_SET_KANDIAN",
- "SITE_SET_QQ_MUSIC_GAME",
- ],
- "腾讯营销联盟": ["SITE_SET_MOBILE_UNION"],
- }
- def parse_bid_scene(raw: object) -> str:
- text = str(raw or "").strip()
- if text in _BID_SCENE_VALUES:
- return _BID_SCENE_VALUES[text]
- raise ValueError(f"未知出价方式:{raw}")
- def parse_placement_config(raw: object) -> PlacementConfig | None:
- text = str(raw or "").strip()
- if not text:
- return None
- if text.upper() == "AIM+":
- return PlacementConfig(automatic_site_enabled=True, site_set=[])
- site_set: list[str] = []
- for part in text.replace(",", ",").split(","):
- name = part.strip()
- if not name:
- continue
- values = _PLACEMENT_GROUPS.get(name)
- if values is None:
- raise ValueError(f"未知投放版位:{name}")
- for value in values:
- if value not in site_set:
- site_set.append(value)
- if not site_set:
- raise ValueError(f"投放版位为空:{raw}")
- return PlacementConfig(automatic_site_enabled=False, site_set=site_set)
|