Python3爬天气并实现语音播报

这篇博客介绍了如何使用Python自动获取本机IP地址,根据IP获取城市信息,查询天气,通过百度语音API将天气预报转化为MP3并播放,实现了便捷的天气查询和播报功能。
摘要由CSDN通过智能技术生成

一、写在前面

之前写过一篇用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,这里有一个很简单的办法,就是打开这个网页:https://www.ip.cn/,打开之后就能看到我们的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
这里需要使用百度云,没有账号的需要先注册一下,然后搜索一下百度语音,再创建一个应用,如下:
在这里插入图片描述

这里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方法的各参数含义如下:
在这里插入图片描述

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

 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()

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

在这里插入图片描述
然后会生成一个weather.mp3文件:

在这里插入图片描述
最后会播放这个MP3文件。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一些参考代码和思路。 首先,您可以使用Python中的requests库获取天气预报的数据。根据您所在的地理位置和天气数据源,您可能需要使用不同的API接口,例如OpenWeatherMap、中国天气网等。在获取到天气数据之后,您可以使用Python中的json库或xml库来解析数据。 接着,您可以使用Python中的pygame库来播放语音。将天气预报转换为语音文件的方法有很多种,例如使用百度AI开放平台的语音合成API、使用Google Text-to-Speech API等。其中,百度AI开放平台的语音合成API使用起来比较方便,具体使用方法可以参考官方文档。 最后,您可以将获取到的天气数据和语音播放代码结合起来,实现天气预报语音播报的功能。 下面是一个简单的示例代码,供您参考: ```python import requests import json import pygame from aip import AipSpeech # 获取天气预报数据 weather_api_url = 'http://api.openweathermap.org/data/2.5/weather?q=city_name&appid=api_key' city_name = 'Shanghai' # 城市名称 api_key = 'your_api_key' # API密钥 url = weather_api_url.replace('city_name', city_name).replace('api_key', api_key) response = requests.get(url) weather_data = json.loads(response.text) # 解析天气预报数据 temperature = weather_data['main']['temp'] - 273.15 # 温度(单位:摄氏度) description = weather_data['weather'][0]['description'] # 天气描述 # 将天气预报转换为语音 APP_ID = 'your_app_id' # APP ID API_KEY = 'your_api_key' # API密钥 SECRET_KEY = 'your_secret_key' # 密钥 client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('今天的天气是' + description + ',温度是' + str(round(temperature, 1)) + '摄氏度。', 'zh', 1, {'vol': 5}) if not isinstance(result, dict): with open('weather.mp3', 'wb') as f: f.write(result) # 播放语音 pygame.mixer.init() pygame.mixer.music.load('weather.mp3') pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: continue ``` 需要注意的是,该示例代码使用了百度AI开放平台的语音合成API,您需要在使用之前去官网注册账号并申请API密钥。另外,该示例代码使用了pygame库来播放语音,如果您使用的是其他的播放音频的库,则可能需要进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YT_百事可乐

持续更新,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值