#!/usr/bin/env python
# -*- coding: utf-8 -*- import time
import requests
import json
import os
import traceback
import logging class WeChat:
def __init__(self):
self.CORPID = 'ww750dfdfde43613c3' #企业ID,在管理后台获取
self.CORPSECRET = 'rCRzAXI-r7KUZ6uL5HZYYLaqQw2volmnhQrdStu6Qrk'#自建应用的Secret,每个自建应用里都有单独的secret
self.AGENTID = '1000011' #应用ID,在后台应用中获取
self.TOUSER = "g1702543|g1702076|g1701677" # 接收者用户名,多个用户用|分割 def _get_access_token(self):
url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'
values = {'corpid': self.CORPID,
'corpsecret': self.CORPSECRET,
}
req = requests.post(url, params=values,proxies={'https':'https://10.191.131.20:3128'}) ##这次外网访问是通过代理访问的,所以需要proxies指向代理地址
data = json.loads(req.text)
return data["access_token"]
def get_access_token(self):
try:
with open('access_token.conf', 'r') as f:
t, access_token = f.read().split()
except:
with open('access_token.conf', 'w') as f:
access_token = self._get_access_token()
cur_time = time.time()
f.write('\t'.join([str(cur_time), access_token]))
return access_token
else:
cur_time = time.time()
if 0 < cur_time - float(t) < 7260:
return access_token
else:
with open('access_token.conf', 'w') as f:
access_token = self._get_access_token()
f.write('\t'.join([str(cur_time), access_token]))
return access_token def send_data(self, message):
send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.get_access_token()
send_values = {
"touser": self.TOUSER,
"msgtype": "text",
"agentid": self.AGENTID,
"text": {
"content": message
},
"safe": "0"
}
logging.basicConfig(filename='log.txt', level=logging.DEBUG,format='%(asctime)s - %(levelname)s - %(message)s')
try:
send_msges=(bytes(json.dumps(send_values)))
#respone = requests.post(send_url, send_msges)
respone = requests.post(send_url, send_msges,proxies={'https':'https://10.191.131.20:3128'})
#respone = requests.post(send_url, send_msges,proxies={'https':'https://10.146.3.177:3128'})
respone = respone.json() #当返回的数据是json串的时候直接用.json即可将respone转换成字典
return respone["errmsg"]
except:
logging.debug(traceback.format_exc()) if __name__ == '__main__':
wx = WeChat()
msg="""服务器10.134.167.126 EVMI JOBS计划任务异常告警提示如下:
TaskName名称 上次执行失败时间
"""
file= open('reulst_text.txt','r')
while True: ##循环读取文件内容
line= file.read()
msg += line.strip()+'\n' ##读取每一行的内容之后,换行在换行读取
if not line:
break ##遇到读取空行的时候,结束读取文件
wx.send_data(msg)
异常现象:此处使用了一个代理访问外网,之前此脚本无法通过计划任务发送出去,手动执行可以发送,原因是本地访问外网是通过代理访问的,解决方法是程序需要指向代理访问外网,一直导致请求失败,出现如下异常日志输出:
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='qyapi.weixin.qq.com', port=443): Max retries exceeded with url: /cgi-bin/message/send?access_token=9Uyg6rhaThMhcG0r256-KbrJqXr3j8M25kGXafcx7_GPJPMc8Q2fKd9hB4swwICuNTjt-z-fr4xMs0BJE4xTLsfK6JpGxjQegVHM11JgUNRrozVe6SwEcZVNywGHicYmjDzZpotA3Ksvn4Vx9S6F61RP1eQcBoA8vFyhIHxD5iThuJcPTzFzZd34HT37AGdcwtmQYGlg3q73WSQYgoHARg (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fd808dcc850>: Failed to establish a new connection: [Errno 111] Connection refused',))

企业微信公众号告警Python脚本的更多相关文章

  1. 在新浪SAE上搭建微信公众号的python应用

    微信公众平台的开发者文档https://www.w3cschool.cn/weixinkaifawendang/ python,flask,SAE(新浪云),搭建开发微信公众账号http://www. ...

  2. 个人微信公众号搭建Python实现 -接收和发送消息-基本说明与实现(14.2.1)

    @ 目录 1.原理 2.接收普通消息 3.接收代码普通消息代码实现 1.原理 2.接收普通消息 其他消息类似参考官方文档 3.接收代码普通消息代码实现 from flask import Flask, ...

  3. 个人微信公众号搭建Python实现 -个人公众号搭建-永久素材管理(14.3.5)

    @ 目录 1.说明 2.上传素材 3.获取素材列表 关于作者 1.说明 个人微信公众号开发的功能有限,因为很多权限没有,但支持上传永久素材,具体查看微信公众号文档 这里的请求都要将本地IP地址放到微信 ...

  4. 个人微信公众号搭建Python实现 -开发配置和微信服务器转入-配置说明(14.1.2)

    @ 目录 1.查看基本配置 2.修改服务器配置 3.当上面都配置好,点击提交 4.配置如下 1.查看基本配置 登录到微信公众号控制面板后点击基本配置 这里要讲的就是订阅号 前往注册微信公众号 2.修改 ...

  5. 个人微信公众号搭建Python实现 -个人公众号搭建-总结(14.3.6)

    @ 目录 1.主要技术:Flask,requests 2.实现的主要功能 3.目录说明 4.运行方式 关于作者 1.主要技术:Flask,requests requirements.txt如下 req ...

  6. 个人微信公众号搭建Python实现 -个人公众号搭建-处理消息和事件(14.3.4)

    @ 目录 1.消息处理 2.事件处理 3.返回处理 关于作者 1.消息处理 现在只处理text文本消息 没有关键字的就交给qingyunke机器人去应付,这是一个免费的对话api 从配置文件中读取关键 ...

  7. 个人微信公众号搭建Python实现 -个人公众号搭建-运行run方法的编写(14.3.3)

    @ 目录 1.主要逻辑 2.代码 关于作者 1.主要逻辑 使用的是flask服务器 就使用一个函数处理请求 第一个是验证服务器,返回微信服务器给的字符串就表示验证成功 第二是要处理微信服务器发送过来的 ...

  8. 个人微信公众号搭建Python实现 -个人公众号搭建-被动回复消息建模(14.3.2)

    @ 目录 1.阅读官方文档 2.思考 关于作者 1.阅读官方文档 点击进入微信官方开发者文档 接收普通消息 文本消息 图片消息 语言消息 视频消息 小视频消息 地理位置消息 链接消息 接收事件消息 关 ...

  9. 个人微信公众号搭建Python实现 -个人公众号搭建-构想(14.3.1)

    @ 目录 1.需求 2.怎么做 关于作者 1.需求 个人便捷工具 2.怎么做 针对个人未认证订阅号拥有以下权限 以及微信网页的一些权限,但是由于开发微信网页有限制 可定制功能只有被动回复,以及这个素材 ...

随机推荐

  1. Linux NSF网络共享盘

    服务器安装: yum -y install nfs-utils rpcbind 服务器配置 :vi /etc/exports 例: /root/docs  192.168.1.*(rw,sync,no ...

  2. 快速删除XMind指定层级的方法

    在使用xmind梳理知识点的时候,因为长期积累,单个文件的节点数可能超过1000个,层级可能超过6层.但在我们做文件分享时,可能只需要提供3层的思维导图,这时候就需要对子节点进行删除.原始的方法,就是 ...

  3. dhtmlxGantt独立安装的系统要求

    dhtmlxGantt库提供了使用导出作为在线服务从甘特图导出和导入数据的可能性. 您还可以通过在计算机上安装导出服务来本地导出甘特图.您需要确保系统满足系统要求才能使用导出模块: PNG / PDF ...

  4. Linux系统编程 —时序竞态

    时序竞态 什么是时序竞态?将同一个程序执行两次,正常情况下,前后两次执行得到的结果应该是一样的.但由于系统资源竞争的原因,前后两次执行的结果有可能得到不一样的结果,这个现象就是时序竞态. pause函 ...

  5. Ubuntu18.04修改apt-get源

    1)备份源文件: sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2)查看版本信息 如是Linux Mint等Ubuntu衍生版,执行: ...

  6. Hello World背后的事情

    Hello World是不少人学习C++的第一项内容,代码看似简单,很多东西却涉及根本 #include <iostream> using namespace std; int main( ...

  7. ansible-playbook定义变量与使用

    1. ansible-playbook变量定义与使用 命令行 在Inventory中定义 在Playbook中定义 在Role中定义 注册变量(register) 系统信息变量(facts) 2. 在 ...

  8. Fedora version history --- kernel version

    Fedora version history https://en.wikipedia.org/wiki/Fedora_version_history     Version (Code name)[ ...

  9. (转载)跟Classic ARM 处理器说拜拜——Atmel SAMA5D3 Xplained开发板评测

    2014 年 4 月 10 日 时间: 下午 3:15 作者: 幸得安然 电子产业的蓬勃发展带来了史无前例的生活.生产大跃进,但是,人们在享受发展喜悦的同时又不得不面临现实现状的囧境--在以移动电子设 ...

  10. reids等非关系数据库管理工具treesoft

    先下载treesoft 链接:https://pan.baidu.com/s/1o8UPK7lF0-WvE9afoR0sWw 提取码:3uc3 下载好之后进行解压文件 解压完成后目录结构 将webap ...