manager.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. """
  2. 往飞书内写数据
  3. """
  4. import numpy as np
  5. from feishu.feishu import Feishu
  6. from applications.mysql import Mysql
  7. class FeishuManager(object):
  8. """
  9. 写入飞书管理器
  10. """
  11. def __init__(self):
  12. self.F = Feishu()
  13. self.M = Mysql()
  14. self.map = {
  15. "产品功能实验": "ca8499",
  16. "产品实验": "gwzBOM",
  17. "广告实验": "Pt6JUj",
  18. "产品/广告实验": "avHzKO",
  19. "算法实验": "MFwgBr",
  20. "广告类型策略实验": "XCCAOP"
  21. }
  22. def select(self, minigram, date, task_name):
  23. """
  24. 从mysql中把数据读出来
  25. :param task_name: 实验名称
  26. :param minigram: 小程序名称
  27. :param date: 日期
  28. :return: data_list
  29. """
  30. select_sql = f"""SELECT * FROM we_analysis_results where mini_program = '{minigram}' and date = '{date}' and task_name = '{task_name}';"""
  31. we_tuple = self.M.select(select_sql)
  32. init_list = []
  33. for line in we_tuple:
  34. result = [i for i in ([line[3]] + list(line[5:]))]
  35. init_list.append(result)
  36. # We分析矩阵
  37. we_array = np.transpose(init_list)
  38. we_array_v2 = we_array[1:, :]
  39. # 去掉全部是0的行
  40. non_zero_rows = np.any(we_array_v2 != 0, axis=1)
  41. we_array_v3 = we_array_v2[non_zero_rows]
  42. we_list = we_array_v3.tolist()
  43. return we_list
  44. def insert(self, we_list, date, mini_program, task_name):
  45. """
  46. 处理矩阵,并且插入飞书表
  47. :param task_name: 实验名称
  48. :param date: 日期
  49. :param mini_program: 小程序
  50. :param we_list: we分析矩阵
  51. :return: None
  52. """
  53. rows = len(we_list)
  54. datas = [
  55. [date, 0, mini_program, "ab{}".format(i), "00:00", "", "实验名称"] + we_list[i]
  56. for i in range(rows)
  57. ]
  58. self.F.insert_value(
  59. sheet_id=self.map[task_name],
  60. values=datas,
  61. ranges="A4:AW24"
  62. )
  63. if __name__ == '__main__':
  64. Fm = FeishuManager()
  65. account_name = "票圈内容精选"
  66. date_str = "2024-01-17"
  67. temp = Fm.select(account_name, date_str)
  68. Fm.insert(temp, date_str, account_name)