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 相关文章推荐
Python修改Excel数据的实例代码
Nov 01 Python
python将文本转换成图片输出的方法
Apr 28 Python
win10系统中安装scrapy-1.1
Jul 03 Python
windows10系统中安装python3.x+scrapy教程
Nov 08 Python
Python中easy_install 和 pip 的安装及使用
Jun 05 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
python实现倒计时小工具
Jul 29 Python
python通过实例讲解反射机制
Oct 17 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 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
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
图片完美缩放
2006/09/07 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
Python修改Excel数据的实例代码
2013/11/01 Python
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
python实现电子词典
2020/03/03 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
英国折扣高尔夫商店:Discount Golf Store
2019/11/19 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
临床医学专业学生的自我评价分享
2013/11/21 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
大学自主招生推荐信
2014/05/10 职场文书
2014年党课学习材料
2014/05/11 职场文书
总经理检讨书范文
2015/02/16 职场文书
监守自盗观后感
2015/06/10 职场文书
教师师德工作总结2015
2015/07/22 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
oracle通过存储过程上传list保存功能
2021/05/12 Oracle
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis