基于python实现安徽省天气预警信息地图可视化报警

import json
import requests
import simplejson
from pyecharts import Map
from CebUtil import DateUtil
from bs4 import BeautifulSoup#定义天气信息类
class WeatherClass:def __init__(self,CITY,LEVELCODE,SIGNALTYPE,QUXIAN):self.CITY = CITY #城市名称self.LEVELCODE = LEVELCODE #级别self.SIGNALTYPE = SIGNALTYPE #类型self.QUXIAN = QUXIAN #区县def get_AlarmData():# 获取预警列表headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"}response = requests.get(r'http://product.weather.com.cn/alarm/grepalarm_cn.php?_=1594949562492',headers = headers )response.raise_for_status()# 读取字符串,并转换为jsonAlarmData = response.contentAlarmData1 = str(AlarmData,'utf-8')AlarmData2 = AlarmData1[36:len(AlarmData1)-2]return AlarmData2def get_AlarmContent(url_alarm):# 获取预警详细信息,例如:url_alarm = url_id = '10122-20200718150000-0202.html',返回字段类型 <class 'dict'>headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"}response = requests.get(r'http://product.weather.com.cn/alarm/webdata/' + url_alarm, headers = headers)response.raise_for_status()Alarm_data = str(response.content,'utf-8')AlarmContent = Alarm_data[14:len(Alarm_data)]js_AlarmContent = json.loads(AlarmContent)return(js_AlarmContent)def get_AlarmGrade(AlarmId):# 获取预警ID,返回预警 kind、grade、kind+grade,例如:AlarmId = n = '0204'gradeObj = {"01":"蓝色","02":"黄色","03":"橙色","04":"红色","05":"白色"}kindObj = {"01":"台风","02":"暴雨","03":"暴雪","04":"寒潮","05":"大风","06":"沙尘暴","07":"高温","08":"干旱","09":"雷电",10:"冰雹",11:"霜冻",12:"大雾",13:"霾",14:"道路结冰",91:"寒冷",92:"灰霾",93:"雷雨大风",94:"森林火险",95:"降温",96:"道路冰雪",97:"干热风",98:"空气重污染",99:"低温",51:"海上大雾",52:"雷暴大风",53:"持续低温",54:"浓浮尘",55:"龙卷风",56:"低温冻害",57:"海上大风",58:"低温雨雪冰冻",59:"强对流",60:"臭氧",61:"大雪",62:"强降雨",63:"强降温",64:"雪灾",65:"森林(草原)火险",66:"雷暴",67:"严寒",68:"沙尘",69:"海上雷雨大风",70:"海上雷电",71:"海上台风",72:"低温"}if (int(AlarmId[0:2])<10):var1 = gradeObj[AlarmId[2:4]]var2 = kindObj[AlarmId[0:2]]else:var1 = gradeObj[AlarmId[2:4]]var2 = kindObj[int(AlarmId[0:2])]var3 = var2 + var1return(var2,var1,var3)def get_AnHui_AlarmList(AlarmDataAll):numAh = []numUrl = []strAl = AlarmDataAll[2:len(AlarmDataAll) - 2]numA = strAl.split("],[")for a in numA:if "安徽" in a:numAh.append(a)for b in numAh:url = str(b).split(",")strUrl = url[1]strUrl = strUrl[1 : len(strUrl)-1]numUrl.append(strUrl)return numUrl# 获取安徽区域天气预警列表
ah_alarm_list = get_AnHui_AlarmList(get_AlarmData())# 循环获取报警详情
numWClass = []
numWeather = []
for url_id in ah_alarm_list:# 赋值Content_list = get_AlarmContent(url_id)dictInfo = eval(str(Content_list))CITY = dictInfo['CITY']LEVELCODE = dictInfo['LEVELCODE']SIGNALTYPE = dictInfo['SIGNALTYPE']QUXIAN = dictInfo['STATIONNAME']print(dictInfo)if CITY != "":numWClass.append(WeatherClass(CITY, LEVELCODE, SIGNALTYPE, QUXIAN))if SIGNALTYPE not in numWeather:numWeather.append(SIGNALTYPE)#获取map需要的values
citys = ['合肥市','淮北市','亳州市','宿州市','蚌埠市','阜阳市','淮南市','滁州市','六安市','马鞍山市','芜湖市','宣城市','铜陵市','池州市','安庆市','黄山市']
def getData():values = []for city in citys:flg = 0for Cclass in numWClass:if city == Cclass.CITY :level = int(Cclass.LEVELCODE[1:2])if level >= flg:flg = levelif str(flg) == '4':flg_new = 0if str(flg) == '3':flg_new = 1if str(flg) == '2':flg_new = 2if str(flg) == '1':flg_new = 3if str(flg) == '0':flg_new = 4values.append(flg_new)return values#拼接底部的预警详细信息
strWeather = "<a style=\"font-size:40px\">"
for wea in numWeather:strWeather = strWeather + "<a style=\"font-size:40px\">" +wea + "</a>" + ":</br>"for cc in numWClass:if cc.SIGNALTYPE == wea:if cc.LEVELCODE == "04":if cc.QUXIAN != "":strWeather = strWeather + "<a style=\"background-color:#FF0000;font-size:40px\">" + cc.CITY + "." +cc.QUXIAN +"</a>"+ "&nbsp;&nbsp;&nbsp"else:strWeather = strWeather + "<a style=\"background-color:#FF0000;font-size:40px\">" + cc.CITY+"</a>"+ "&nbsp;&nbsp;&nbsp"if cc.LEVELCODE == "03":if cc.QUXIAN != "":strWeather = strWeather + "<a style=\"background-color:#FFA500;font-size:40px\">" + cc.CITY + "." +cc.QUXIAN +"</a>"+ "&nbsp;&nbsp;&nbsp"else:strWeather = strWeather + "<a style=\"background-color:#FFA500;font-size:40px\">" + cc.CITY +"</a>"+ "&nbsp;&nbsp;&nbsp"if cc.LEVELCODE == "02":if cc.QUXIAN != "":strWeather = strWeather + "<a style=\"background-color:#FFFF00;font-size:40px\">" + cc.CITY  + "." +cc.QUXIAN+"</a>"+ "&nbsp;&nbsp;&nbsp"else:strWeather = strWeather + "<a style=\"background-color:#FFFF00;font-size:40px\">" + cc.CITY +"</a>"+ "&nbsp;&nbsp;&nbsp"if cc.LEVELCODE == "01":if cc.QUXIAN != "":strWeather = strWeather + "<a style=\"background-color:#0000FF;font-size:40px\">" + cc.CITY + "." +cc.QUXIAN +"</a>"+ "&nbsp;&nbsp;&nbsp"else:strWeather = strWeather + "<a style=\"background-color:#0000FF;font-size:40px\">" + cc.CITY + "</a>"+ "&nbsp;&nbsp;&nbsp"if cc.LEVELCODE == "00":if cc.QUXIAN != "":strWeather = strWeather + "<a style=\"background-color:#FFFFFF;font-size:40px\">" + cc.CITY + "." +cc.QUXIAN +"</a>"+ "&nbsp;&nbsp;&nbsp"else:strWeather = strWeather + "<a style=\"background-color:#FFFFFF;font-size:40px\">" + cc.CITY + "</a>"+ "&nbsp;&nbsp;&nbsp"strWeather = strWeather + "</br>"strWeather = strWeather + "</a>"# 城市
color = ['#eee','#000']
values2 = getData()
map2 = Map("安徽省突发气象灾害预警信号",'            '+ DateUtil.getStrDate(), width=1200, height=1000)
map2.add('', citys, values2, visual_range=[1, 10], maptype='安徽', is_visualmap=True, visual_text_color='#000')
map2.render(path="D:\\anhui-weather.html")#打开文件,cNames读取所有行,储存在列表中
with open('D:\\anhui-weather.html','r', encoding='UTF-8') as f1:cNames = f1.readlines()for i in range(0,len(cNames)):if "</div>" in cNames[i]:cNames[i] = cNames[i] + strWeather#将处理过的cNames写入新的文件中
with open('D:\\安徽省突发气象灾害预警信号.html','w', encoding='UTF-8') as f2:f2.writelines(cNames)#获取微信提示信息
def getWeChat():gradeObj = {"01": "蓝色", "02": "黄色", "03": "橙色", "04": "红色", "05": "白色"}strReuslt = ''numCity = ['合肥市','芜湖市','马鞍山市','阜阳市','蚌埠市','滁州市','池州市','铜陵市','肥西县','肥东县','当涂县','临泉县']for CITY in numCity:for citys in numWClass:if CITY == citys.CITY:if citys.LEVELCODE > "02":if citys.QUXIAN == '':strReuslt = strReuslt + citys.CITY + ":" +citys.SIGNALTYPE + gradeObj[citys.LEVELCODE] + "预警" + ";   "if CITY == citys.QUXIAN:strReuslt = strReuslt + citys.CITY+ "." + citys.QUXIAN + ":" + citys.SIGNALTYPE + gradeObj[citys.LEVELCODE] + "预警" + ";   "return strReusltif __name__ == "__main__":print("生成html程序开始执行")print("生成html程序执行结束")
#程序运行结束以后再D盘等目录下会产生《安徽省突发气象灾害预警信号.html》

