checkVideoStatusDaily.py 3.4 KB

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