123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- """
- @author: luojunhui
- @description: 校验视频状态,若视频状态为不通过,则修改视频状态
- """
- import os
- import time
- import multiprocessing
- from tqdm import tqdm
- from applications import PQAPI, PQMySQL, bot
- class VideoStatusManager(object):
- """
- 视频状态校验 and 修改
- """
- db_client = PQMySQL()
- pq_api = PQAPI()
- @classmethod
- def getVideoListStatus(cls, videoList):
- """
- 获取视频 list 的状态,并且返回状态为不通过的视频 list
- :param videoList: 视频 id_list, 最长为 20
- :return: bad video list
- """
- response = cls.pq_api.getPQVideoListDetail(video_list=videoList)
- detail_list = response.get('data', [])
- if detail_list:
- bad_video_list = [i for i in detail_list if i['auditStatus'] != 5]
- bad_id_list = [i['id'] for i in bad_video_list]
- else:
- bad_id_list = []
- return bad_id_list
- @classmethod
- def getPublishedVideoIdsDaily(cls):
- """
- 获取每日发布的视频 id 的状态
- :return:
- publish_time > {today_time_stamp} and
- """
- select_sql = f"""
- SELECT video_id
- FROM get_off_videos
- WHERE check_status = 0 and video_status = 1;
- """
- video_id_tuple = cls.db_client.select(select_sql)
- video_id_list = [i[0] for i in video_id_tuple]
- return video_id_list
- @classmethod
- def updateCheckStatus(cls, vid_list):
- """
- :param vid_list:
- :return:
- """
- sql = f"""
- UPDATE get_off_videos
- SET check_status = %s
- where video_id in %s;
- """
- cls.db_client.update(
- sql=sql,
- params=(1, tuple(vid_list))
- )
- print("更新 check_status 成功")
- @classmethod
- def deal(cls):
- """
- Deal Function
- :return:
- """
- def chunk_iterator(arr, chunk_size):
- """生成器函数,将数组分组成指定大小的chunks"""
- for i in range(0, len(arr), chunk_size):
- yield arr[i:i + chunk_size]
- video_id_list = cls.getPublishedVideoIdsDaily()
- video_chunks = chunk_iterator(video_id_list, 10)
- bad_count = 0
- for video_temp in video_chunks:
- bad_id_list = cls.getVideoListStatus(video_temp)
- fail_list = []
- if bad_id_list:
- bad_count += len(bad_id_list)
- for bad_id in tqdm(bad_id_list):
- response = cls.pq_api.changeVideoStatus(bad_id)
- if not response:
- fail_list.append(bad_id)
- if fail_list:
- bot(
- title="修改视频状态失败",
- detail=fail_list
- )
- cls.updateCheckStatus(video_temp)
- print("total", len(video_id_list))
- print("bad_total", bad_count)
- def task():
- """
- task
- :return:
- """
- while True:
- VM = VideoStatusManager()
- VM.deal()
- # print(1)
- time.sleep(10 * 60)
- if __name__ == '__main__':
- process = None
- try:
- while True:
- if process is None or not process.is_alive():
- process = multiprocessing.Process(target=task)
- process.start()
- time.sleep(60)
- except KeyboardInterrupt:
- if process and process.is_alive():
- process.terminate()
|