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 self,cls,decorator的理解
Jul 13 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
Python实现控制台输入密码的方法
May 29 Python
python中引用与复制用法实例分析
Jun 04 Python
python创建临时文件夹的方法
Jul 06 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
老生常谈Python进阶之装饰器
May 11 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
python操作mysql代码总结
Jun 01 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
Python面向对象中类(class)的简单理解与用法分析
Feb 21 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
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
python+django快速实现文件上传
2016/10/24 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
python自动生成证件号的方法示例
2021/01/14 Python
美国在线家装零售商:Build.com
2016/09/02 全球购物
英国办公用品商店:Office Outlet
2018/04/04 全球购物
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
《草原的早晨》教学反思
2014/04/08 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
人事局接收函
2015/01/30 职场文书
廉洁自律证明
2015/06/24 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android