123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- """
- @author: luojunhui
- """
- from applications.functions import chunks, get_info_lists, title_filter
- 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.pageIndex = params.get("page_index", 1)
- self.pageSize = params.get("page_size", 50)
- self.mysql_client = mysql_client
- def response_obj(self, data_list, data_list2):
- """
- 处理 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['shareImgPath'] 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].replace('"', ''),
- "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,
- "data": L,
- "next_page": True if data_list2 else False
- }
- 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:
- """
- this_pag_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.pageSize}
- OFFSET {self.pageSize * (self.pageIndex - 1)};
- """
- next_page_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.pageSize}
- OFFSET {self.pageSize * (self.pageIndex)};
- """
- response_01 = await self.mysql_client.select(this_pag_sql)
- response_02 = await self.mysql_client.select(next_page_sql)
- return self.response_obj(response_01, response_02)
- 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)
|