扩展:配合微信机器人实现定时任务,推送信息至微信指定联系人

import datetime
import threading
import importlib
import sys
from CebServices import Alarm_Content
from wxpy import *importlib.reload(sys)
bot = Nonedef login_wechat():global botbot = Bot()def send_news():if bot == None:login_wechat()my_friend = bot.friends().search(u'好友昵称')[0] #xxx表示微信昵称[0]  # xxx表示微信昵称strWeather = Alarm_Content.getWeChat()if "市" in strWeather or "县" in strWeather:my_friend.send("【合肥分行微信机器人天气预警平台】" + strWeather)from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime# BlockingScheduler
scheduler = BlockingScheduler()
scheduler.add_job(send_news, 'cron', day_of_week='0-6', hour=7, minute=51)
scheduler.add_job(send_news, 'cron', day_of_week='0-6', hour=8, minute=30)
scheduler.add_job(send_news, 'cron', day_of_week='0-6', hour=12, minute=00)
scheduler.add_job(send_news, 'cron', day_of_week='0-6', hour=20, minute=30)scheduler.start()

基于python实现安徽省天气预警信息地图可视化报警并推送信息至微信联系人相关推荐

  1. 基于 Python 的全国空气质量监测与可视化分析平台

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目背景 空气质量优劣程度与一个城市的综合竞争力密切相关,它直接影响到投资环境和居民健康,因此越来越受到政府和 ...

  2. 【Elasticsearch】基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化

    1.概述 转载:基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化 1.需求 有一批特定用途(文末揭晓)的 IP 地址. 想通过地图形式可视化展示 IP 地址对应的经纬 ...

  3. python微信公众号推送_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  4. python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  5. 【计算机专业毕设之基于python猫咪网爬虫大数据可视化分析系统-哔哩哔哩】 https://b23.tv/jRN6MVh

    [计算机专业毕设之基于python猫咪网爬虫大数据可视化分析系统-哔哩哔哩] https://b23.tv/jRN6MVh https://b23.tv/jRN6MVh

  6. python微信爬取教程_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  7. 除了 Websocket ,服务端还有什么办法能向浏览器主动推送信息?

    除了 Websocket ,服务端还有什么办法能向浏览器主动推送信息? 前言 端倪 Server-Sent Events 是什么? Server-Sent Events 与 Websocket 对比 ...

  8. SpringBoot2.0集成WebSocket,实现后台向前端推送信息

    SpringBoot+WebSocket集成 什么是WebSocket? 为什么需要 WebSocket? 前言 maven依赖 WebSocketConfig WebSocketServer 消息推 ...

  9. WinCC Alarmhelper,帮助将WinCC报警信息实时推送至用户微信端

    提示:WinCC报警即时提醒工具(WinCC AlarmHelper),可帮助自动化工程师快速实现WinCC监控系统下产生的故障.报警等信息,实时推送至指定用户的微信端,实现在公众号下的即时报警信息查 ...

