欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【Python3爬虫】自动查询天气并实现语音播报

程序员文章站 2023-03-31 23:04:00
一、写在前面 之前写过一篇用Python发送天气预报邮件的博客,但是因为要手动输入城市名称,还要打开邮箱才能知道天气情况,这也太麻烦了。于是乎,有了这一篇博客,这次我要做的就是用Python获取本机IP地址,并根据这个IP地址获取物理位置也就是我所在的城市名称,然后用之前的办法实现查询天气,再利用百 ......

一、写在前面

之前写过一篇用python发送天气预报邮件的博客,但是因为要手动输入城市名称,还要打开邮箱才能知道天气情况,这也太麻烦了。于是乎,有了这一篇博客,这次我要做的就是用python获取本机ip地址,并根据这个ip地址获取物理位置也就是我所在的城市名称,然后用之前的办法实现查询天气,再利用百度语音得到天气预报的mp3文件,最后播放,这样是不是就很方(tou)便(lan)了呢?

 

二、具体步骤

这次有四个py文件:get_ip.py,get_wather.py,get_mp3.py和main.py。其中get_ip.py实现了获取本机ip地址和物理位置,get_wather.py实现了根据物理位置查询天气,get_mp3.py实现了调用百度语音api把文本转化成mp3文件,main.py是我们需要运行的py文件。这里由于查询天气用的是之前的方法,所以就不需要赘述了,主要说一下get_ip.py和get_mp3.py。

(1)get_ip.py

要获取本机ip,这里有一个很简单的办法,就是打开这个网页:,打开之后就能看到我们的ip地址和所在地理位置信息了。因为我们可以请求一下这个网页,然后对返回的结果进行一下解析,就能得到我们想要的结果了。代码如下:

 1 """
 2 version: python3.5
 3 author: onion
 4 site: http://www.cnblogs.com/tm0831/
 5 time: 2019/2/9 16:46
 6 """
 7 import re
 8 import requests
 9 
10 
11 # 获取本机ip和地理位置
12 def get_ip():
13     res = requests.get("http://www.ip.cn")
14     result = re.findall("<p>您现在的 ip:<code>(.*?)</code></p><p>所在地理位置:<code>(.*?)</code>", res.text)
15     ip, address = "", ""
16     if len(result):
17         ip = result[0][0]  # ip地址
18         address = result[0][1].split(' ')[0]  # 地理位置
19     else:
20         print("error!")
21         exit()
22     return ip, address

(2)get_mp3.py

这里需要使用,没有账号的需要先注册一下,然后搜索一下百度语音,再创建一个应用,如下:

【Python3爬虫】自动查询天气并实现语音播报

这里appid、api key和secret key在后面都需要用到,具体使用方法参见官方文档。这里还需要安装一个第三方库:baidu-aip,可以使用pip install baidu-aip进行下载安装。

下面是一个调用百度语音接口的示例:

 1 from aip import aipspeech
 2 
 3 """ 你的 appid ak sk """
 4 app_id = '你的 app id'
 5 api_key = '你的 api key'
 6 secret_key = '你的 secret key'
 7 
 8 client = aipspeech(app_id, api_key, secret_key)
 9 result = client.synthesis('你好百度', 'zh', 1, {
10     'vol': 5,
11 })
12 
13 # 识别正确返回语音二进制 错误则返回dict
14 if not isinstance(result, dict):
15     with open('auido.mp3', 'wb') as f:
16         f.write(result)

 其中synthesis方法的各参数含义如下:

【Python3爬虫】自动查询天气并实现语音播报

有了这个例子,做起来就简单多了,只需要将天气预报的文本传入进去就行了,然后我们可以根据自己喜好改变一下其他参数。代码如下:

 1 """
 2 version: python3.5
 3 author: onion
 4 site: http://www.cnblogs.com/tm0831/
 5 time: 2019/2/9 17:53
 6 """
 7 from aip import aipspeech
 8 
 9 # 你的app_id,api_key,secret_key
10 app_id = ""
11 api_key = “"
12 secret_key = ""
13 
14 
15 # 获取语音文件
16 def get_mp3(text):
17     client = aipspeech(app_id, api_key, secret_key)
18 
19     result = client.synthesis(text, 'zh', 1, {"spd": 4, "vol": 6})
20 
21     # 识别正确返回语音二进制,错误则返回dict
22     if not isinstance(result, dict):
23         with open('weather.mp3', 'wb') as f:
24             f.write(result)
25     else:
26         print("error!")
27         exit()

 

三、运行结果

首先是的代码运行的结果,如下图:

【Python3爬虫】自动查询天气并实现语音播报

然后会生成一个weather.mp3文件:

【Python3爬虫】自动查询天气并实现语音播报

 

最后会播放这个mp3文件。

 

完整代码已上传到github