这两天有一个需求需要用到钉钉机器人,这边打开钉钉开发者后台看到新的推送方式
好 看起来挺好玩的 所以试一试。
首先我们这边有一个服务是将A的数据同步到B,但是这个过程中如果修改了B的内容将会因为同步机制问题导致我们在B的修改无效,所以这边写一个小机器人给业务那边方便开启和关闭服务(后台的界面不能给 因为数据库的账号密码都是明文)
这个二开的服务呢是靠windows服务来控制的,首先想是不是可以让开发给个可以控制开关的接口。但是这个开发呢,也是外面请的,有可能太麻烦对方了。所以我这边想到现在反正都可以ssh连设备,就用ssh登录以后使用cmd命令来控制服务的启动和关闭就ok了。
确定了方向那就先写一下功能的部分,ssh连接并执行命令很常见了,去抄一点代码。
pythonimport paramiko
class SCStatus():
def __init__(self,hostname,username,password,port=22) -> None:
self.ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(hostname=hostname, port=port, username=username, password=password)
def runCMD(self, com):
stdin, stdout, stderr = self.ssh.exec_command(com)
stdout = stdout.read()
stderr = stderr.read()
if stdout:
return 1,stdout.decode("GBK")
return 0,stderr.decode("GBK")
这边一开始是在win环境下测试的 最后两行写的decode("ansi"),但是要注意,在linux环境中是没有这种编码方式的,需要写成GBK。 具体业务部分就不展示了,无非就是实例化以后调用runCMD来进行命令执行。 ssh连上cmd后控制服务可以通过以下命令实现
cmd# 确认状态 sc query {服务名} # 启动服务 sc start {服务名} # 关闭服务 sc stop {服务名}
后面就是调用钉钉机器人的部分了
Github链接 这是官方提供的Python指引,估计是新功能所以也没有其他python文档可以看了。官方功能介绍中都是java的示例。那我就找一个example的改一下用用就好了。
不过官方的说法,这个JDK还是以接收为主。高级的卡片等发送方式还是需要用openAPI进行。