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 相关文章推荐
将图片文件嵌入到wxpython代码中的实现方法
Aug 11 Python
python里对list中的整数求平均并排序
Sep 12 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
解析python实现Lasso回归
Sep 11 Python
python实现宿舍管理系统
Nov 22 Python
Java爬虫技术框架之Heritrix框架详解
Jul 22 Python
Django多个app urls配置代码实例
Nov 26 Python
使用OpenCV实现人脸图像卡通化的示例代码
Jan 15 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
基于mysql的论坛(2)
2006/10/09 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
python控制台显示时钟的示例
2014/02/24 Python
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
在Python中使用判断语句和循环的教程
2015/04/25 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
Python如何在DataFrame增加数值
2020/02/14 Python
如何解决安装python3.6.1失败
2020/07/01 Python
python能做哪些生活有趣的事情
2020/09/09 Python
python 制作网站小说下载器
2021/02/20 Python
成人大专自我鉴定范文
2013/10/19 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
Python爬虫基础初探selenium
2021/05/31 Python
MySQL 时间类型的选择
2021/06/05 MySQL
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android