#!/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',))

最新文章

  1. 【中文分词】最大熵马尔可夫模型MEMM
  2. 使用lua实现一个简单的事件派发器
  3. 一道原生js题目引发的思考(鼠标停留区块计时)
  4. phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护
  5. ECMAScript 6中的数组操作方法
  6. CRM 2013 Reporting Extensions for SSRS 安装及问题解决
  7. php pdo分页
  8. [java学习笔记]java语言核心----面向对象之this关键字
  9. Android 环境搭建 版本问题
  10. Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】
  11. JDK6 下载地址
  12. leetcode Count and Say python
  13. IOS 关于property的详细解法
  14. 【WPF】在新线程上打开窗口
  15. Mysql导入大文件报错(MySQL server has gone away(error 2006))
  16. NetBeans部署项目(Extjs)报错(二)
  17. Linux自动化命令工具expect
  18. 题解-PKUWC2018 Slay the Spire
  19. 【漏洞复现】ES File Explorer Open Port Vulnerability - CVE-2019-6447
  20. Ngine X 完全开发指南 读书笔记-前言

热门文章

  1. IPV6介绍已经IPV6改造基本步骤
  2. 063 01 Android 零基础入门 01 Java基础语法 08 Java方法 01 无参无返回值方法
  3. Python中matplotlib.pyplot.imshow画灰度图的多种方法
  4. C++字符串的输入输出整理
  5. JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中
  6. JavaScript打印给定区间年份的闰年
  7. 【Flutter Widgets大全】电子书开源
  8. rxjs入门4之rxjs模式设计
  9. git pull设置为无需密码
  10. 【git】关联本地仓库与远程仓库