checkVideoStatusDaily.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. """
  2. @author: luojunhui
  3. @description: 校验视频状态,若视频状态为不通过,则修改视频状态
  4. todo: add log
  5. """
  6. import time
  7. from tqdm import tqdm
  8. from applications import PQAPI, PQMySQL, bot
  9. class VideoStatusManager(object):
  10. """
  11. 视频状态校验 and 修改
  12. """
  13. db_client = PQMySQL()
  14. pq_api = PQAPI()
  15. @classmethod
  16. def getVideoListStatus(cls, videoList):
  17. """
  18. 获取视频 list 的状态,并且返回状态为不通过的视频 list
  19. :param videoList: 视频 id_list, 最长为 20
  20. :return: bad video list
  21. """
  22. response = cls.pq_api.getPQVideoListDetail(video_list=videoList)
  23. detail_list = response.get('data', [])
  24. if detail_list:
  25. bad_video_list = [i for i in detail_list if i['auditStatus'] != 5]
  26. bad_id_list = [i['id'] for i in bad_video_list]
  27. else:
  28. bad_id_list = []
  29. return bad_id_list
  30. @classmethod
  31. def getPublishedVideoIdsDaily(cls):
  32. """
  33. 获取每日发布的视频 id 的状态
  34. :return:
  35. publish_time > {today_time_stamp} and
  36. """
  37. select_sql = f"""
  38. SELECT video_id
  39. FROM get_off_videos
  40. WHERE check_status = 0 and video_status = 1;
  41. """
  42. video_id_tuple = cls.db_client.select(select_sql)
  43. video_id_list = [i[0] for i in video_id_tuple]
  44. return video_id_list
  45. @classmethod
  46. def updateCheckStatus(cls, vid_list):
  47. """
  48. :param vid_list:
  49. :return:
  50. """
  51. sql = f"""
  52. UPDATE get_off_videos
  53. SET check_status = %s
  54. where video_id in %s;
  55. """
  56. cls.db_client.update(
  57. sql=sql,
  58. params=(1, tuple(vid_list))
  59. )
  60. print("更新 check_status 成功")
  61. @classmethod
  62. def deal(cls):
  63. """
  64. Deal Function
  65. :return:
  66. """
  67. def chunk_iterator(arr, chunk_size):
  68. """生成器函数,将数组分组成指定大小的chunks"""
  69. for i in range(0, len(arr), chunk_size):
  70. yield arr[i:i + chunk_size]
  71. video_id_list = cls.getPublishedVideoIdsDaily()
  72. video_chunks = chunk_iterator(video_id_list, 10)
  73. bad_count = 0
  74. for video_temp in video_chunks:
  75. bad_id_list = cls.getVideoListStatus(video_temp)
  76. fail_list = []
  77. if bad_id_list:
  78. bad_count += len(bad_id_list)
  79. for bad_id in tqdm(bad_id_list):
  80. response = cls.pq_api.changeVideoStatus(bad_id)
  81. if not response:
  82. fail_list.append(bad_id)
  83. if fail_list:
  84. bot(
  85. title="修改视频状态失败",
  86. detail=fail_list
  87. )
  88. cls.updateCheckStatus(video_temp)
  89. print("total", len(video_id_list))
  90. print("bad_total", bad_count)
  91. @classmethod
  92. def closeConnection(cls):
  93. """
  94. 关闭连接
  95. :return:
  96. """
  97. cls.db_client.close()
  98. if __name__ == '__main__':
  99. while True:
  100. """
  101. 每次任务重新连接数据库,处理完之后关闭数据库连接
  102. """
  103. VM = VideoStatusManager()
  104. VM.deal()
  105. VM.closeConnection()
  106. time.sleep(10 * 60)