Python3实现自动获取本地IP查询天气并语音播报

一只小鹿
一只小鹿
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍如何利用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仓库!

以上就是本文的全部内容,希望对各位的学习有所帮助,也欢迎大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表