|
@@ -193,11 +193,13 @@ class AddScriptConfig(BaseModel):
|
|
@logger.catch
|
|
@logger.catch
|
|
@app.post('/export_script_file/', tags=['front-end interactive'],
|
|
@app.post('/export_script_file/', tags=['front-end interactive'],
|
|
description="导出文件",
|
|
description="导出文件",
|
|
- summary='导出文件'
|
|
|
|
|
|
+ summary='导出文件',
|
|
|
|
+ response_model=BaseResponse
|
|
)
|
|
)
|
|
def export_script_file(item: List[QueryWordItem]):
|
|
def export_script_file(item: List[QueryWordItem]):
|
|
try:
|
|
try:
|
|
video_df = pd.DataFrame()
|
|
video_df = pd.DataFrame()
|
|
|
|
+ out_df = pd.DataFrame()
|
|
# 1 从数据库获取视频数据
|
|
# 1 从数据库获取视频数据
|
|
# 如果同一个素材有多个查询词,则合并打上这多个查询词
|
|
# 如果同一个素材有多个查询词,则合并打上这多个查询词
|
|
for obj in item:
|
|
for obj in item:
|
|
@@ -210,20 +212,20 @@ def export_script_file(item: List[QueryWordItem]):
|
|
df = pd.read_sql(sql, ai_word_engine)
|
|
df = pd.read_sql(sql, ai_word_engine)
|
|
video_df = video_df.append(df)
|
|
video_df = video_df.append(df)
|
|
|
|
|
|
- # 按 'signature' + 'query_word' + 'stat_date' 进行去重
|
|
|
|
- video_df.drop_duplicates(['signature', 'query_word', 'stat_date', 'source_code'], keep='last', inplace=True)
|
|
|
|
|
|
+ if not video_df.empty:
|
|
|
|
+ # 按 'signature' + 'query_word' + 'stat_date' 进行去重
|
|
|
|
+ video_df.drop_duplicates(['signature', 'query_word', 'stat_date', 'source_code'], keep='last', inplace=True)
|
|
|
|
|
|
- video_query_word_df = video_df.groupby('signature').apply(lambda x: pd.Series({'query_word_lst': x['query_word'].unique(),
|
|
|
|
- 'video_url': x['video_url'].values[0],
|
|
|
|
- 'source_code': x['source_code'].values[0]}))
|
|
|
|
- video_query_word_df.reset_index(inplace=True, drop=False)
|
|
|
|
|
|
+ video_query_word_df = video_df.groupby('signature').apply(lambda x: pd.Series({'query_word_lst': x['query_word'].unique(),
|
|
|
|
+ 'video_url': x['video_url'].values[0],
|
|
|
|
+ 'source_code': x['source_code'].values[0]}))
|
|
|
|
+ video_query_word_df.reset_index(inplace=True, drop=False)
|
|
|
|
|
|
- # 如果来源==2 (头条巨量引擎),把视频链接替换为永久链接
|
|
|
|
- video_query_word_df['video_url'] = video_query_word_df.apply(
|
|
|
|
- lambda row: toutiao_static_video_url + row['signature'] if row.get('source_code') == 2 else row['video_url'], axis=1)
|
|
|
|
|
|
+ # 如果来源==2 (头条巨量引擎),把视频链接替换为永久链接
|
|
|
|
+ video_query_word_df['video_url'] = video_query_word_df.apply(
|
|
|
|
+ lambda row: toutiao_static_video_url + row['signature'] if row.get('source_code') == 2 else row['video_url'], axis=1)
|
|
|
|
|
|
- # 2 根据第一步的视频数据获取脚本
|
|
|
|
- if not video_query_word_df.empty:
|
|
|
|
|
|
+ # 2 根据第一步的视频数据获取脚本
|
|
signature_lst = list(video_query_word_df.signature.values) if len(video_query_word_df.signature.values) > 1 \
|
|
signature_lst = list(video_query_word_df.signature.values) if len(video_query_word_df.signature.values) > 1 \
|
|
else list(video_query_word_df.signature.values) * 2
|
|
else list(video_query_word_df.signature.values) * 2
|
|
sql = f"select signature, word_text from tb_asr_result where signature in {tuple(signature_lst)}" \
|
|
sql = f"select signature, word_text from tb_asr_result where signature in {tuple(signature_lst)}" \
|
|
@@ -248,10 +250,14 @@ def export_script_file(item: List[QueryWordItem]):
|
|
return StreamingResponse(bio, media_type='xlsx', headers=headers)
|
|
return StreamingResponse(bio, media_type='xlsx', headers=headers)
|
|
else:
|
|
else:
|
|
logger.info(f"request body: {item}, message: 没有获取到对应的数据")
|
|
logger.info(f"request body: {item}, message: 没有获取到对应的数据")
|
|
- return None
|
|
|
|
|
|
+ return {"code": 0,
|
|
|
|
+ "message": "没有获取到对应的数据",
|
|
|
|
+ "success": True}
|
|
except:
|
|
except:
|
|
logger.error(f"request body: {item}, message: {traceback.format_exc()}")
|
|
logger.error(f"request body: {item}, message: {traceback.format_exc()}")
|
|
- return None
|
|
|
|
|
|
+ return {"code": 0,
|
|
|
|
+ "message": {traceback.format_exc()},
|
|
|
|
+ "success": False}
|
|
|
|
|
|
|
|
|
|
@logger.catch
|
|
@logger.catch
|