桌面环境
- python3.6+
钉钉后台设置
登陆钉钉开放平台
https://open-dev.dingtalk.com/
创建应用
-
按顺序点击,进入创建应用界面
必填项:应用名称和应用描述。
显示已经创建成功的应用,其中AgentId、AppKey和AppSecret以后会用到,不能泄漏给别人
-
点击左侧开发管理,然后点击右上角修改按钮,添加IP白名单。
其中 服务器出口IP按以下方法查询:
打开ip138.com,复制红框中的数字,粘贴到服务器出口IP框内。
点击右上角保存
-
点击左侧权限管理,授权应用使用的范围
按下面的名称搜索并开通权限
-
点击左侧应用功能中的机器人与消息推送,创建机器人
只需要填写机器人名称和机器人图标,然后点击发布按钮,然后确认发布。
然后可以看到机器人配置下面有一个复制RobotCode的选项,点击可以复制RobotCode。
到此,应用和机器人创建完成
创建卡片模版
-
按图顺序打开创建卡片模版页面
-
选择预设模版,点击使用并确认。
然后我们就可以看到预览了
-
查看数据结构
上面的pv,users,comments,likes都是可以修改值的参数。chart是图表数据,我们用不到,就不用管。
钉钉后台设置,到此结束。
Python代码
import requests
import random
# ↓↓↓修改以下参数,保留引号!!↓↓↓
# -----------------------------------
# 应用的AppKey和AppSecret
appkey = "ding88rinjbedv5c7c4p"
appsecret = "ri9CMiEu2ktS1Vs2afKIGLDXv9Q3KWPogv2g3rEXBbORP-lTeTsUAExZE0jsFYwN"
# 卡片模版的模版ID
template_id = "79e24ee7-0f72-4b7d-a9b6-579363b9bed5"
# 机器人的RobotCode
robotcode = "ding88rinjbedv5c7c4p"
# -----------------------------------
# ↑↑↑修改以上参数,保留引号!!↑↑↑
header = {
'content-type': 'application/json; charset=UTF-8',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53'
}
# 获取token
def get_token():
url = "https://oapi.dingtalk.com/gettoken"
param = {
"appkey": appkey,
"appsecret": appsecret,
}
try:
res = requests.get(url,headers=header,params=param).json()
return res["access_token"]
except:
return "something went wrong"
# 根据手机号获取userID
def get_userid(mobile,token):
userid_list = []
url = f"https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token={token}"
for i in mobile:
data = {
"mobile": i
}
res = requests.post(url,json=data,headers=header).json()
if res["errcode"] == 0:
userid_list.append(res["result"]["userid"])
else:
return {"err":404,"emsg":"参数错误"}
return userid_list
# 创建outTrackId
def out_track_id():
chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
code = ""
for i in range(32):
code += random.choice(chars)
return code
# 卡片消息 todo
def send_card(userid,token):
url = "https://api.dingtalk.com/v1.0/im/interactiveCards/send"
header["x-acs-dingtalk-access-token"] = token
jsons = {
"cardTemplateId" : template_id,
"receiverUserIdList":userid,
"outTrackId" : out_track_id(),
"robotCode" : robotcode,
"conversationType" : 0,
"cardData" : {
"cardParamMap" : {
# 修改下面右侧的参数可以更改数据
# 保留双引号
"pv": "2000",
"users": "1000",
"comments": "500",
"likes": "200"
}
}
}
requests.post(url,json=jsons,headers=header)
def main():
token = get_token()
# 修改下面的手机号,保留引号
mobile = [
"15012341231",
"15012341232",
"15012341233",
]
userid_list = get_userid(mobile,token)
send_card(userid_list,token)
if __name__ == "__main__":
main()