#-*- coding: utf-8 -*-#@Time : 2020/11/22 12:32#@Author : chinablue#@File : dingtalk_helper.py
importrequestsimportobjectpath#在钉钉上创建应用后获取
AGENT_ID = 123456APP_KEY= "123456"APP_SECRET= "123456"dd_domain= "https://oapi.dingtalk.com"
classDingtalkHelper():def __init__(self):
self.access_token=self.get_token()#获取token
defget_token(self):
url= f"{dd_domain}/gettoken"data={"appkey": APP_KEY,"appsecret": APP_SECRET,
}
res_json= requests.get(url=url, params=data).json()return objectpath.Tree(res_json).execute("$.access_token")#获取部门列表
defget_depList(self):
url= f"{dd_domain}/department/list"data={"access_token": self.access_token,
}
res_json= requests.get(url=url, params=data).json()
departmentIds_list= list(objectpath.Tree(res_json).execute("$..*[@.name is not null].id"))returndepartmentIds_list#获取部门用户userid列表
defget_memberList(self, depId: str):
url= f"{dd_domain}/user/getDeptMember"data={"access_token": self.access_token,"deptId": depId,
}
res_json= requests.get(url=url, params=data).json()returnres_json#获取用户详情
defget_userInfo(self, userId):
url= f"{dd_domain}/user/get"data={"access_token": self.access_token,"userid": userId,
}
res_json= requests.get(url=url, params=data).json()
userIds_list= list(objectpath.Tree(res_json).execute("$..*[@.userid is not null].(mobile, userid)"))
userInfo=userIds_list[0]return {userInfo.get("mobile"): userInfo.get("userid")}#向企业个人发送钉钉通知
defsend_ddMsg(self, userId, build_url, build_result, project_num, build_person, build_time):
url= f"{dd_domain}/topapi/message/corpconversation/asyncsend_v2?access_token={self.access_token}"msg={"msgtype": "oa","oa": {"pc_message_url": build_url,"head": {"bgcolor": "FFBBBBBB","text": build_result
},"body": {"title": f"({build_result})Jenkins Pipeline","form": [
{"key": "项目编号:","value": f"{project_num}"},
{"key": "构建账号:","value": f"{build_person}"},
{"key": "构建时间:","value": f"{build_time}"},
{"key": "构建结果:","value": f"{build_result}"},
],"content": "","image": "@lADOADmaWMzazQKA",
}
}
}
data={"agent_id": AGENT_ID,"userid_list": userId,"msg": str(msg),
}#发送消息
requests.post(url=url, params=data)### 获取公司内所有人员的userId
defgetAll_userIds(self):
deptIds_list=self.get_depList()
userIds_list=list()for deptId indeptIds_list:
res_json=self.get_memberList(deptId)
userIds= objectpath.Tree(res_json).execute("$.userIds")
userIds_list.extend(userIds)returnuserIds_list### 获取公司内所有人员的mobile和userId的映射关系表
defgetAll_usersInfo(self):
userIds_list=self.getAll_userIds()
usersInfo_dict=dict()for userId inuserIds_list:
userInfo=self.get_userInfo(userId)
usersInfo_dict.update(userInfo)return usersInfo_dict