feishu.py 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import json
  2. from utils import request_post, request_get
  3. from config import set_config
  4. config_ = set_config()
  5. class FeiShuHelper(object):
  6. @staticmethod
  7. def get_tenant_access_token():
  8. """获取自建应用的tenant_access_token"""
  9. url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
  10. headers = {"Content-Type": "application/json; charset=utf-8"}
  11. request_data = config_.FEISHU_TOKEN
  12. data = request_post(request_url=url, headers=headers, request_data=request_data)
  13. if data is not None:
  14. tenant_access_token = data.get('tenant_access_token')
  15. return tenant_access_token
  16. def get_data(self, spreadsheet_token, sheet_id):
  17. """读取电子表格数据"""
  18. tenant_access_token = self.get_tenant_access_token()
  19. url = f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{spreadsheet_token}/values_batch_get"
  20. headers = {
  21. "Content-Type": "application/json; charset=utf-8",
  22. "Authorization": f"Bearer {tenant_access_token}"
  23. }
  24. params = {
  25. 'ranges': sheet_id,
  26. }
  27. data = request_get(request_url=url, headers=headers, params=params)
  28. values = []
  29. if data is not None:
  30. try:
  31. values = data['data']['valueRanges'][0].get('values')
  32. except:
  33. values = []
  34. return values
  35. def data_to_feishu_sheet(self, sheet_token, sheet_id, data, start_row, start_column, end_column):
  36. tenant_access_token = self.get_tenant_access_token()
  37. url = f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{sheet_token}/values_prepend"
  38. headers = {
  39. "Content-Type": "application/json",
  40. "Authorization": f"Bearer {tenant_access_token}"
  41. }
  42. for i in range(len(data) // 10 + 1):
  43. values = data[i * 10:(i + 1) * 10]
  44. start_index = start_row + i * 10
  45. end_index = start_index + len(values)-1
  46. print(len(values), start_index, end_index)
  47. post_data = {
  48. "valueRange": {
  49. "range": f"{sheet_id}!{start_column}{start_index}:{end_column}{end_index}",
  50. "values": values
  51. }
  52. }
  53. r2 = request_post(request_url=url, headers=headers, request_data=post_data)
  54. # print(r2["msg"])
  55. print(r2)
  56. def update_values(self, sheet_token, sheet_id, data, start_row, start_column, end_column):
  57. """写入数据"""
  58. tenant_access_token = self.get_tenant_access_token()
  59. url = f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{sheet_token}/values_append"
  60. headers = {
  61. "Content-Type": "application/json",
  62. "Authorization": f"Bearer {tenant_access_token}"
  63. }
  64. for i in range(len(data) // 10 + 1):
  65. values = data[i * 10:(i + 1) * 10]
  66. start_index = start_row + i * 10
  67. end_index = start_index + len(values) - 1
  68. print(len(values), start_index, end_index)
  69. post_data = {
  70. "valueRange": {
  71. "range": f"{sheet_id}!{start_column}{start_index}:{end_column}{end_index}",
  72. "values": values
  73. }
  74. }
  75. r2 = request_post(request_url=url, headers=headers, request_data=post_data)
  76. # print(r2["msg"])
  77. print(r2)
  78. if __name__ == '__main__':
  79. # sheet_info = config_.SHEET_INFO['汉语常用词汇表']
  80. # FeiShuHelper().get_data(spreadsheet_token=sheet_info.get('spreadsheet_token'), sheet_id=sheet_info.get('sheet_id'))
  81. FeiShuHelper().data_to_feishu_sheet(sheet_token='DkiUsqwJ6hmBxstBYyEcNE4ante',
  82. sheet_id='08d4cc',
  83. data=[['1', 2, 3, 4]],
  84. start_row=1,
  85. start_column='A',
  86. end_column='D')