videos_deal.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. """
  2. @author: luojunhui
  3. """
  4. from applications.functions import chunks, get_info_lists, title_filter
  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.pageIndex = params.get("page_index", 1)
  15. self.pageSize = params.get("page_size", 50)
  16. self.mysql_client = mysql_client
  17. def response_obj(self, data_list):
  18. """
  19. 处理 return 信息
  20. :param data_list:
  21. :return:video_id, title, view_, return_, video_url, rov
  22. """
  23. L = []
  24. sub_list = chunks(data_list, 20)
  25. for temp_list in sub_list:
  26. vid_list = [i[0] for i in temp_list]
  27. pq_response = get_info_lists(vid_list=vid_list)
  28. cover_list = [i['shareImgPath'] for i in pq_response['data']]
  29. publish_time_list = [i['gmtCreateTimestamp'] for i in pq_response['data']]
  30. for index, obj in enumerate(temp_list):
  31. temp = {
  32. "video_id": obj[0],
  33. "title": obj[1].replace('"', ''),
  34. "view": obj[2],
  35. "return": obj[3],
  36. "video_url": obj[4],
  37. "rov": obj[5],
  38. "video_text": "",
  39. "publish_time": publish_time_list[index],
  40. "cover": cover_list[index],
  41. "minigram_info": minigram_info
  42. }
  43. L.append(temp)
  44. response = {
  45. "status": "success",
  46. "cate": self.cate,
  47. "start_date": self.start_dt,
  48. "end_dt": self.end_dt,
  49. # "topN": self.topN,
  50. "data": L
  51. }
  52. return response
  53. async def deal(self):
  54. """
  55. deal function
  56. :return:
  57. """
  58. if self.cate == "video_return":
  59. return await self.deal_return()
  60. elif self.cate == "video_view":
  61. return await self.deal_view()
  62. elif self.cate == "video_rov":
  63. return await self.deal_rov()
  64. else:
  65. return {"error": "params is not correct"}
  66. async def deal_return(self):
  67. """
  68. return
  69. :return:
  70. """
  71. sql = f"""
  72. SELECT video_id, title, view_, return_, video_url, rov
  73. FROM top_return_daily
  74. WHERE dt >= '{self.start_dt}' and dt < '{self.end_dt}'
  75. ORDER BY return_ DESC
  76. LIMIT {self.pageSize}
  77. OFFSET {self.pageSize * (self.pageIndex - 1)};
  78. """
  79. result_list = await self.mysql_client.select(sql)
  80. title_list = [i[1] for i in result_list]
  81. score_list = title_filter(title_list)
  82. res = list(zip(score_list, title_list))
  83. result_list_final = []
  84. for index, item in enumerate(result_list):
  85. if score_list[index] > 0.4:
  86. result_list_final.append(item)
  87. return self.response_obj(result_list_final)
  88. async def deal_view(self):
  89. """
  90. view
  91. :return:
  92. """
  93. sql = f"""
  94. select video_id, title, view_, return_, video_url, rov
  95. from top_return_daily
  96. where dt >= '{self.start_dt}' and dt < '{self.end_dt}'
  97. order by view_ DESC
  98. limit {self.topN}
  99. """
  100. result_list = await self.mysql_client.select(sql)
  101. return self.response_obj(result_list)
  102. async def deal_rov(self):
  103. """
  104. rov
  105. :return:
  106. """
  107. sql = f"""
  108. select video_id, title, view_, return_, video_url, rov
  109. from top_return_daily
  110. where dt >= '{self.start_dt}' and dt < '{self.end_dt}'
  111. order by rov DESC
  112. limit {self.topN}
  113. """
  114. result_list = await self.mysql_client.select(sql)
  115. return self.response_obj(result_list)