为了账号安全,请及时绑定邮箱和手机立即绑定

2019想脱单?这款Python智能化“天气提醒”程序暖心你的小姐姐!

标签:
Python

冬天来啦,作为“特困户”,每天早上起床的速度感觉会击败全国3%的人。

https://img1.sycdn.imooc.com//5c28e99e0001aa3202000200.jpg

 

2019年已经在不知不觉中到来了,2018年还是单身的你是不是已经在努力的脱单中呢?

为了帮助大家顺利脱单,小编今天给大家带来了最强的暖心方式用Python设计一款“智能化—定时提醒”,面向你的小姐姐,发射一波“爱心冲击波”。

5c28e68d00019ab402390140.jpg

 

但愿人长久,不做单身狗。

5c28e68e0001df5902840269.jpg

 

开讲啦 开讲啦:

5c28e68e00013f1f06060372.jpg

 

实现第一步,用“和风天气”API获取天气数据(当然你也可以选用其他的接口)

城市接口: https://api.heweather.com/x3/weather?cityid=城市ID&key=你的认证key

2016-11-08 update 和风天气的API11月初改版了,所以上述接口地址需要更换成新的,看了下就加了个“free-”,后面代码加上就好了。

5c28e68f000131ba10000262.jpg

接口地址变了

首先得注册登录和风天气获得key,在城市代码里面找到想要查的城市ID,以北京为例:CN101010100

5c28e68f0001f14206320281.jpg

 城市ID

先不着急写码,我们用API调试工具试试这个接口,看看返回的是什么数据。

我用的是chrome下postman,打开postman,输入接口链接:

https://api.heweather.com/x3/weather?cityid=CN101010100&key=这里填你的key

5c28e68f00018e7f10000670.jpg

 API调试工具

返回的是JSON格式的,现在用Python调用一下这个接口试试:

# -*- coding: utf-8 -*-import urllib2#调用和风天气的APIurl = 'https://api.heweather.com/x3/weather?cityid=CN101010100&key=你的key'#用urllib2创建一个请求并得到返回结果req = urllib2.Request(url)

resp = urllib2.urlopen(req).read()print resp

用postman看看结构就好了。

JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型有着对应关系如下:

5c28e68f0001570c02440213.jpg

Python内置数据类型和JSON的对应关系 

5c28e6900001315b01920175.jpg

 对应关系

Python内置的json模块提供了非常完善的Python对象到JSON格式的转换。我们用loads()方法把JSON反序列化为Python对象

#将JSON转化为Python的数据结构json_data = json.loads(resp)print json_data

结果发现数据变成了u'XXXXX'的格式,这是因为反序列化得到的所有字符串对象默认都是unicode编码的。

5c28e69000014f5505290086.jpg

 结果

我们此时已经将天气数据拿到,并且反序列化为Python对象了,只有提取我们需要的数据即可。看下天气API提供哪些数据

5c28e90d0001b1cc05610241.jpg

 postman上的JSON结构

我就每天早上听一下今天的气温、风力、pm2.5、穿衣建议就好了。

现在以获得pm2.5的值为例,一层层获取到pm2.5的值

5c28e90e0001148c03690237.jpg

pm2.5的值 

上面说了JSON里面{}对应的是Python的dict,[]对应的是Python里的list,上图中可以比较清楚地知道这个JSON得到的Python数据其实是dict和list的多层嵌套。这里我们可以类比查《新华字典》,想要查到“天气”这个词,可以找到字母T的页码(按A~Z的有序列表),再找到“tian”所在的位置,一步步往里找就成找到想要的词了。

最外层是个dict类型:

dict: {'HeWeather...": [ list]}

往里一层是多个dict,直接通过多层dict['key']['key2']...就能取得PM2.5的值了:

list 只有一个值,取list[0] (它的值是一个dict),取得天气只需要

print json_data['HeWeather data service 3.0'][0]['aqi']['city']['pm25']

5c28e90e0001d2d105000312.jpg

 

获取天气数据的代码:

额······ 几十行 放上来比较占地方 哈哈 所以

小伙伴们 进 小编 Q 君 羊 

输入827 惊

接着502 喜

最后865  连在一起就是

到站后 问小编要“微信 信息 撤回的代码”

不管是哪篇文章的源代码都是可以给的哈

一切只为优化阅读体验<官方要求> 

小编表示:

5c28e90f00012c0303930315.jpg

 

5c28e90f0001ad5206800073.jpg

 运行结果

第二步、将文字合成语音

我直接用的百度的语音合成API,调用方法很简单(浏览器就可以玩)

1、同样是注册登录获得key,百度语音  

2、注册个应用,随便啥应用都行,获得APPID

这几步都可以参考官方接入指南

3、获得token(一个月有效期,过期再获取即可)

浏览器输入:

https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=你的AppID&client_secret=你的AppKey

返回的JSON里面的“access_token”就是调用百度语音合成API要用的token

4、合成语音 ,必填、选填参数可看官方文档

http://tsn.baidu.com/text2audio?tex=需要合成语音的文本&lan=zh&per=0&cuid=设备mac地址或手机的IMEI码&ctp=1&tok=你的token  

5、我们只需要把天气文本放在第4步的链接tex=' '里面就好了

5c28e90f0001084804000286.jpg

 

第三步、用树莓派播放天气预报

树莓派上安装linux音频播放程序 mpg123,执行

sudo apt-get install mpg123 

这玩意使用起来异常简单,试试用命令行 “mpg123 语音url” 来播放在线的音频

mpg123 http://tsn.baidu.com/text2audio?tex=需要合成语音的文本&lan=zh&per=0&cuid=设备mac地址或手机的IMEI码&ctp=1&tok=你的token 

现在只要把第一步获得的天气文本用mpg123播放就好了,在第一步的代码基础上加上这些:

url = "http://tsn.baidu.com/text2audio?tex=" + weather_forcast_txt + "&lan=zh&per=0&cuid=设备mac地址或手机的IMEI码&ctp=1&tok=你的token"os.system('mpg123 "%s"'%(url)) #需要import os

最后,定时执行天气播报脚步就好了

用linux的crontab,可查看crontab定时任务  

在终端执行

sudo crontab -e

新增一条

0 8 * * * python /home/pi/...(你的天气播报脚本的路径) 

即每天8点整执行语音播报。

是不是很赞哇~

还不赶快动手操作下,做个定制版的“播报提醒”程序,暖心你的小姐姐,加油!

愿有情人终成眷属

【此文章源代码到君羊找小编得到,切记:得到代码后要跟着敲打一边,进行实操练习!】

(玩个小游戏哈)看图猜人:

5c28e910000123e506400465.jpg

 

全部猜对的,有惊喜:“Python新年大礼包”

欢迎小伙伴评论区留言!


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消