cover_method.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. from common import Feishu
  2. from common.aliyun_log import AliyunLogger
  3. from common.cover_gpt4o import CoverAnalyzer
  4. from common.pq_cover import PQ
  5. from common.redis import insert_pq_data
  6. from common.sql_help import sqlCollect
  7. import time
  8. import random
  9. class CoverMethod:
  10. @staticmethod
  11. def cover_data_dispose(data_list):
  12. valid_records = [record for record in data_list if record['cover_sum'] > 0]
  13. if valid_records:
  14. # 获取最高的cover_sum
  15. highest_sum = max( record['cover_sum'] for record in valid_records )
  16. # 获取所有cover_sum等于最高分数的记录
  17. candidates = [record for record in valid_records if record['cover_sum'] == highest_sum]
  18. # 随机选择一个
  19. selected_record = random.choice(candidates)
  20. highest_cover_url = selected_record['cover_url']
  21. highest_cover_sum = selected_record['cover_sum']
  22. return highest_cover_url, highest_cover_sum
  23. else:
  24. return None, 0
  25. @staticmethod
  26. def cover_method(video_id):
  27. print( f"开始处理:{video_id}" )
  28. video_id_status = sqlCollect.select_video_cover_method(video_id) # 判断该视频id是否处理过
  29. if video_id_status:
  30. AliyunLogger.logging(video_id, "重复视频ID,不做封面处理", "2001")
  31. text = (
  32. f"**通知类型**: 重复视频ID,不做封面处理\n"
  33. f"**站内视频ID链接**: https://admin.piaoquantv.com/cms/post-detail/{video_id}/detail\n"
  34. )
  35. Feishu.finish_bot( text,
  36. "https://open.feishu.cn/open-apis/bot/v2/hook/63745308-c53e-4030-90b9-77383b057252",
  37. "【 封面修改通知 】" )
  38. return
  39. cover_list = PQ.get_pq_all_cover(video_id) # 获取所有封面
  40. if cover_list:
  41. print( f"{video_id}获取封面成功,共{len(cover_list)}条")
  42. # gpt 评分
  43. start_time = time.time()
  44. cover_all_data = CoverAnalyzer.cover_list_data(cover_list)
  45. if not cover_all_data:
  46. AliyunLogger.logging( video_id, "GPT评分失败", "3002", cover_all_data)
  47. insert_pq_data( [video_id] )
  48. return
  49. end_time = time.time()
  50. execution_time = end_time - start_time
  51. print(f"代码运行时间: {execution_time:.4f} 秒")
  52. highest_cover_url, highest_cover_sum = CoverMethod.cover_data_dispose(cover_all_data) # 获取分数最高的视频封面
  53. print(f"最高分封面{highest_cover_url},分数{highest_cover_sum}")
  54. # if not highest_cover_url or highest_cover_sum == 0:
  55. # AliyunLogger.logging( video_id, "视频封面分数都为0,不做封面更改", "2002", cover_all_data)
  56. # text = (
  57. # f"**通知类型**: 视频封面分数都为0,不做封面更改\n"
  58. # f"**站内视频ID链接**: https://admin.piaoquantv.com/cms/post-detail/{video_id}/detail\n"
  59. # )
  60. # Feishu.finish_bot( text,
  61. # "https://open.feishu.cn/open-apis/bot/v2/hook/63745308-c53e-4030-90b9-77383b057252",
  62. # "【 封面修改通知 】" )
  63. # return
  64. cover_id, old_cover_url = PQ.get_pq_cover_id(video_id) # 获取原封面 和 封面ID
  65. if not cover_id:
  66. AliyunLogger.logging( video_id, "获取视频原封面和封面ID失败", "3002", cover_all_data, old_cover_url, highest_cover_url)
  67. insert_pq_data( [video_id] )
  68. return
  69. print( f"{video_id}获取原封面 和 封面ID成功")
  70. old_cover_data = CoverAnalyzer.cover_list_data([old_cover_url])
  71. if not old_cover_data:
  72. old_cover_sum = 0
  73. else:
  74. old_cover_url1, old_cover_sum = CoverMethod.cover_data_dispose( old_cover_data )
  75. if int(old_cover_sum) == 0 and int(highest_cover_sum) == 0:
  76. selected_record = random.choice( cover_all_data )
  77. highest_cover_url = selected_record['cover_url']
  78. highest_cover_sum = selected_record['cover_sum']
  79. if highest_cover_url == old_cover_url:
  80. AliyunLogger.logging( video_id, "原封面与新封面一致,不做封面修改", "2003", cover_all_data, old_cover_url,
  81. highest_cover_url )
  82. text = (
  83. f"**通知类型**: 原封面与新封面一致,不做封面修改\n"
  84. f"**站内视频ID链接**: https://admin.piaoquantv.com/cms/post-detail/{video_id}/detail\n"
  85. f"**原视频封面链接**: {old_cover_url}\n"
  86. f"**原视频封面分数**: {old_cover_sum}\n"
  87. f"**新视频封面链接**: {highest_cover_url}\n"
  88. f"**新视频封面分数**: {highest_cover_sum}\n"
  89. )
  90. Feishu.finish_bot( text,
  91. "https://open.feishu.cn/open-apis/bot/v2/hook/63745308-c53e-4030-90b9-77383b057252",
  92. "【 封面修改通知 】" )
  93. return
  94. if int(old_cover_sum) != 0 and int(highest_cover_sum) <= int(old_cover_sum):
  95. text = (
  96. f"**通知类型**: 原封面分数比新封面分数高/分数相同,不做封面修改\n"
  97. f"**站内视频ID链接**: https://admin.piaoquantv.com/cms/post-detail/{video_id}/detail\n"
  98. f"**原视频封面链接**: {old_cover_url}\n"
  99. f"**原视频封面分数**: {old_cover_sum}\n"
  100. f"**新视频封面链接**: {highest_cover_url}\n"
  101. f"**新视频封面分数**: {highest_cover_sum}\n"
  102. )
  103. Feishu.finish_bot( text,
  104. "https://open.feishu.cn/open-apis/bot/v2/hook/63745308-c53e-4030-90b9-77383b057252",
  105. "【 封面修改通知 】" )
  106. return
  107. code = PQ.update_pq_video_cover(video_id, highest_cover_url, cover_id) # 修改封面
  108. print(f"修改封面成功{video_id}")
  109. if code == 0:
  110. AliyunLogger.logging( video_id, "修改封面成功", "1000", cover_all_data, old_cover_url, highest_cover_url)
  111. text = (
  112. f"**通知类型**: 视频封面修改成功\n"
  113. f"**站内视频ID链接**: https://admin.piaoquantv.com/cms/post-detail/{video_id}/detail\n"
  114. f"**原视频封面链接**: {old_cover_url}\n"
  115. f"**原视频封面分数**: {old_cover_sum}\n"
  116. f"**新视频封面链接**: {highest_cover_url}\n"
  117. f"**新视频封面分数**: {highest_cover_sum}\n"
  118. )
  119. Feishu.finish_bot( text,
  120. "https://open.feishu.cn/open-apis/bot/v2/hook/63745308-c53e-4030-90b9-77383b057252",
  121. "【 封面修改通知 】" )
  122. sqlCollect.insert_video_cover_method(video_id, cover_id, old_cover_url, highest_cover_url)
  123. return
  124. else:
  125. text = (
  126. f"**通知类型**: 视频封面修改失败\n"
  127. f"**站内视频ID链接**: https://admin.piaoquantv.com/cms/post-detail/{video_id}/detail\n"
  128. f"**原视频封面链接**: {old_cover_url}\n"
  129. f"**原视频封面分数**: {old_cover_sum}\n"
  130. f"**新视频封面链接**: {highest_cover_url}\n"
  131. f"**新视频封面分数**: {highest_cover_sum}\n"
  132. )
  133. Feishu.finish_bot( text,
  134. "https://open.feishu.cn/open-apis/bot/v2/hook/63745308-c53e-4030-90b9-77383b057252",
  135. "【 封面修改通知 】" )
  136. AliyunLogger.logging( video_id, "修改视频封面失败", "3003", cover_all_data, old_cover_url, highest_cover_url)
  137. insert_pq_data( [video_id] )
  138. else:
  139. AliyunLogger.logging(video_id, "没有获取到封面", "3001")
  140. text = (
  141. f"**通知类型**: 没有获取到封面\n"
  142. f"**站内视频ID链接**: https://admin.piaoquantv.com/cms/post-detail/{video_id}/detail\n"
  143. )
  144. Feishu.finish_bot( text,
  145. "https://open.feishu.cn/open-apis/bot/v2/hook/63745308-c53e-4030-90b9-77383b057252",
  146. "【 封面修改通知 】" )
  147. print(f"{video_id}没有获取到封面")
  148. return
  149. if __name__ == '__main__':
  150. CoverMethod.cover_method("30496823")