178 lines
5.8 KiB
Python
178 lines
5.8 KiB
Python
import json
|
|
import os
|
|
import http
|
|
import requests
|
|
import lark_oapi as lark
|
|
|
|
import lark_oapi as lark
|
|
from lark_oapi.api.contact.v3 import *
|
|
|
|
|
|
def search_department(client):
|
|
|
|
request: SearchDepartmentRequest = (
|
|
SearchDepartmentRequest.builder()
|
|
.page_size(20)
|
|
.request_body(SearchDepartmentRequestBody.builder().query("内容").build())
|
|
.build()
|
|
)
|
|
|
|
option = (
|
|
lark.RequestOption.builder()
|
|
.user_access_token("u-ddet2pz9R4ApKdl0ta.vAj1l6H_5ghX3h200ghK82KaD")
|
|
.build()
|
|
)
|
|
response: SearchDepartmentResponse = client.contact.v3.department.search(
|
|
request, option
|
|
)
|
|
|
|
if not response.success():
|
|
lark.logger.error(
|
|
f"client.contact.v3.department.search 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_access_token(app_id, app_secret):
|
|
url = "open.feishu.cn"
|
|
api = "/open-apis/auth/v3/app_access_token/internal"
|
|
payload = json.dumps({"app_id": app_id, "app_secret": app_secret})
|
|
headers = {"content-type": "application/json; charset=utf-8"}
|
|
|
|
conn = http.client.HTTPSConnection(url)
|
|
conn.request("POST", api, payload, headers)
|
|
token = json.loads(conn.getresponse().read()).get("app_access_token")
|
|
assert token != None, "请检查 app_id app_secret 是否正确"
|
|
return token
|
|
|
|
|
|
def batch_send_message(token):
|
|
host = "open.feishu.cn"
|
|
url = "/open-apis/message/v4/batch_send/"
|
|
headers = {
|
|
"Authorization": f"Bearer {token}",
|
|
"Content-Type": "application/json",
|
|
}
|
|
# open_ids
|
|
payload = {
|
|
"msg_type": {"card": {...}},
|
|
"content": "",
|
|
"user_ids": [""],
|
|
}
|
|
|
|
conn = http.client.HTTPSConnection(host)
|
|
conn.request("POST", url, json.dumps(payload), headers)
|
|
res = conn.getresponse().read()
|
|
res = json.loads(res)
|
|
print(res)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
app_id = os.environ["APP_ID"]
|
|
app_secret = os.environ["APP_SECRET"]
|
|
|
|
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"
|
|
)
|
|
|
|
app_list = [
|
|
"精选联盟批量邀约: 该在精选联盟设置筛选条件后并对达人批量邀约的功能",
|
|
"快手达人批量邀约: 在快手设置筛选条件后并对达人批量邀约的功能",
|
|
"视频号达人批量邀约: 在视频后台设置筛选条件并对达人批量邀约的功能",
|
|
]
|
|
|
|
activity_list = [
|
|
"批量数据抓取(Java): Java单次表格数据抓取,Java多页连续表格数据抓取",
|
|
"网页扩展操作: 智能日期选择器,滚动元素至可视区域,隐藏元素,显示元素...",
|
|
"PostgreSQL 扩展: 执行sql语句,建立连接,添加数据记录,批量添加记录...",
|
|
"天猫字体解密扩展: 获取天猫价格解密字典, 解密天猫价格内容",
|
|
]
|
|
# app_list = [
|
|
# "企微群发消息: 在文件传输助手中根据群名单逐条转发信息",
|
|
# "TEMU商品复制上架: TEMU商品多店铺一键铺货",
|
|
# "Instagram关键词抓取红人信息: 根据条件抓取红人邮箱以及其他基本信息",
|
|
# "TikTok关键词抓取红人信息: 根据条件筛选符合条件的红人,获取红人信息",
|
|
# "查集装箱实际到港时间-6大航司: 根据船公司和提单号在对应的官网查询到港时间",
|
|
# ]
|
|
|
|
# activity_list = [
|
|
# "云码验证码扩展: 通用轨迹验证, 通用单图滑块验证, 京东-旋转验证码",
|
|
# "Excel 扩展操作: 设置筛选器",
|
|
# ]
|
|
|
|
app_text = "\n".join(f"🔹{item}" for item in app_list).strip()
|
|
activity_text = "\n".join(f"🔸{item}" for item in activity_list).strip()
|
|
|
|
# 解决方案实施中心 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,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
# 构造请求对象
|
|
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()
|
|
)
|
|
|
|
# 发起请求
|
|
response: lark.BaseResponse = client.request(request)
|
|
|
|
# 处理失败返回
|
|
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))
|