""" @author: luojunhui """ from applications.functions import chunks, get_info_lists from applications.config import minigram_info class VideoDeal(object): """ Deal Request from outside """ def __init__(self, params, mysql_client): self.start_dt = params['start_date'] self.end_dt = params['end_date'] self.cate = params['cate'] self.topN = params['topN'] if params.get("topN") else 1 self.mysql_client = mysql_client def response_obj(self, data_list): """ 处理 return 信息 :param data_list: :return:video_id, title, view_, return_, video_url, rov """ L = [] sub_list = chunks(data_list, 20) for temp_list in sub_list: vid_list = [i[0] for i in temp_list] pq_response = get_info_lists(vid_list=vid_list) cover_list = [i['coverImg']['coverImgPath'] for i in pq_response['data']] publish_time_list = [i['gmtCreateTimestamp'] for i in pq_response['data']] for index, obj in enumerate(temp_list): temp = { "video_id": obj[0], "title": obj[1], "view": obj[2], "return": obj[3], "video_url": obj[4], "rov": obj[5], "video_text": "", "publish_time": publish_time_list[index], "cover": cover_list[index], "minigram_info": minigram_info } L.append(temp) response = { "status": "success", "cate": self.cate, "start_date": self.start_dt, "end_dt": self.end_dt, "topN": self.topN, "data": L } return response async def deal(self): """ deal function :return: """ if self.cate == "video_return": return await self.deal_return() elif self.cate == "video_view": return await self.deal_view() elif self.cate == "video_rov": return await self.deal_rov() else: return {"error": "params is not correct"} async def deal_return(self): """ return :return: """ sql = f""" select video_id, title, view_, return_, video_url, rov from top_return_daily where dt >= '{self.start_dt}' and dt < '{self.end_dt}' order by return_ DESC limit {self.topN} """ result_list = await self.mysql_client.select(sql) return self.response_obj(result_list) async def deal_view(self): """ view :return: """ sql = f""" select video_id, title, view_, return_, video_url, rov from top_return_daily where dt >= '{self.start_dt}' and dt < '{self.end_dt}' order by view_ DESC limit {self.topN} """ result_list = await self.mysql_client.select(sql) return self.response_obj(result_list) async def deal_rov(self): """ rov :return: """ sql = f""" select video_id, title, view_, return_, video_url, rov from top_return_daily where dt >= '{self.start_dt}' and dt < '{self.end_dt}' order by rov DESC limit {self.topN} """ result_list = await self.mysql_client.select(sql) return self.response_obj(result_list)