helpers.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import asyncio
  2. from typing import List, Dict
  3. from datetime import datetime, timedelta
  4. from core.utils.feishu_data_async import FeishuDataAsync
  5. from core.utils.gpt4o_mini_help import GPT4oMini
  6. async def get_title_filter_word() -> List[str]:
  7. """
  8. 获取飞书表配置的标题过滤词
  9. https://w42nne6hzg.feishu.cn/sheets/KsoMsyP2ghleM9tzBfmcEEXBnXg?sheet=BS9uyu
  10. :return:
  11. """
  12. spreadsheet_token = "KsoMsyP2ghleM9tzBfmcEEXBnXg"
  13. sheet_id = "BS9uyu"
  14. async with FeishuDataAsync() as feishu:
  15. feishu_data = await feishu.get_values(spreadsheet_token=spreadsheet_token, sheet_id=sheet_id)
  16. for row in feishu_data[1:]:
  17. title_rule = row[0]
  18. if title_rule:
  19. return title_rule.split(",")
  20. else:
  21. return None
  22. return None
  23. async def generate_titles(sheet_id: str,video_obj: Dict,logger,aliyun_log):
  24. title_filter_word = await get_title_filter_word()
  25. title = video_obj.get("video_title")
  26. if not title:
  27. return video_obj
  28. # 确保title和title_filter_word中的所有元素都是字符串
  29. if title is None:
  30. title = ""
  31. else:
  32. title = str(title)
  33. # 过滤掉title_filter_word中的非字符串元素,并确保它们不为None
  34. title_filter_word = [str(keyword) for keyword in title_filter_word if keyword is not None]
  35. contains_keyword = any(keyword in title for keyword in title_filter_word)
  36. logger.info(f"【{title}】标题包含过滤关键词:{contains_keyword}")
  37. if contains_keyword:
  38. new_title = await GPT4oMini.get_ai_mini_title(title)
  39. logger.info(f"生成新的标题:{new_title}")
  40. video_obj["video_title"] = new_title
  41. current_time = datetime.now()
  42. formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")
  43. values = [
  44. video_obj["video_url"],
  45. video_obj["cover_url"],
  46. title,
  47. new_title,
  48. formatted_time,
  49. ]
  50. await insert_safe_data(sheet_id, values)
  51. return video_obj
  52. async def insert_safe_data(sheet_id: str, values: List):
  53. spreadsheet_token = "U5dXsSlPOhiNNCtEfgqcm1iYnpf"
  54. async with FeishuDataAsync() as feishu:
  55. await feishu.insert_values(spreadsheet_token=spreadsheet_token, sheet_id=sheet_id,ranges="A2:Z2",values=values)
  56. async def is_near_next_day(threshold_minutes: int = 3) -> bool:
  57. """
  58. 时间检查
  59. """
  60. now = datetime.now()
  61. tomorrow = now.date() + timedelta(days=1)
  62. midnight = datetime.combine(tomorrow, datetime.min.time())
  63. time_left = midnight - now
  64. if time_left.total_seconds() < threshold_minutes * 60:
  65. return True
  66. return False
  67. # if __name__ == '__main__':
  68. # # asyncio.run(insert_safe_data("K0gA9Y", ["1","2","3","4","5"]))
  69. # print(asyncio.run(get_title_filter_word()))