python 调用dingding的API进行消息发送

python 调用dingding的API进行消息发送

使用python的fastapi快速构建后端api接口

# pip install fastapi requests uvicorn
from typing import Set
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware
from pydantic import BaseModel
import json
import requests
#创建一个FastApi实例
app = FastAPI()
# fastapi 关闭接口文档
# app = FastAPI(docs_url=None, redoc_url=None)
#设置允许访问的域名
origins = ["*"] #也可以设置为"*",即为所有。
# 创建数据模型
# 数据模型
# {
#     "clientName": "GW",
#     "handlerName": "dingTalkRobotWebHookMessageHandler",
#     "parmaClassName": "com.test.mp.message.param.dingtalk.JqDingTalkRobotTemplateMessage",
#     "requestMap": {
#         "markdown": {
#             "title": "免费试用账户申请",
#             "text": "# 免费试用申请\n  ## 申请时间:2022/03/25 09:07:40 \n### 姓名:asdasd \n ### 电话:18222222222 \n ### 企业:asd \n ### 地址:asd\n"
#         },
#         "msgtype": "markdown",
#         "at": {
#             "atMobiles": ["@dasasd","@dsa","@sdad"]
#         }
#     },
#     "token": "4b917j8pzmwu5c6irelftvdn3q0gya2kxhsotdej6zzqxodnp5bmkx1uid8y"
# }
#设置跨域传参
app.add_middleware(
    CORSMiddleware, 
    allow_origins=origins,  #设置允许的origins来源
    allow_credentials=True,
    allow_methods=["*"],  # 设置允许跨域的http方法,比如 get、post、put等。
    allow_headers=["*"])  #允许跨域的headers,可以用来鉴别来源等作用。
# 定义数据模型
class Markdown(BaseModel):
    title: str = None
    text: str = None

class At(BaseModel):
    atMobiles: Set[str] = None  # 列表数据

class RequestMap(BaseModel):
    markdown: Markdown = None
    msgtype: str = None
    at: At = None

class Item(BaseModel):
    clientName: str = None
    handlerName: str = None
    parmaClassName: str = None
    requestMap: RequestMap = None
    token: str = None
def set_default(obj):
    if isinstance(obj, set):
        return list(obj)
    raise TypeError

@app.post("/send")
async def send_dingding(message: Item):
    msg = message.requestMap.dict()
    dt = json.dumps(msg, default=set_default)
    webhook = "https://oapi.dingtalk.com/robot/send?access_token=自己的token"
    header = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
    }
    message_json = json.dumps(msg, default=set_default)
    info = requests.post(url=webhook,data=message_json,headers=header)
    return {"status": info.text}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app='main:app', host="0.0.0.0", port=8000, reload=True, debug=True)
posted @ 2022-06-07 11:11  蒲公英PGY  阅读(272)  评论(0编辑  收藏  举报