|
@@ -1,6 +1,8 @@
|
|
|
"""
|
|
|
@author: luojunhui
|
|
|
"""
|
|
|
+from datetime import datetime, timedelta
|
|
|
+
|
|
|
from applications.match_algorithm.title_similarity import jcd_title_similarity
|
|
|
|
|
|
|
|
@@ -51,3 +53,82 @@ def title_similarity_rank(content_title, recall_list):
|
|
|
include_title_list.append(item)
|
|
|
sorted_list = sorted(include_title_list, key=lambda x: x['score'], reverse=True)
|
|
|
return sorted_list
|
|
|
+
|
|
|
+
|
|
|
+async def get_content_oss_fission_dict(db_client, config, content_id) -> dict[str: float]:
|
|
|
+ """
|
|
|
+ 通过 content_id 对应的 oss 路径对应的裂变表现进行排序
|
|
|
+ oss 数据每天凌晨 2 点更新
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ FISSION_DETAIL_TABLE = config.fission_detail_table
|
|
|
+ two_days_ago_dt = (datetime.now() - timedelta(days=2)).strftime('%Y%m%d')
|
|
|
+ sql = f"""
|
|
|
+ SELECT
|
|
|
+ oss_name, fission_rate_0, fission_0_on_read
|
|
|
+ FROM
|
|
|
+ {FISSION_DETAIL_TABLE}
|
|
|
+ WHERE content_id = '{content_id}' and dt >= '{two_days_ago_dt}'
|
|
|
+ ORDER BY dt DESC;
|
|
|
+ """
|
|
|
+ result = await db_client.async_select(sql)
|
|
|
+ fission_info_dict = {}
|
|
|
+ if result:
|
|
|
+ for item in result:
|
|
|
+ key = item[0]
|
|
|
+ value = {
|
|
|
+ "fission_rate_0": item[1],
|
|
|
+ "fission_0_on_read": item[2]
|
|
|
+ }
|
|
|
+ if fission_info_dict.get(key):
|
|
|
+ continue
|
|
|
+ else:
|
|
|
+ fission_info_dict[key] = value
|
|
|
+ return fission_info_dict
|
|
|
+ else:
|
|
|
+ return {}
|
|
|
+
|
|
|
+
|
|
|
+async def get_title_oss_fission_list(db_client, config, content_id) -> list[dict]:
|
|
|
+ """
|
|
|
+ 通过 content_id 对应的 oss 路径对应的裂变表现进行排序
|
|
|
+ oss 数据每天凌晨 2 点更新
|
|
|
+ todo: 获取有数据的最新dt
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+ FISSION_DETAIL_TABLE = config.fission_detail_table
|
|
|
+ LONG_ARTICLES_TEXT_TABLE = config.article_text_table
|
|
|
+ LONG_ARTICLES_CRAWLER_TABLE = config.article_crawler_video_table
|
|
|
+ # two_days_ago_dt = (datetime.now() - timedelta(days=2)).strftime('%Y%m%d')
|
|
|
+ sql = f"""
|
|
|
+ SELECT
|
|
|
+ lavfi.oss_name, lavfi.fission_0_on_read, lacv.platform, lacv.cover_oss_path, lacv.user_id
|
|
|
+ FROM
|
|
|
+ {FISSION_DETAIL_TABLE} lavfi
|
|
|
+ JOIN {LONG_ARTICLES_CRAWLER_TABLE} lacv on lavfi.oss_name = lacv.video_oss_path
|
|
|
+ WHERE title = (
|
|
|
+ SELECT article_title
|
|
|
+ FROM {LONG_ARTICLES_TEXT_TABLE}
|
|
|
+ WHERE content_id = '{content_id}'
|
|
|
+ );
|
|
|
+ AND lavfi.dt = (
|
|
|
+ SELECT MAX(dt)
|
|
|
+ FROM long_articles_videos_fission_info
|
|
|
+ WHERE oss_name = lavfi.oss_name
|
|
|
+ )
|
|
|
+ """
|
|
|
+ result = await db_client.async_select(sql)
|
|
|
+ fission_info_list = []
|
|
|
+ if result:
|
|
|
+ for item in result:
|
|
|
+ obj = {
|
|
|
+ "platform": item[2],
|
|
|
+ "video_oss_path": item[0],
|
|
|
+ "cover_oss_path": item[3],
|
|
|
+ "uid": item[4],
|
|
|
+ "fission_0_on_read": item[1],
|
|
|
+ }
|
|
|
+ fission_info_list.append(obj)
|
|
|
+ return sorted(fission_info_list, key=lambda x: x['fission_0_on_read'], reverse=True)
|
|
|
+ else:
|
|
|
+ return []
|