utils.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # -*- coding:utf-8 -*-
  2. """
  3. @author: isaacqyang
  4. @time: 2023/12/28
  5. @desc:
  6. """
  7. import json
  8. import os
  9. import time
  10. import lark_oapi as lark
  11. from lark_oapi.api.drive.v1 import CreateExportTaskRequest, ExportTask, CreateExportTaskResponse, GetExportTaskRequest, \
  12. GetExportTaskResponse, DownloadExportTaskRequest, DownloadExportTaskResponse
  13. from config import BaseConfig
  14. def f_doc_export(token:str) -> str:
  15. # 飞书在线文档转word
  16. app_id = BaseConfig.app_id
  17. app_secret = BaseConfig.app_secret
  18. word_save_dir = BaseConfig.word_save_dir
  19. client = lark.Client.builder() \
  20. .app_id(app_id) \
  21. .app_secret(app_secret) \
  22. .log_level(lark.LogLevel.DEBUG) \
  23. .build()
  24. # 构造请求对象
  25. request1: CreateExportTaskRequest = CreateExportTaskRequest.builder() \
  26. .request_body(ExportTask.builder()
  27. .file_extension("docx")
  28. .token(token)
  29. .type("docx")
  30. .build()) \
  31. .build()
  32. # 发起请求
  33. response1: CreateExportTaskResponse = client.drive.v1.export_task.create(request1)
  34. # 处理失败返回
  35. if not response1.success():
  36. lark.logger.error(
  37. f"client.drive.v1.export_task.create failed, code: {response1.code}, msg: {response1.msg}, log_id: {response1.get_log_id()}, resp: \n{json.dumps(json.loads(response1.raw.content), indent=4, ensure_ascii=False)}")
  38. return
  39. # 处理业务结果
  40. lark.logger.info(lark.JSON.marshal(response1.data, indent=4))
  41. ticket = response1.data.ticket
  42. time.sleep(5)
  43. # 构造请求对象
  44. request2: GetExportTaskRequest = GetExportTaskRequest.builder() \
  45. .ticket(ticket) \
  46. .token(token) \
  47. .build()
  48. # 发起请求
  49. response2: GetExportTaskResponse = client.drive.v1.export_task.get(request2)
  50. # 处理失败返回
  51. if not response2.success():
  52. lark.logger.error(
  53. f"client.drive.v1.export_task.get failed, code: {response2.code}, msg: {response2.msg}, log_id: {response2.get_log_id()}, resp: \n{json.dumps(json.loads(response2.raw.content), indent=4, ensure_ascii=False)}")
  54. return
  55. # 处理业务结果
  56. lark.logger.info(lark.JSON.marshal(response2.data, indent=4))
  57. file_token = response2.data.result.file_token
  58. # 构造请求对象
  59. request3: DownloadExportTaskRequest = DownloadExportTaskRequest.builder() \
  60. .file_token(file_token) \
  61. .build()
  62. # 发起请求
  63. response3: DownloadExportTaskResponse = client.drive.v1.export_task.download(request3)
  64. # 处理失败返回
  65. if not response3.success():
  66. lark.logger.error(
  67. f"client.drive.v1.export_task.download failed, code: {response3.code}, msg: {response3.msg}, log_id: {response3.get_log_id()}")
  68. return
  69. # 处理业务结果
  70. save_path = os.path.join(word_save_dir, response3.file_name)
  71. with open(save_path, "wb") as f:
  72. f.write(response3.file.read())
  73. return save_path
  74. if __name__ == "__main__":
  75. f_doc_export('YKNBdbs10oA3pCxTdnAczcvOnxc')