Преглед на файлове

add ad_creative_cvr_update

liqian преди 1 година
родител
ревизия
510124ed3f
променени са 3 файла, в които са добавени 86 реда и са изтрити 0 реда
  1. 75 0
      ad_creative_cvr_update.py
  2. 8 0
      ad_creative_cvr_update_task.sh
  3. 3 0
      config.py

+ 75 - 0
ad_creative_cvr_update.py

@@ -0,0 +1,75 @@
+import traceback
+import datetime
+import json
+import time
+from odps import ODPS
+from db_helper import RedisHelper
+from utils import send_msg_to_feishu
+from config import set_config
+from log import Log
+
+config_ = set_config()
+log_ = Log()
+
+
+def main(project, table):
+    try:
+        # 获取广告ad_idea_id对应的点击次数、转化次数 和 cvr
+        odps = ODPS(
+            access_id=config_.ODPS_CONFIG['ACCESSID'],
+            secret_access_key=config_.ODPS_CONFIG['ACCESSKEY'],
+            project=project,
+            endpoint=config_.ODPS_CONFIG['ENDPOINT'],
+        )
+        records = odps.read_table(name=table)
+        ad_creative_data = []
+        for item in records:
+            creative_id = item['creative_id']
+            click_pv = item['click_pv']
+            conversion_pv = item['conversion_pv']
+            cvr = item['cvr']
+            if creative_id is None or creative_id == '':
+                continue
+            try:
+                cvr = float(cvr)
+            except:
+                continue
+            if cvr == 0:
+                continue
+            ad_creative_data.append(
+                {'creative_id': creative_id, 'click_pv': click_pv, 'conversion_pv': conversion_pv, 'cvr': cvr}
+            )
+        log_.info(f"ad_creative_data count: {len(ad_creative_data)}")
+        log_.info(f"ad_creative_data: {ad_creative_data}")
+        # 更新redis
+        redis_helper = RedisHelper()
+        i = 0
+        for ad_creative in ad_creative_data:
+            try:
+                key_name = f"{config_.CREATIVE_CVR_KEY_PREFIX}{ad_creative['creative_id']}"
+                value = json.dumps(ad_creative['cvr'])
+                redis_helper.set_data_to_redis(key_name=key_name, value=value, expire_time=24 * 3600)
+                i += 1
+            except:
+                continue
+        log_.info(f"to redis count: {i}")
+    except Exception as e:
+        log_.error(f"广告Thompson-cvr参数更新失败, exception: {e}, traceback: {traceback.format_exc()}")
+        send_msg_to_feishu(
+            webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
+            key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
+            msg_text=f"rov-offline{config_.ENV_TEXT} - 广告Thompson-cvr参数更新失败\n"
+                     f"exception: {e}\n"
+                     f"traceback: {traceback.format_exc()}"
+        )
+
+
+if __name__ == '__main__':
+    project = 'loghubods'
+    table = ''
+    now_date = datetime.datetime.today()
+    dt = datetime.datetime.strftime(now_date, '%Y%m%d %H:%M:%S')
+    log_.info(f"dt: {dt}")
+    start_time = time.time()
+    main(project=project, table=table)
+    log_.info(f"excuteTime: {(time.time() - start_time) * 1000}ms")

+ 8 - 0
ad_creative_cvr_update_task.sh

@@ -0,0 +1,8 @@
+source /etc/profile
+echo $AD_SERVER_OFFLINE_ENV
+if [[ $AD_SERVER_OFFLINE_ENV == 'test' ]]; then
+    cd /data2/ad-server-offline && /root/anaconda3/bin/python /data2/ad-server-offline/ad_creative_cvr_update.py
+
+elif [[ $AD_SERVER_OFFLINE_ENV == 'pro' ]]; then
+    cd /data/ad-server-offline && /root/anaconda3/bin/python /data/ad-server-offline/ad_creative_cvr_update.py
+fi

+ 3 - 0
config.py

@@ -10,6 +10,9 @@ class BaseConfig(object):
     }
     # adIdeaId对应Thompson参数结果存放 redis key 前缀,完整格式:thompson:param:{ad_idea_id}
     THOMPSON_PARAM_KEY_PREFIX = 'thompson:param:'
+    # creativeId对应cvr结果存放 redis key 前缀,完整格式:creative:cvr:{creativeId}
+    CREATIVE_CVR_KEY_PREFIX = 'creative:cvr:'
+
     FEISHU_ROBOT = {
         'server_robot': {
             'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/8de4de35-30ed-4692-8854-7a154e89b2f2',