Ver código fonte

video insight

丁云鹏 1 mês atrás
pai
commit
dbbb09a27e

+ 0 - 5
utils/aliyun_log.py

@@ -17,11 +17,6 @@ class AliyunLogger:
     @staticmethod
     @staticmethod
     def logging(
     def logging(
             video_id: str,
             video_id: str,
-            title: str,
-            video_url: str,
-            version: str,
-            type: str,
-            partition: str,
             data: Optional[str] = None):
             data: Optional[str] = None):
         """
         """
         写入阿里云日志
         写入阿里云日志

+ 36 - 0
utils/google_ai_studio.py

@@ -12,6 +12,42 @@ from loguru import logger
 from utils.feishu_data import Material
 from utils.feishu_data import Material
 
 
 CACHE_DIR = '/app/cache/'
 CACHE_DIR = '/app/cache/'
+prompt = '''
+请帮助我做以下分析:
+我将提供给你视频,需要你模拟成中老年用户在视频消费平台观看这些视频。
+需要你充分发挥想象力,推测出中老年用户在观看这些视频过程中,他们在接收到视频中某些信息后可能产生什么具体的需求。另外,请特别针对在用户观看至视频结束后的场景,给出一个合理的需求推测。
+输出产品形式出现到消失的时间点时请注意:每个需求对应的产品形式出现的合理时间点应是在用户接收到视频中某些信息后出现。
+以上每项需求请根据观看者的需求强烈程度打分排序,越强烈分值越高,分值越高排序越前。分值范围:0~100分。
+以上每项需求请分类。需求类型:比如获取服务类、获取信息类、交流互动类、内容分享类等,类型字数请控制在10个字以内。
+针对你推理出的这些用户需求,请给出与每个需求相匹配且合理的产品解决方案,如有其它视频平台类似形式的案例也请描述出来。
+其中产品解决方案中包括:
+1、用户具体的需求描述并对需求进行分类。比如,需求描述为:“确认自身正在服用的药物的具体忌口信息,确保安全用药,避免潜在风险。”该需求可分类为:信息获取类、服务获取类。需求分类:比如,信息获取、服务获取、商品获取、互动交流、活动体验等
+2、推测出该点需求的原因。
+3、描述出与需求对应的产品钩子。需要包含钩子形式描述以及钩子形式分类。还需明确产品形式在视频播放过程中出现到消失的时间。
+注意:产品钩子要求能和需求匹配又能合理地吸引用户。
+钩子形式描述:比如,视频结束时,出现“看更多养老院视频”按键入口;钩子形式分类:比如内容观看入口。
+钩子形式类型举例:比如tips提示、语音播报、贴片广告、购物车链接、内容观看入口、社群二维码图片、智能搜索按键等。类型字数请控制在10个字以内。
+4、点击钩子后的产品落地形态描述以及产品落地形态分类。
+注意:产品落地形态应与产品钩子合理承接。
+点击钩子后的产品落地形态描述:比如,点击“搜索更多养老院视频”按键后,自动搜索“养老院”相关内容且页面跳转落地至搜索结果页,展示养老院视频列表供用户挑选;
+产品落地形态分类:搜索结果列表。
+产品落地形态分类举例:比如商品广告h5、搜索结果列表、内容列表、私域群二维码、AI机器人对话等。类型字数请控制在10个字以内。
+通过以上这种结构化的分类和整理,最终想通过AI对内容进行理解,分析推测出内容不同时机的价值点与用户需求的对应关系,为后续AI在产品中的应用场景提供更多可能。
+输出内容格式:
+output in JSON format with keys:
+需求排序序号(str)
+需求强烈程度分值(str)
+用户具体的需求描述(str)
+需求分类(str)
+推测出该点需求的原因(str)
+描述出与需求对应的产品钩子(str)
+产品形式出现到消失的时间点(str)
+钩子形式描述(str)
+钩子形式类型(str)
+点击钩子后的产品落地形态描述(str)
+产品落地形态分类(str)
+其他平台案例(str)
+'''
 # CACHE_DIR = '/Users/z/Downloads/'
 # CACHE_DIR = '/Users/z/Downloads/'
 # PROXY_ADDR = 'http://localhost:1081'
 # PROXY_ADDR = 'http://localhost:1081'
 # os.environ['http_proxy'] = PROXY_ADDR
 # os.environ['http_proxy'] = PROXY_ADDR

+ 2 - 2
utils/odps_data.py

@@ -15,7 +15,7 @@ class OdpsDataCount:
         odps = ODPS(
         odps = ODPS(
             access_id=ODPS_CONFIG['ACCESSID'],
             access_id=ODPS_CONFIG['ACCESSID'],
             secret_access_key=ODPS_CONFIG['ACCESSKEY'],
             secret_access_key=ODPS_CONFIG['ACCESSKEY'],
-            project=project,
+            project='loghubods',
             endpoint=ODPS_CONFIG['ENDPOINT']
             endpoint=ODPS_CONFIG['ENDPOINT']
         )
         )
         data_values = []
         data_values = []
@@ -35,4 +35,4 @@ class OdpsDataCount:
         return data_count
         return data_count
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
-    OdpsDataCount.main()
+    OdpsDataCount.main()

+ 2 - 1
utils/piaoquan.py

@@ -103,8 +103,9 @@ class PQ:
                 if code == 0:
                 if code == 0:
                     data = response['data']
                     data = response['data']
                     video_path = data["videoPath"]
                     video_path = data["videoPath"]
