videos_deal.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. """
  2. @author: luojunhui
  3. """
  4. from applications.functions import chunks, get_info_lists
  5. from applications.config import minigram_info
  6. class VideoDeal(object):
  7. """
  8. Deal Request from outside
  9. """
  10. def __init__(self, params, mysql_client):
  11. self.start_dt = params['start_date']
  12. self.end_dt = params['end_date']
  13. self.cate = params['cate']
  14. self.topN = params['topN'] if params.get("topN") else 1
  15. self.mysql_client = mysql_client
  16. def response_obj(self, data_list):
  17. """
  18. 处理 return 信息
  19. :param data_list:
  20. :return:video_id, title, view_, return_, video_url, rov
  21. """
  22. L = []
  23. sub_list = chunks(data_list, 20)
  24. for temp_list in sub_list:
  25. vid_list = [i[0] for i in temp_list]
  26. pq_response = get_info_lists(vid_list=vid_list)
  27. cover_list = [i['coverImg']['coverImgPath'] for i in pq_response['data']]
  28. publish_time_list = [i['gmtCreateTimestamp'] for i in pq_response['data']]
  29. for index, obj in enumerate(temp_list):
  30. temp = {
  31. "video_id": obj[0],
  32. "title": obj[1],
  33. "view": obj[2],
  34. "return": obj[3],
  35. "video_url": obj[4],
  36. "rov": obj[5],
  37. "video_text": "",
  38. "publish_time": publish_time_list[index],
  39. "cover": cover_list[index],
  40. "minigram_info": minigram_info
  41. }
  42. L.append(temp)
  43. response = {
  44. "status": "success",
  45. "cate": self.cate,
  46. "start_date": self.start_dt,
  47. "end_dt": self.end_dt,
  48. "topN": self.topN,
  49. "data": L
  50. }
  51. return response
  52. async def deal(self):
  53. """
  54. deal function
  55. :return:
  56. """
  57. if self.cate == "video_return":
  58. return await self.deal_return()
  59. elif self.cate == "video_view":
  60. return await self.deal_view()
  61. elif self.cate == "video_rov":
  62. return await self.deal_rov()
  63. else:
  64. return {"error": "params is not correct"}
  65. async def deal_return(self):
  66. """
  67. return
  68. :return:
  69. """
  70. sql = f"""
  71. select video_id, title, view_, return_, video_url, rov
  72. from top_return_daily
  73. where dt >= '{self.start_dt}' and dt < '{self.end_dt}'
  74. order by return_ DESC
  75. limit {self.topN}
  76. """
  77. result_list = await self.mysql_client.select(sql)
  78. return self.response_obj(result_list)
  79. async def deal_view(self):
  80. """
  81. view
  82. :return:
  83. """
  84. sql = f"""
  85. select video_id, title, view_, return_, video_url, rov
  86. from top_return_daily
  87. where dt >= '{self.start_dt}' and dt < '{self.end_dt}'
  88. order by view_ DESC
  89. limit {self.topN}
  90. """
  91. result_list = await self.mysql_client.select(sql)
  92. return self.response_obj(result_list)
  93. async def deal_rov(self):
  94. """
  95. rov
  96. :return:
  97. """
  98. sql = f"""
  99. select video_id, title, view_, return_, video_url, rov
  100. from top_return_daily
  101. where dt >= '{self.start_dt}' and dt < '{self.end_dt}'
  102. order by rov DESC
  103. limit {self.topN}
  104. """
  105. result_list = await self.mysql_client.select(sql)
  106. return self.response_obj(result_list)