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


Posted in Python onFebruary 21, 2019

一、写在前面

之前写过一篇用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地址和所在地理位置信息了。因为我们可以请求一下这个网页,然后对返回的结果进行一下解析,就能得到我们想要的结果了。代码如下:

"""
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

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

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

这里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方法的各参数含义如下:

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

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

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

三、运行结果

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

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

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

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

最后会播放这个MP3文件。

完整代码已上传到GitHub!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
Python深入学习之内存管理
Aug 31 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
python爬取亚马逊书籍信息代码分享
Dec 09 Python
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
Jul 09 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
Python中turtle库的使用实例
Sep 09 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
用Python画小女孩放风筝的示例
Nov 23 Python
Python 实现Image和Ndarray互相转换
Feb 19 Python
python 自动批量打开网页的示例
Feb 21 #Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 #Python
Python利用itchat库向好友或者公众号发消息的实例
Feb 21 #Python
python使用wxpy轻松实现微信防撤回的方法
Feb 21 #Python
Python开发网站目录扫描器的实现
Feb 21 #Python
Python爬虫之UserAgent的使用实例
Feb 21 #Python
利用python实现在微信群刷屏的方法
Feb 21 #Python
You might like
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
Python获取远程文件大小的函数代码分享
2014/05/13 Python
Python Queue模块详解
2014/11/30 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
降低python版本的操作方法
2020/09/11 Python
python安装sklearn模块的方法详解
2020/11/28 Python
新员工入职感言
2014/02/01 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
五年级作文之学校的四季
2019/12/05 职场文书