使用Python实现个人天气预警提醒
前言
本着是使用树莓派做一个个人天气预报的,通过百度也看到很多大神使用各种各样的方法来实现,本着简单、免费的想法,我去弄了个高德的开发者账号(ps:其实就是懒,哈哈哈哈哈),这个账号认证后每天有 300000次,其实也够我们自己去使用了,哈哈哈哈!后面关于文本合成语音的部分,打算接入阿里、讯飞的api的,emmm有点贵,算了,使用第三方库讲究着用吧(ps:声音确实是好僵硬)!
准备
- 在这里,我们需要提前安装好requests库、pyttsx3库。
pip3 install requests
pip3 install pyttsx3
- 进入高德开发者平台,注册账号,按照流程创建一个应用(是web服务的api),此时就可以获取到一个
key
值,这个值在后面会用到,记得保存一下。 - 打开高德的api使用文档,好了,开始撸代码…
开始撸代码
这里我们有三个任务
- 获取当前地理位置
- 根据当前的地理位置来获取天气情况
- 将得到的文本数据使用语音合成出来
- 首先我们来看如何获取地理位置信息
这里我们可以使用web服务的api中的IP查询来获取到对应的城市名和城市的adcode编码
这里我们可以看下这张表
参数名
含义
规则说明
是否必须
缺省值
key
请求服务权限标识
用户在高德地图官网申请Web服务API类型KEY
必填
无
ip
ip地址
需要搜索的IP地址(仅支持国内)
若用户不填写IP,则取客户http之中的请求来进行定位
可选
无
sig
签名
选择数字签名认证的付费用户必填
可选
无
output
返回格式
可选值:JSON,XML
可选
JSON
名称
含义
规则说明
status
返回结果状态值
值为0或1,0表示失败;1表示成功
info
返回状态说明
返回状态说明,status为0时,info返回错误原因,否则返回“OK”。
infocode
状态码
返回状态说明,10000代表正确,详情参阅info状态表
province
省份名称
若为直辖市则显示直辖市名称;
如果在局域网 IP网段内,则返回“局域网”;
非法IP以及国外IP则返回空
city
城市名称
若为直辖市则显示直辖市名称;
如果为局域网网段内IP或者非法IP或国外IP,则返回空
adcode
城市的adcode编码
rectangle
所在城市矩形区域范围
所在城市范围的左下右上对标对
我们可以在使用时直接请求,此时可以获取到城市的adcode,那么我们直接调用返回结果即可。
def get_citycode(): # 获取当前位置编码 url = 'https://restapi.amap.com/v3/ip?' word = None try:r = requests.get(url, params=set_params(word))text = r.json()adcode = text['adcode'] finally:return adcode
- 获取地区天气情况
- 这里我们可以使用web服务的api中的天气查询来获取到对应的城市的天气,在api使用说明中明确表示,需要传入的参数至少有adcode哦!!好在我们之前已经获取到了。
- 开始请求数据,并处理返回的数据,这里我就取几项数据,具体可以自定义。
def get_weather(): # 获取当前位置天气 url = 'https://restapi.amap.com/v3/weather/weatherInfo?' word = get_citycode() weather_dict = {} try:r = requests.get(url, params=set_params(word))text = r.json()if text['info'] == 'OK':weather_dict['-'] = text['lives'][0]['city']weather_dict['天气'] = text['lives'][0]['weather']weather_dict['温度'] = text['lives'][0]['temperature']weather_dict['空气湿度'] = text['lives'][0]['humidity']weather_dict['风向'] = text['lives'][0]['winddirection']weather_dict['风力级别'] = text['lives'][0]['windpower'] finally:return weather_dict
- 开始语音合成处理
在这一步,需要使用到pyttsx3,查阅技术文档后,直接使用即可(ps:反正语音不是很好听,也就不做过多解释了,直接上代码)def read_data():# 阅读获取的文本weather = get_weather()engine = pyttsx3.init()rate = engine.getProperty('rate')engine.setProperty('rate', rate-10)engine.say(weather)engine.runAndWait()
- 补充,关于代码中set_params函数部分,可以这样写就行
def set_params(word): # 设置请求表单 if word == None:params = {'key':你自己的key,} else:params = {'key':你自己的key,'city':word,# base是获取当前天气,而all可以返回预报天气,哈哈哈自己慢慢玩。'extensions':'base',} return params
结语
想不到吧,这么快就结束了!!嘿嘿嘿嘿嘿,将代码移植到树莓派上,再写一个自动化脚本,就完事啦。
使用Python实现个人天气预警提醒相关推荐
- 基于python实现安徽省天气预警信息地图可视化报警并推送信息至微信联系人
基于python实现安徽省天气预警信息地图可视化报警 import json import requests import simplejson from pyecharts import Map f ...
- Python实现气象天气数据采集与分析【定时邮件发送最新天气提醒+基于时间轴制作Gif天气演变图】
天气预报可以说是我们每个人日常生活中都会接触到并关注的一件事情了,当前的天气预报技术不仅仅基于模式预报,也融入进了人工智能分析预测预报技术,准确度相较于以往还是有了很大的提升了的.今天我想基于气象局公 ...
- 高温来袭?通过python爬虫爬取天气预警信息
需求分析 最近一段时间,天气也是越来越热了,真正的进入了夏天了.可怕的故事是,现在才只有6月份呢,要是等到了7,8月份,不会是要更热吧? 一个小伙伴对此也深表赞同,"仙草哥哥,现在天气的温度 ...
- python写一个系统-使用Python写一个量化股票提醒系统
大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...
- 用python读取股票价格_使用Python写一个量化股票提醒系统
大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...
- python量化股票源码_使用Python写一个量化股票提醒系统
大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...
- python股票全套系统_熬了一晚上,小白用Python写了一个股票提醒系统
码农小马七夕节去相亲了,见了一个不错的姑娘,长的很是甜美!聊着聊着很投缘!通过介绍人了解到,对方也很满意--想着自己单身多年的生活就要结束啦,心里满是欢喜,美美哒!可是突然想起年初还有几万块在股市里面 ...
- python写炒股软件_使用Python写一个量化股票提醒系统
大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...
- python定时天气预报(微信提醒)(部署到云服务器)
python定时天气预报(微信提醒)(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python定时天气预报(微信提醒)(部署到云服务器) 一. ...
最新文章
- 忍不住要发感慨,我的这个罗技鼠真好用...
- Sql Server实用操作-无数据库日志文件恢复数据库两种方法
- datatables 无法 无法重新初始化datatable_伽巫塔罗:2020年9月运势占卜,摩羯没了热情,无法重新卡死...
- Eclipse中新建jsp提示The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path
- CSS3 box flex 布局
- word文本框跨页显示方法
- 柴犬为什么总是被卡住狗头?
- java quartz
- c语言标准化考试程序报告,在线考试系统-c语言报告.doc
- Storm中关于Topology的设计
- Android Studio - xml布局文件不显示代码怎么办?
- 程序猿DD元旦送书:第二弹!
- NDVI 数据处理,及估算植被覆盖度(一)
- matlab aic sic,ADF检验的时候选用AIC和SIC得到的结论不一致应该如何选择?
- 免费天气预报API接口
- 华为运营商级路由器配置示例 | 公网IPv6 over SRv6 TE Policy
- Extjs--关于文件的下载
- 这 10 条河,「贡献」了全球 95% 的海洋塑料污染
- 编译原理基本定义(文法、算符文法、算符优先文法、算符优先关系表、算符优先分析过程)
- 3D角色模型很难做?Maya、Zbrush人头建模终极秘笈