最新文章

  1. fedora-10-i386下华为联网问题
  2. Android TextView 常用技巧
  3. 关于win7禁止标准用户安装软件 AppLocker使用
  4. win10电脑黑屏只有鼠标箭头_电脑开机进入系统后显示黑屏,只能看到一个鼠标指针,如何解决?...
  5. 自定义parallelStream的thread pool
  6. android 显示清除缓存
  7. Spring 应用开发框架 Spring Boot 2.3.0 最新版本发布
  8. C语言指针详解(通俗易懂)
  9. .net构建轻微博实时热搜新闻站
  10. GTX1060 Windows7/Windows8/Windows8.1 旧版显卡驱动下载链接
  11. python实现GCD算法
  12. 网易AI出席2018世界人工智能大会,带来沉浸式交互体验
  13. 40G SR4 vs 40G BIDI vs 40G UNIV:你选哪个?
  14. 电脑上可以连接网线可以上网,但是WiFi没有了
  15. Linux按键响应测试
  16. 令牌桶生成令牌_使用令牌的经典ASP登录系统
  17. 互联网日报 | 5月14日 星期五 | “辣条一哥”卫龙将赴港上市;B站付费用户破2000万;京东物流预计5月28日在港上市...
  18. angularjs2使用magnifier图片展示插件
  19. 算法入门练习2023/3/4
  20. 病毒及攻击防御手册之四

热门文章

  1. 5月26日来IGS大会腾讯云游戏新文娱分论坛和TcaplusDB约会吧!
  2. 分享60个PHP源码,总有一款适合您
  3. 蛋花花:人工智能对于绿色发展的意义
  4. 今天第一天上班,下了大雪,希望在新的一年里瑞雪兆丰年!
  5. 设置页面图标和动态title
  6. 统一NER模型【W2NER】的中文效果测试(含代码)
  7. 侯捷C++课程笔记02: 面向对象高级编程(下)
  8. 原始股的封闭期是多久 没有具体的时间规定
  9. SNS(社会性网络服务)
  10. cocos2dx中的内存管理