This commit is contained in:
1 parent
799099ff1c
commit
af3ff10ead
2 files changed
+96
-24
No files matched your search
+20
@@ -11,6 +11,9 @@ from lark_oapi.api.im.v1 import *
|
|||||||
from lark_oapi.api.bitable.v1 import *
|
from lark_oapi.api.bitable.v1 import *
|
||||||
|
|
||||||
|
|
||||||
|
from .utils import get_message_resource, upload_media
|
||||||
|
|
||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
app_id = os.environ["APP_ID"]
|
app_id = os.environ["APP_ID"]
|
||||||
@@ -22,8 +25,16 @@ verification_token = os.environ["VERIFICATION_TOKEN"]
|
|||||||
bitable_token = os.environ["BITABLE_TOKEN"]
|
bitable_token = os.environ["BITABLE_TOKEN"]
|
||||||
table_id = os.environ["TABLE_ID"]
|
table_id = os.environ["TABLE_ID"]
|
||||||
|
|
||||||
|
|
||||||
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
|
||||||
# 创建client
|
# 创建client
|
||||||
client = lark.Client.builder().app_id(app_id).app_secret(app_secret).build()
|
client = lark.Client.builder().app_id(app_id).app_secret(app_secret).build()
|
||||||
|
cache_dir = os.path.join(current_dir, "cache")
|
||||||
|
|
||||||
|
if not os.path.exists(cache_dir):
|
||||||
|
os.makedirs(cache_dir)
|
||||||
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
@@ -58,6 +69,15 @@ def do_p2_im_message_receive_v1(data: P2ImMessageReceiveV1) -> None:
|
|||||||
if images:
|
if images:
|
||||||
record["附件"] = [{"file_token": image} for image in images]
|
record["附件"] = [{"file_token": image} for image in images]
|
||||||
|
|
||||||
|
# 对 image_key 处理并并上传至多维表格
|
||||||
|
images_path = []
|
||||||
|
for image in images:
|
||||||
|
image_path = get_message_resource(client, message_id, image, "image", cache_dir)
|
||||||
|
print("下载文件成功:", image)
|
||||||
|
images_path.append(image_path)
|
||||||
|
file_token = upload_media(client, image_path, "bitable_file", bitable_token)
|
||||||
|
print("上传文件成功:", file_token)
|
||||||
|
|
||||||
add_record(record)
|
add_record(record)
|
||||||
|
|
||||||
# content = {"text": "反馈的问题已经记录到多维表格, 稍后有小伙伴跟进"}
|
# content = {"text": "反馈的问题已经记录到多维表格, 稍后有小伙伴跟进"}
|
||||||
|
|||||||
+76
-24
@@ -1,32 +1,84 @@
|
|||||||
|
import os
|
||||||
|
import json
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
|
|
||||||
|
import lark_oapi as lark
|
||||||
|
|
||||||
message_content = ""
|
from flask import Flask
|
||||||
images = []
|
from dotenv import load_dotenv
|
||||||
data = [
|
from lark_oapi.adapter.flask import *
|
||||||
[
|
from lark_oapi.api.im.v1 import *
|
||||||
{
|
from lark_oapi.api.bitable.v1 import *
|
||||||
"height": 756,
|
import lark_oapi as lark
|
||||||
"image_key": "img_v3_0277_2c2fbab4-8b13-4a6a-a273-e0d1d47b4ecg",
|
from lark_oapi.api.drive.v1 import *
|
||||||
"tag": "img",
|
|
||||||
"width": 529,
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{"style": [], "tag": "text", "text": "11111111"},
|
|
||||||
{"style": [], "tag": "at", "user_id": "@_user_1", "user_name": "官方应用指令"},
|
|
||||||
{"style": [], "tag": "text", "text": ""},
|
|
||||||
],
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
for item in chain.from_iterable(data):
|
def get_message_resource(client, message_id, file_key, file_type, save_dir):
|
||||||
if item.get("tag") == "text":
|
request: GetMessageResourceRequest = (
|
||||||
message_content += item["text"]
|
GetMessageResourceRequest.builder()
|
||||||
|
.message_id(message_id)
|
||||||
|
.file_key(file_key)
|
||||||
|
.type(file_type)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
|
||||||
if item.get("tag") == "img":
|
# 发起请求
|
||||||
images.append(item["image_key"])
|
response: GetMessageResourceResponse = client.im.v1.message_resource.get(request)
|
||||||
|
|
||||||
|
# 处理失败返回
|
||||||
|
if not response.success():
|
||||||
|
lark.logger.error(
|
||||||
|
f"client.im.v1.message_resource.get failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
# 处理业务结果
|
||||||
|
file_path = os.path.join(save_dir, response.file_name)
|
||||||
|
f = open(file_path, "wb")
|
||||||
|
f.write(response.file.read())
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
return response.file_name
|
||||||
|
|
||||||
|
|
||||||
print(message_content)
|
def upload_media(client, file_path, parent_type, parent_node):
|
||||||
print(images)
|
# 构造请求对象
|
||||||
|
_, filename = os.path.split(file_path)
|
||||||
|
file_size = os.path.getsize(file_path)
|
||||||
|
|
||||||
|
file_bin = open(file_path)
|
||||||
|
request: UploadAllMediaRequest = (
|
||||||
|
UploadAllMediaRequest.builder()
|
||||||
|
.request_body(
|
||||||
|
UploadAllMediaRequestBody.builder()
|
||||||
|
.file_name(filename)
|
||||||
|
.parent_type(parent_type)
|
||||||
|
.parent_node(parent_node)
|
||||||
|
.size(file_size)
|
||||||
|
.file(file_bin)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
|
||||||
|
file_bin.close()
|
||||||
|
|
||||||
|
# 发起请求
|
||||||
|
option = (
|
||||||
|
lark.RequestOption.builder()
|
||||||
|
.user_access_token("u-dF0r5rD5BcUFhORI38zmlk1l61TBghPzry00gl.82Haz")
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
response: UploadAllMediaResponse = client.drive.v1.media.upload_all(request, option)
|
||||||
|
|
||||||
|
# 处理失败返回
|
||||||
|
if not response.success():
|
||||||
|
lark.logger.error(
|
||||||
|
f"client.drive.v1.media.upload_all failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
# 处理业务结果
|
||||||
|
lark.logger.info(lark.JSON.marshal(response.data, indent=4))
|
||||||
|
|
||||||
|
return response.data.file_token
|
||||||
Reference in new issue
Block a user