diff --git a/app/__init__.py b/app/__init__.py index 385ecca..162a7a2 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -79,7 +79,7 @@ def do_bitable_record_add(data) -> None: table_id = event.get("table_id") action_list = event.get("action_list") - actions_name = [action.get("action") for action in action_list] + actions_name = [action.get("action") for action in action_list] target_actions = ["record_edited", "record_added"] @@ -87,7 +87,7 @@ def do_bitable_record_add(data) -> None: action for action in action_list if action.get("action") == "record_edited" ] - if not( set(target_actions) <= set(actions_name)): + if not (set(target_actions) <= set(actions_name)): return if table_id != "tblESHsFZwtiFROB": @@ -103,14 +103,15 @@ def do_bitable_record_add(data) -> None: action_data = {} for field in after_value: + tmp = "".join([item["text"] for item in json.loads(field.get("field_value"))]) if field.get("field_id") == "fldIV2G9lv": - action_data["title"] = field.get("field_value") + action_data["title"] = tmp if field.get("field_id") == "fldk5ImODy": - action_data["background"] = field.get("field_value") + action_data["background"] = tmp if field.get("field_id") == "fldfjXnFVa": - action_data["features"] = field.get("field_value") + action_data["features"] = tmp print(f"table_id: {table_id}") print(f"record_id: {record_id}") diff --git a/app/utils/feishu.py b/app/utils/feishu.py index 92188da..fb1eaa9 100644 --- a/app/utils/feishu.py +++ b/app/utils/feishu.py @@ -4,8 +4,11 @@ import http import requests import lark_oapi as lark +import lark_oapi as lark +from lark_oapi.api.docx.v1 import * import lark_oapi as lark from lark_oapi.api.contact.v3 import * +from lark_oapi.api.wiki.v2 import * def search_department(client): @@ -69,11 +72,199 @@ def batch_send_message(token): print(res) -if __name__ == "__main__": +def create_doc(client, space_id, parent_node_token, title): + # client = lark.Client.builder() \ + # .app_id("YOUR_APP_ID") \ + # .app_secret("YOUR_APP_SECRET") \ + # .log_level(lark.LogLevel.DEBUG) \ + # .build() + # 构造请求对象 + request: CreateSpaceNodeRequest = ( + CreateSpaceNodeRequest.builder() + .space_id(space_id) + .request_body( + Node.builder() + .obj_type("docx") + .parent_node_token(parent_node_token) + .node_type("origin") + .title(title) + .build() + ) + .build() + ) + + # 发起请求 + option = ( + lark.RequestOption.builder() + .user_access_token("u-drqxH7LHd2AECUzpR7iaIyh42SzMh0Dxgww0lgA024O4") + .build() + ) + response: CreateSpaceNodeResponse = client.wiki.v2.space_node.create( + request, option + ) + + # 处理失败返回 + if not response.success(): + lark.logger.error( + f"client.wiki.v2.space_node.create failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}" + ) + return + + # 处理业务结果 + lark.logger.info(lark.JSON.marshal(response.data, indent=4)) + + +def get_doc_block(client, document_id): + # 创建client + # 使用 user_access_token 需开启 token 配置, 并在 request_option 中配置 token + # 构造请求对象 + request: ListDocumentBlockRequest = ( + ListDocumentBlockRequest.builder() + .document_id(document_id) + .page_size(500) + .document_revision_id(-1) + .build() + ) + + # 发起请求 + option = ( + lark.RequestOption.builder() + .user_access_token("u-drqxH7LHd2AECUzpR7iaIyh42SzMh0Dxgww0lgA024O4") + .build() + ) + response: ListDocumentBlockResponse = client.docx.v1.document_block.list( + request, option + ) + + # 处理失败返回 + if not response.success(): + lark.logger.error( + f"client.docx.v1.document_block.list failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}" + ) + return + + # 处理业务结果 + lark.logger.info(lark.JSON.marshal(response.data, indent=4)) + + +def create_doc_block( + client, + document_id, + block_id, + background="", + features="", +): + + # 构造请求对象 + request: CreateDocumentBlockChildrenRequest = ( + CreateDocumentBlockChildrenRequest.builder() + .document_id(document_id) + .block_id(block_id) + .document_revision_id(-1) + .request_body( + CreateDocumentBlockChildrenRequestBody.builder() + .children( + [ + Block.builder() + .block_type(4) + .heading2( + Text.builder() + .elements( + [ + TextElement.builder() + .text_run(TextRun.builder().content("需求背景").build()) + .build(), + ] + ) + .build() + ) + .build(), + Block.builder() + .block_type(2) + .text( + Text.builder() + .style(TextStyle.builder().build()) + .elements( + [ + TextElement.builder() + .text_run(TextRun.builder().content(background).build()) + .build(), + ] + ) + .build() + ) + .build(), + Block.builder() + .block_type(4) + .heading2( + Text.builder() + .elements( + [ + TextElement.builder() + .text_run(TextRun.builder().content("需求功能").build()) + .build(), + ] + ) + .build() + ) + .build(), + Block.builder() + .block_type(2) + .text( + Text.builder() + .style(TextStyle.builder().build()) + .elements( + [ + TextElement.builder() + .text_run(TextRun.builder().content(features).build()) + .build(), + ] + ) + .build() + ) + .build(), + ] + ) + .index(0) + .build() + ) + .build() + ) + + # 发起请求 + option = ( + lark.RequestOption.builder() + .user_access_token("u-drqxH7LHd2AECUzpR7iaIyh42SzMh0Dxgww0lgA024O4") + .build() + ) + response: CreateDocumentBlockChildrenResponse = ( + client.docx.v1.document_block_children.create(request, option) + ) + + # 处理失败返回 + if not response.success(): + lark.logger.error( + f"client.docx.v1.document_block_children.create failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}" + ) + return + + # 处理业务结果 + lark.logger.info(lark.JSON.marshal(response.data, indent=4)) + + +if __name__ == "__main__": app_id = os.environ["APP_ID"] app_secret = os.environ["APP_SECRET"] + data = { + "title": '[{"type":"text","text":"测试"}]', + "background": '[{"type":"text","text":"测试"}]', + "features": '[{"type":"text","text":"测试"}]', + } + + + client = ( lark.Client.builder() .app_id(app_id) @@ -81,97 +272,118 @@ if __name__ == "__main__": .log_level(lark.LogLevel.DEBUG) .build() ) + # folder_token = "ADkFwlLhmiLcqAk3QXLcZnHAnHf" + title = "测试" + space_id = "7268552249415319554" + parent_node_token = "ADkFwlLhmiLcqAk3QXLcZnHAnHf" + # create_doc(client, space_id, parent_node_token, title) + doc_id = "N81ldXDuuoxtXZxUz55coxApnOh" + # get_doc_block(client, doc_id) - detail_url = ( - "https://ying-dao.feishu.cn/wiki/EdHQwOhV9iLuh7kZTkwcX6OfnIe?from=from_copylink" - ) + block_id = "N81ldXDuuoxtXZxUz55coxApnOh" - create_demand_url = ( - "https://ying-dao.feishu.cn/share/base/form/shrcnEI7Hhnhfdh0OXTyQcwGzEb" - ) + create_doc_block(client, doc_id, block_id) - app_list = [ - "精选联盟批量邀约: 该在精选联盟设置筛选条件后并对达人批量邀约的功能", - "快手达人批量邀约: 在快手设置筛选条件后并对达人批量邀约的功能", - "视频号达人批量邀约: 在视频后台设置筛选条件并对达人批量邀约的功能", - ] + pass + + # client = ( + # lark.Client.builder() + # .app_id(app_id) + # .app_secret(app_secret) + # .log_level(lark.LogLevel.DEBUG) + # .build() + # ) + + # detail_url = ( + # "https://ying-dao.feishu.cn/wiki/EdHQwOhV9iLuh7kZTkwcX6OfnIe?from=from_copylink" + # ) + + # create_demand_url = ( + # "https://ying-dao.feishu.cn/share/base/form/shrcnEI7Hhnhfdh0OXTyQcwGzEb" + # ) - activity_list = [ - "批量数据抓取(Java): Java单次表格数据抓取,Java多页连续表格数据抓取", - "网页扩展操作: 智能日期选择器,滚动元素至可视区域,隐藏元素,显示元素...", - "PostgreSQL 扩展: 执行sql语句,建立连接,添加数据记录,批量添加记录...", - "天猫字体解密扩展: 获取天猫价格解密字典, 解密天猫价格内容", - ] # app_list = [ - # "企微群发消息: 在文件传输助手中根据群名单逐条转发信息", - # "TEMU商品复制上架: TEMU商品多店铺一键铺货", - # "Instagram关键词抓取红人信息: 根据条件抓取红人邮箱以及其他基本信息", - # "TikTok关键词抓取红人信息: 根据条件筛选符合条件的红人,获取红人信息", - # "查集装箱实际到港时间-6大航司: 根据船公司和提单号在对应的官网查询到港时间", + # "精选联盟批量邀约: 该在精选联盟设置筛选条件后并对达人批量邀约的功能", + # "快手达人批量邀约: 在快手设置筛选条件后并对达人批量邀约的功能", + # "视频号达人批量邀约: 在视频后台设置筛选条件并对达人批量邀约的功能", # ] # activity_list = [ - # "云码验证码扩展: 通用轨迹验证, 通用单图滑块验证, 京东-旋转验证码", - # "Excel 扩展操作: 设置筛选器", + # "批量数据抓取(Java): Java单次表格数据抓取,Java多页连续表格数据抓取", + # "网页扩展操作: 智能日期选择器,滚动元素至可视区域,隐藏元素,显示元素...", + # "PostgreSQL 扩展: 执行sql语句,建立连接,添加数据记录,批量添加记录...", + # "天猫字体解密扩展: 获取天猫价格解密字典, 解密天猫价格内容", # ] + # # app_list = [ + # # "企微群发消息: 在文件传输助手中根据群名单逐条转发信息", + # # "TEMU商品复制上架: TEMU商品多店铺一键铺货", + # # "Instagram关键词抓取红人信息: 根据条件抓取红人邮箱以及其他基本信息", + # # "TikTok关键词抓取红人信息: 根据条件筛选符合条件的红人,获取红人信息", + # # "查集装箱实际到港时间-6大航司: 根据船公司和提单号在对应的官网查询到港时间", + # # ] - app_text = "\n".join(f"🔹{item}" for item in app_list).strip() - activity_text = "\n".join(f"🔸{item}" for item in activity_list).strip() + # # activity_list = [ + # # "云码验证码扩展: 通用轨迹验证, 通用单图滑块验证, 京东-旋转验证码", + # # "Excel 扩展操作: 设置筛选器", + # # ] - # 解决方案实施中心 4gge82cgb18f52af - # 电商事业部 8a612b6c9184b118 - # 技术支持部 d7g1374b1238d267 - # 杭州内容组 9fg37g65b1b5b24e - # Uerid 7g3756f4 - # "user_ids": [ - # "7g3756f4", - # ], - pyload = { - "department_ids": ["4gge82cgb18f52af", "8a612b6c9184b118", "d7g1374b1238d267"], - "user_ids": [], - "msg_type": "interactive", - "card": { - "type": "template", - "data": { - "template_id": "ctp_AAikuuqPwN0o", - "template_variable": { - "app_text": app_text, - "activity_text": activity_text, - "detail_url": { - "pc_url": "", - "android_url": "", - "ios_url": "", - "url": detail_url, - }, - "create_demand_url": { - "pc_url": "", - "android_url": "", - "ios_url": "", - "url": create_demand_url, - }, - }, - }, - }, - } + # app_text = "\n".join(f"🔹{item}" for item in app_list).strip() + # activity_text = "\n".join(f"🔸{item}" for item in activity_list).strip() - # 构造请求对象 - request: lark.BaseRequest = ( - lark.BaseRequest.builder() - .http_method(lark.HttpMethod.POST) - .uri("/open-apis/message/v4/batch_send/") - .token_types({lark.AccessTokenType.TENANT}) - .body(pyload) - .build() - ) + # # 解决方案实施中心 4gge82cgb18f52af + # # 电商事业部 8a612b6c9184b118 + # # 技术支持部 d7g1374b1238d267 + # # 杭州内容组 9fg37g65b1b5b24e + # # Uerid 7g3756f4 + # # "user_ids": [ + # # "7g3756f4", + # # ], + # pyload = { + # "department_ids": ["4gge82cgb18f52af", "8a612b6c9184b118", "d7g1374b1238d267"], + # "user_ids": [], + # "msg_type": "interactive", + # "card": { + # "type": "template", + # "data": { + # "template_id": "ctp_AAikuuqPwN0o", + # "template_variable": { + # "app_text": app_text, + # "activity_text": activity_text, + # "detail_url": { + # "pc_url": "", + # "android_url": "", + # "ios_url": "", + # "url": detail_url, + # }, + # "create_demand_url": { + # "pc_url": "", + # "android_url": "", + # "ios_url": "", + # "url": create_demand_url, + # }, + # }, + # }, + # }, + # } - # 发起请求 - response: lark.BaseResponse = client.request(request) + # # 构造请求对象 + # request: lark.BaseRequest = ( + # lark.BaseRequest.builder() + # .http_method(lark.HttpMethod.POST) + # .uri("/open-apis/message/v4/batch_send/") + # .token_types({lark.AccessTokenType.TENANT}) + # .body(pyload) + # .build() + # ) - # 处理失败返回 - if not response.success(): - lark.logger.error( - f"client.request failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}" - ) + # # 发起请求 + # response: lark.BaseResponse = client.request(request) - # 处理业务结果 - lark.logger.info(str(response.raw.content, lark.UTF_8)) + # # 处理失败返回 + # if not response.success(): + # lark.logger.error( + # f"client.request failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}" + # ) + + # # 处理业务结果 + # lark.logger.info(str(response.raw.content, lark.UTF_8))