+                    video_title = data["title"]
 
 
-                    return video_path
+                    return video_title, video_path
             return None
             return None
         except Exception as e:
         except Exception as e:
             return None
             return None

+ 40 - 3
workers/consumption_work.py

@@ -12,7 +12,7 @@ from utils.aliyun_log import AliyunLogger
 from utils.google_ai_studio import GoogleAI
 from utils.google_ai_studio import GoogleAI
 from utils.piaoquan import PQ
 from utils.piaoquan import PQ
 from utils.redis import RedisHelper, content_video_data
 from utils.redis import RedisHelper, content_video_data
-
+from utils.mysql_db import MysqlHelper
 
 
 
 
 
 
@@ -30,8 +30,15 @@ class ConsumptionRecommend(object):
         task = orjson.loads(task)
         task = orjson.loads(task)
         logger.info(f"[处理] 获取redis数据{task}")
         logger.info(f"[处理] 获取redis数据{task}")
         video_id = task['video_id']
         video_id = task['video_id']
+
+        count_sql = f"""select count(1) from video_demand_analysis where video_id = {video_id}"""
+        count = MysqlHelper.get_values(count_sql)
+        if count and count[0][0] == 0:
+            logger.info(f"[处理] 视频重复过滤")
+            return
+
         logger.info(f"[处理] 开始获取原视频OSS地址")
         logger.info(f"[处理] 开始获取原视频OSS地址")
-        video_path = PQ.get_pq_oss(video_id)
+        video_title, video_path = PQ.get_pq_oss(video_id)
         if not video_path:
         if not video_path:
             return
             return
         logger.info(f"[处理] 获取原视频OSS地址,视频链接:{video_path}")
         logger.info(f"[处理] 获取原视频OSS地址,视频链接:{video_path}")
@@ -43,7 +50,37 @@ class ConsumptionRecommend(object):
         text = GoogleAI.run(api_key, video_url)
         text = GoogleAI.run(api_key, video_url)
         if "[异常]" in text:
         if "[异常]" in text:
             content_video_data(json.dumps(task))
             content_video_data(json.dumps(task))
-        AliyunLogger.logging(str(video_id), orjson.dumps(text).decode())
+
+        # Parse JSON data
+        data = json.loads(orjson.dumps(text).decode())
+        # Generate SQL insert statement
+        sql = """
+        INSERT INTO video_demand_analysis (
+            video_id, video_link, video_title, content_type,
+            demand_order, demand_score, user_demand, demand_category,
+            demand_reason, product_hook, hook_time, hook_desc,
+            hook_type, landing_desc, landing_type, platform_case
+        ) VALUES
+        """
+        # Add values for each entry
+        values = []
+        link = f"""https://admin.piaoquantv.com/cms/post-detail/{video_id}/detail"""
+
+        for entry in data:
+            value = f"""(
+                {video_id}, {link}, {video_title}, NULL,
+                {entry.get('需求排序序号', '')}, {entry.get('需求强烈程度分值', '')}, '{entry.get('用户具体的需求描述', '')}', '{entry.get('需求分类', '')}',
+                '{entry.get('推测出该点需求的原因', '')}', '{entry.get('描述出与需求对应的产品钩子', '')}', '{entry.get('产品形式出现到消失的时间点', '')}', '{entry.get('钩子形式描述', '')}',
+                '{entry.get('钩子形式类型', '')}', '{entry.get('点击钩子后的产品落地形态描述', '')}', '{entry.get('产品落地形态分类', '')}', '{entry.get('其他平台案例', '')}'
+            )"""
+            values.append(value)
+        # Combine SQL statement and values
+        sql += ",\n".join(values) + ";"
+        # Print SQL statement
+        print(sql)
+        MysqlHelper.update(sql)
+
+        # AliyunLogger.logging(str(video_id), orjson.dumps(text).decode())
         logger.info(f"[处理] 写入日志成功")
         logger.info(f"[处理] 写入日志成功")
 
 
 
 

+ 6 - 5
workers/select_work.py

@@ -4,7 +4,9 @@ import time
 
 
 import schedule
 import schedule
 from loguru import logger
 from loguru import logger
-sys.path.append('/app')
+sys.path.append('/root/video-insight')
+import os
+print("Current working directory:", os.getcwd())
 
 
 from utils.odps_data import OdpsDataCount
 from utils.odps_data import OdpsDataCount
 from utils.redis import RedisHelper
 from utils.redis import RedisHelper
@@ -12,12 +14,11 @@ from utils.redis import RedisHelper
 def requirement_insight():
 def requirement_insight():
     """视频需求点洞察"""
     """视频需求点洞察"""
     try:
     try:
-        // 改成获取前一天
-        dt = (datetime.datetime.now() - datetime.timedelta(days=1))..strftime('%Y%m%d')
+        dt = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y%m%d')
         logger.info(f"视频需求点洞察")
         logger.info(f"视频需求点洞察")
         redis_task = "task:video_insight"
         redis_task = "task:video_insight"
-        sql =f'select clickobjectid as video_id from user_share_log where dt = {dt} and topic = "click" group by clickobjectidorder by count(distinct machinecode) desc limit 100'
-        data = OdpsDataCount.main(table_name, dt)
+        sql =f'select clickobjectid as video_id from loghubods.user_share_log where dt = {dt} and topic = "click" group by clickobjectid order by count(distinct machinecode) desc limit 100'
+        data = OdpsDataCount.main(sql)
         if not data:
         if not data:
             return
             return
         RedisHelper().get_client().rpush(redis_task, *data)
         RedisHelper().get_client().rpush(redis_task, *data)