Python3实现自动获取本地IP查询天气并语音播报
本文介绍如何利用Python自动获取本机IP及地理位置,结合百度语音API将天气文本转换为MP3并播放。通过get_ip、get_weather、get_mp3和main四个模块实现从定位到语音播报的全自动流程,解决手动查询的繁琐问题。
一、写在前面
此前曾撰写过一篇关于使用Python发送天气预报邮件的文章,但该方法需要手动输入城市名称,且必须打开邮箱才能查看天气信息,操作较为繁琐。因此,本文旨在通过Python自动获取本机IP地址,进而解析出所在的物理位置(即城市名称),复用之前的天气查询逻辑,并调用百度语音接口生成天气预报的MP3文件进行播放,从而实现更加便捷(偷懒)的操作体验。
二、具体步骤
本项目包含四个Python文件: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则是主运行入口。由于天气查询部分沿用了之前的方法,此处不再赘述,重点介绍get_ip.py和get_mp3.py的实现细节。
(1)get_ip.py
获取本机IP有一个简单的方法,即访问网页https://www.ip.cn/,页面会直接显示IP地址和地理位置信息。我们可以通过Python请求该网页并解析返回结果来获取所需信息。具体代码如下:
"""
Version: Python3.5
Author: OniOn
Site: http://www.cnblogs.com/TM0831/
Time: 2019/2/9 16:46
"""
import re
import requests
# 获取本机IP和地理位置
def get_ip():
res = requests.get("http://www.ip.cn")
result = re.findall("<p>您现在的 IP:<code>(.*?)</code></p><p>所在地理位置:<code>(.*?)</code>", res.text)
ip, address = "", ""
if len(result):
ip = result[0][0] # IP地址
address = result[0][1].split(' ')[0] # 地理位置
else:
print("Error!")
exit()
return ip, address
(2)get_mp3.py
此部分需要使用百度云服务。若没有账号需先注册,搜索“百度语音”后创建一个应用,界面如下:

创建应用后获得的AppID、API Key和Secret Key将在后续代码中使用,具体用法可参考官方文档。此外,还需安装第三方库baidu-aip,可通过命令pip install baidu-aip进行安装。
以下是调用百度语音接口的示例代码:
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.synthesis('你好百度', 'zh', 1, {
'vol': 5,
})
# 识别正确返回语音二进制 错误则返回dict
if not isinstance(result, dict):
with open('auido.mp3', 'wb') as f:
f.write(result)
其中synthesis方法的各参数含义如下:

基于上述示例,实现起来相对简单,只需将天气预报文本传入即可,其他参数可根据个人喜好调整。具体代码如下:
"""
Version: Python3.5
Author: OniOn
Site: http://www.cnblogs.com/TM0831/
Time: 2019/2/9 17:53
"""
from aip import AipSpeech
# 你的APP_ID,API_KEY,SECRET_KEY
APP_ID = ""
API_KEY = “"
SECRET_KEY = ""
# 获取语音文件
def get_mp3(text):
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.synthesis(text, 'zh', 1, {"spd": 4, "vol": 6})
# 识别正确返回语音二进制,错误则返回dict
if not isinstance(result, dict):
with open('weather.mp3', 'wb') as f:
f.write(result)
else:
print("Error!")
exit()
三、运行结果
首先展示代码运行的控制台输出结果,如下图所示:

随后,程序会生成一个名为weather.mp3的文件:

最后,系统将自动播放该MP3文件。
完整代码已上传至GitHub仓库!
以上就是本文的全部内容,希望对各位的学习有所帮助,也欢迎大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













