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简单的实现树莓派的WEB控制
Feb 18 Python
python利用拉链法实现字典方法示例
Mar 25 Python
Python常用内置模块之xml模块(详解)
May 23 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
对python append 与浅拷贝的实例讲解
May 04 Python
python实现Virginia无密钥解密
Mar 20 Python
搞定这套Python爬虫面试题(面试会so easy)
Apr 03 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
Python中的pathlib.Path为什么不继承str详解
Jun 23 Python
python 通过文件夹导入包的操作
Jun 01 Python
Python基础之操作MySQL数据库
May 06 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
博士208HAF收音机实习报告
2021/03/02 无线电
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
JS实现六位字符密码输入器功能
2016/08/19 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
python编写简单爬虫资料汇总
2016/03/22 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python非递归全排列实现方法
2017/04/10 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
python版本单链表实现代码
2018/09/28 Python
python中列表的含义及用法
2020/05/26 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
python判断正负数方式
2020/06/03 Python
python文件读取失败怎么处理
2020/06/23 Python
模特职业生涯规划范文
2014/02/26 职场文书
法律进企业活动方案
2014/03/04 职场文书
调解协议书
2014/04/16 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
面试自我评价范文
2014/09/17 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
医院保洁员管理制度
2015/08/05 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL