职贝云数AI新零售门户

标题: pten:一个方便快捷运用企业微信API的python工具库 [打印本页]

作者: kGADorA3    时间: 2025-3-14 01:41
标题: pten:一个方便快捷运用企业微信API的python工具库
pten 是一个方便快捷运用企业微信API的python工具库.

github: https://github.com/bendell02/pten
gitee: https://gitee.com/bendell02/pten
1. 安装

pip install pten

或者源码安装
2. 基础运用 -- 以运用企业微信机器人发送音讯为例

2.1 设置配置文件


配置文件默许途径为 pten_keys.ini,也可以经过 keys_filepath 参数指定配置文件途径。 配置文件残缺内容请参考[配置文件](#3. 配置文件),并非一切字段都需求设置,根据本人需求配置即可。
比如假如只用企业微信机器人,只需配置 ww的webhook_key字段即可。
[ww]
webhook_key=7ande764-52a4-43d7-a252-05e8abcdb863
2.2 末尾运用

from pten.wwmessager import BotMsgSender

bot = BotMsgSender() # 默许运用 pten_keys.ini 配置文件
# bot = BotMsgSender("another_pten_keys.ini")

# 发送文本音讯
response = bot.send_text("hello world")

# 发送markdown音讯
markdown_content = '<font color="info">Hello world</font>'
response = bot.send_markdown(markdown_content)

# 发送图片音讯
image_path = "sample_image.png"
response = bot.send_image(image_path)

# 还可发送语音音讯、图文音讯、文件音讯等
3. 配置文件


并非一切字段都需求设置,按需传入
3.1 残缺配置文件样例

[ww]
app_aes_key=9z1Cj9cSd7WtEV3hOWo5iMQlFkSP9Td1ejzsV9WhCmO
app_agentid=1000005
app_secret=jVJF_EBWCVA_KVi_89YnY1T1bPD8-0PdqQ2rXc_Pgmj5
app_token=zJdPmXg8E4J1mMdnzP8d
contact_sync_secret=G4PC19fIwfsykabdv_drNVlOIe_crBvay3sUX8DhGss
corpid=wwdb63ff5ae01cd4b4
webhook_key=7ande764-52a4-43d7-a252-05e8abcdb863

[globals]
debug_mode=False

[proxies]
http=http://xxx:xxx@xxx.xxx.xxx.xxx:8888
https=http://xxx:xxx@xxx.xxx.xxx.xxx:8888

[notice]
;ai
deepseek_api_key=sk-0a6e5b4e8b4c0e1a5b6b8e0e4d5aefb
;weather
seniverse_api_key=v5bFw3o1pSmbGvuEN

3.2 配置文件字段阐明

section字段称号字段阐明
wwapp_aes_key运用的aes_key。运用收发音讯加解密时运用

app_agentid运用的agentid。运用发音讯时运用

app_secret运用的secret。服务端API获取access_token时需求运用

app_token运用的token。运用收发音讯加解密时运用

contact_sync_secret通讯录的secret。运用通讯录模块时部分API需求运用该secret。经过Contact的contact_sync_secret参数传入

corpidcorpid。服务端API获取access_token时需求运用

webhook_key企业微信机器人的webhook_key。运用机器人发音讯时需求运用
globalsdebug_mode设置为True时开启调试形式,多一些调试信息
proxieshttp设置http代理。需求走代理时设置即可

https设置https代理。需求走代理时设置即可
noticedeepseek_api_keydeepseek的api_key。运用Deepseek类回答一些成绩时可传入

seniverse_api_key心知天气的api_key。运用Weather类获取天气时可传入


由于企业微信API是需求配置可信ip,只要可信ip才能调用API。假如本地网络的ip常常变,那么每次调用API都需求重新配置可信ip,比较费事。可以配置代理,让企业微信API调用时走代理,把代理的ip配置到可信ip里,这样就可以避免这个成绩。
4. 各个模块运用阐明

4.1 wwmessage 模块 : 发送机器人和运用音讯

4.1.1 机器人发送音讯

from pten.wwmessager import BotMsgSender

bot = BotMsgSender() # 默许运用 pten_keys.ini 配置文件

# 发送文本音讯
response = bot.send_text("hello world")

# 还可发送markdown音讯、图片音讯、语音音讯、图文音讯、文件音讯等
4.1.2 运用发送音讯

from pten.wwmessager import AppMsgSender

app = AppMsgSender()

# 发送文本音讯
response = app.send_text("hello world from app")

# 还可发送markdown音讯、图片音讯、语音音讯、图文音讯、文件音讯、模板卡片音讯等
4.2 notice 模块 : 告诉功能

4.2.1 获取天气并告诉


可配置经过机器人或者运用发送告诉,默许打印在控制台
from pten.notice import Weather
from pten.wwmessager import BotMsgSender

weather = Weather()
bot = BotMsgSender()

# 配置经过机器人来发送告诉
weather.set_report_func(bot.send_text)

# 添加要获取天气的城市,可添加多个
weather.add_city("深圳", "Shenzhen")

# 发送天气告诉,可经过apscheduler定时调用,每天早上告诉天气信息
weather.report_weather()
4.2.2 生日提示

from pten.notice import Birthday
from pten.wwmessager import BotMsgSender

from apscheduler.schedulers.blocking import BlockingScheduler

scheduler = BlockingScheduler()
birthday = Birthday()

# 设置定时器
birthday.set_scheduler(scheduler)

# 设置经过机器人来发送告诉
bot = BotMsgSender()
birthday.set_report_func(bot.send_text)

# 添加农历生日提示
birthday.add_lunar_schedule(3, 15, who="玛丽")
# 可定制提示内容,填写 greeting_words 参数
birthday.add_lunar_schedule(3, 15, who="玛丽", greeting_words="玛丽离开地球纪念日,生快!")

# 添加阳历生日提示
birthday.add_solar_schedule(1, 12, who="玛莉亚")

scheduler.start()
4.2.3 获取ai的回答

from pten.notice import Deepseek

deepseek = Deepseek()
content = deepseek.get_completion("简略引见一下牛顿")
4.3 wwcrypt 模块 : 加解密音讯


运用收发音讯加解密模块
from pten.keys import Keys
from pten.wwcrypt import WXBizMsgCrypt

keys = Keys()
CORP_ID = keys.get_key("ww", "corpid")
API_TOKEN = keys.get_key("ww", "app_token")
API_AES_KEY = keys.get_key("ww", "app_aes_key")
wxcpt = WXBizMsgCrypt(API_TOKEN, API_AES_KEY, CORP_ID)

# VerifyURL
# ...
ret, sEchoStr = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr)

