【Python】监控某几个城市是否有疫情-微信通知
因家人、亲友分布在不同城市,平时需要关注,某几个城市疫情情况,故使用Python3编写,城市疫情巡查代码;
将Python代码部署在linux服务器中,设置定时检测,某城市是否有疫情(本土,无症状),如果有则使用企业微信应用进行通知;
个人微信通过关注自建的应用,可实现个人微信通知。
新建立的企业微信应用,如果想实现个人微信通知,使用个人微信关注一下,自己的应用的二维码:https://work.weixin.qq.com/wework_admin/frame#/profile/wxPlugin
个人微信效果,消息详情板式;
请将代码中的以下几个参数,更改为您应用所属的相应参数。
corpid:为企业ID
corpsecret:为企业自建应用Secret
agentid:企业微信应用ID
暂时不支持区、地级市、县(后期空了,会增加区、地级市、县的支持)
Python3代码如下:
import requests import json import datetime #人生短 行路难 日向晚 声声慢 get_haeders = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF'} # 提醒模式,0为确认和本土新增不等于0均提醒,1为本土新增,就提醒 pattern = 0 #首都、直辖市 city_list = ['上海', '北京', '重庆'] #某省份具体城市-不包含区、地级市,县 province_list = [["浙江", "杭州"], ["浙江", "温州"],["江西","南昌"], ["江苏", "南京"], ["江苏", "苏州"], ["广东", "广州"], ["广东", "深圳"], ["湖北", "武汉"], ["山东", "济南"], ["山东", "烟台"]] remind_data_list = [] # 直辖市检索,例如北京、重庆 def trend(city): # 直辖市,例如北京、重庆 trend_api = "https://voice.baidu.com/newpneumonia/getv2?from=mola-virus&stage=publish&target=trend&isCaseIn=1&area=%s&callback=jsonp_1658603969655_13080" % city try: # print('巡查城市:%s' % city) data = json.loads(requests.get(trend_api, headers=get_haeders).text[26:-2]) # 新增确诊-改为无症状 new_diagnosis_name = data['data'][0]["trend"]['list'][5]['name'] new_diagnosis = data['data'][0]["trend"]['list'][5]['data'][-1] # 新增本土 mainland_diagnosis_name = data['data'][0]["trend"]['list'][4]['name'] mainland_diagnosis = data['data'][0]["trend"]['list'][4]['data'][-1] # 模式判断,本土新增和确诊都不等于0 并且模式开启为0 if new_diagnosis > 0 or mainland_diagnosis > 0 and pattern == 0: city_data = "%s %s:%s %s:%s" % ( city, new_diagnosis_name, new_diagnosis, mainland_diagnosis_name, mainland_diagnosis) remind_data_list.append(city_data) # 模式判断,本土新增不等于0 并且模式开启为1 if mainland_diagnosis > 0 and pattern == 1: city_data = "%s:%s:%s" % (city, mainland_diagnosis_name, mainland_diagnosis) remind_data_list.append(city_data) except Exception as e: print(e) # 省份城市检索,例如,湖北-武汉 def trendCity(trendCity_data): # 省份城市,例如,湖北-武汉 province = trendCity_data[0] city = trendCity_data[1] trendCity_api = 'https://voice.baidu.com/newpneumonia/getv2?from=mola-virus&stage=publish&target=trendCity&area=%s-%s&callback=jsonp_1658605859355_94952' % ( province, city) try: data = json.loads(requests.get(trendCity_api, headers=get_haeders).text[26:-2]) # print(data['data'][0]) # # 新增无症状 new_diagnosis_name = data['data'][0]['trend']['list'][0]['name'] new_diagnosis = data['data'][0]["trend"]['list'][0]['data'][-1] # # 新增本土 mainland_diagnosis_name = data['data'][0]["trend"]['list'][1]['name'] mainland_diagnosis = data['data'][0]["trend"]['list'][1]['data'][-1] # 模式判断,本土新增和新增无症状都不等于0 并且模式开启为0 if new_diagnosis > 0 and mainland_diagnosis > 0 and pattern == 0: city_data = "%s %s:%s %s:%s" % ( city, new_diagnosis_name, new_diagnosis, mainland_diagnosis_name, mainland_diagnosis) remind_data_list.append(city_data) # 模式判断,本土新增不等于0 并且模式开启为1 if mainland_diagnosis > 0 and pattern == 1: city_data = "%s:%s:%s" % (city, mainland_diagnosis_name, mainland_diagnosis) remind_data_list.append(city_data) except Exception as e: print(e) def work_wechat_access(): # 企业微信应用生成access_token #企业ID,此连接查看:https://work.weixin.qq.com/wework_admin/frame#profile/enterprise corpid = '企业ID' #企业自建应用Secret,路径,企业微信pc端--应用管理--找到自建建立的应用--点击-在打开的页面会看到。获取企业自建应用Secret,需要登录企业微信app才可以看到 corpsecret = '企业自建应用Secret' work_access_token_api = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % ( corpid, corpsecret) work_access_token_data = requests.get(work_access_token_api).json() work_access_token = work_access_token_data['access_token'] return work_access_token def work_message_send(content_data): # 企业微信应用发送消息,发个某用户,如果发全员则需要touser的值为[url=home.php?mod=space&uid=358033]@all[/url] ,多个用户用逗号隔开; access_token = work_wechat_access() message_api = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token data = { "touser": "@all",#企业微信通讯录里面,点击某个成员资料,查看生成的成员帐号,一般情况为字母,此参数为@all则,应用可见范围的全员成员 "msgtype": "text", "agentid": 123456789,#你的企业微信应用ID,类型int(数字),路径,企业微信pc端--应用管理--找到自建建立的应用--点击-在打开的页面会看到AgentId。 "text": {"content": content_data}, "safe": 0, "enable_id_trans": 0, "enable_duplicate_check": 0 } requests.post(message_api, json=data) def log_time(): # 日志时间,格式:2022-7-26 4:32:25 data_time = datetime.datetime.now() str_time = "%s-%s-%s %s:%s:%s" % ( data_time.year, data_time.month, data_time.day, data_time.hour, data_time.minute, data_time.second) return str_time # 启动省份-城市查询 for i in range(len(province_list)): trendCity(province_list[i]) # 启动直辖市查询 for i in range(len(city_list)): trend(city_list[i]) if len(remind_data_list) != 0: # 微信提醒标题需要编码,已废弃 # remind_name=urllib.parse.quote('监控的城市,有疫情影响') remind_name = '监控的城市,有疫情影响' remind_data = '' # 如果监控的城市有疫情,则进行遍历,且进行微信提醒; for i in range(len(remind_data_list)): remind_data = remind_data + remind_data_list[i] + "\n" # 依托微信企业应用,实现个人微信提醒; work_message_data = remind_name + "\n" + remind_data + "日期:" + log_time() + "\n<a href=\"https://voice.baidu.com/act/newpneumonia/newpneumonia/\">点击查看全国疫情实时数据</a>" #如果没有提醒,请print下一行代码,如果返回的信息里面,有IP地址格式的东西 # 请设置应用企业可信IP,路径,企业微信pc端--应用管理--找到自建建立的应用--点击-在打开的页面,最下面会看到企业可信IP设置。 work_message_send(work_message_data) print('疫情巡查结束' + log_time())
#免责声明#
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!