# DecryptMsg
# ...
body = await request.body()
ret, sMsg = wxcpt.DecryptMsg(body.decode("utf-8"), msg_signature, timestamp, nonce)

# EncryptMsg
# ...
ret, send_msg = wxcpt.EncryptMsg(sReplyMsg=sRespData, sNonce=nonce)

4.4 wwcontact 模块 : 通讯录相关API

from pten.wwcontact import Contact

contact = Contact("pten_keys.ini")

userid = "userid"
response = contact.get_user(userid)

department_id = "2"
response = contact.get_user_simple_list(department_id)

department_id = "2"
response = contact.get_user_list(department_id)

## 更多通讯录API可参考源码
4.5 wwdoc 模块 : 企业微信文档相关API

from pten.wwdoc import Doc

wwdoc = Doc("pten_keys.ini")

# 创建文档
doc_type = 10
doc_name = "test_smart_table2"
admin_users = ["user_a", "user_b"]
response = wwdoc.create_doc(doc_type, doc_name, admin_users=admin_users)

# 智能表格添加视图
docid = "your_docid"
sheet_id = "your_sheetid"
view_title = "view_title"
view_type = "VIEW_TYPE_GRID"
response = wwdoc.smartsheet_add_view(docid, sheet_id, view_title, view_type)

# 智能表格添加字段
fields = [{"field_title": "TITLE", "field_type": "FIELD_TYPE_TEXT"}]
response = wwdoc.smartsheet_add_fields(docid, sheet_id, fields)
assert_response(response)
fields = [
    {
        "field_title": "number",
        "field_type": "FIELD_TYPE_NUMBER",
        "property_number": {"decimal_places": 2, "use_separate": False},
    }
]
response = wwdoc.smartsheet_add_fields(docid, sheet_id, fields)

## 更多企业微信文档API可参考源码
4.6 wwapi 模块 : 通用API


假如在其他模块中找不到想调用的api,可经过此模块调用
4.6.1 BotApi  BOT_API_TYPE

from pten.wwapi import BotApi, BOT_API_TYPE

api = BotApi("pten_keys.ini")
response = api.http_call(
    BOT_API_TYPE["WEBHOOK_SEND"],
    {"msgtype": "text", "text": {"content": "hello from bot"}},
)
4.6.2 CorpApi  CORP_API_TYPE

from pten.wwapi import CorpApi, CORP_API_TYPE

api = CorpApi("pten_keys.ini")
response = api.http_call(CORP_API_TYPE["DEPARTMENT_LIST"])

corp_jsapi_ticket = api.get_corp_jsapi_ticket()
app_jsapi_ticket = api.get_app_jsapi_ticket()




欢迎光临 职贝云数AI新零售门户 (https://www.taojin168.com/cloud/) Powered by Discuz! X3.5