Python脚本实现Mac开机自动语音播报天气

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

简介

最近专注于捣腾mac系统,发现了系统语音朗读的功能,于是萌生了从一些天气服务的API获得并解析天气,在本地调用语音朗读指令,使得电脑上的“天气预报”也实现播报功能。

代码我已经上传到本人的GitHub上去了,需要的可以任意取用。

代码实现不是很麻烦,看得懂的人看看就晓得了。如果看不懂,也不需要纠结(看得懂我那蹩脚的英文说明和注释也足够了)。

代码中解析的天气服务,来自雅虎提供的天气API:http://xml.weather.yahoo.com/forecastrss?w={0}&u={1}

其中,参数{0}表示城市代码,也是唯一你可能需要改动的地方,我使用的是南京。你所在的城市代码,可以在这里查找到:http://sigizmund.info/woeidinfo/

参数{1}表示使用的温度单位,不玩非主流,传入“c”表示使用摄氏度,另一值为“F”

需要的支持库:FeedParser

因为Yahoo!提供的这个API返回的格式是标准的RSS 2.0格式,而Python也正好提供了一个解析RSS的库,名为:FeedParser;因此,那段程序脚本需要该库的支持。

关于如何安装该RSS解析库?

如果你已经安装了Pip,那么就是一句话的事情:

pip install feedparser

如果,你没有安装过pip,我这里就不说了,教程网上是可以找到的(建议先安装pip,然后安装该库)

开启系统语音朗读功能

既然需要语音播报,当然需要开启系统语音相关的功能,这里因为需要用中文播报,需要开启中文朗读,Apple的国际化做得还不错,提供了中文语音库,不过需要下载。

首先,打开系统设置中的如下设置项:


进入后切换至“Text to speech”(中文的系统应该是文本至语音吧):


点开“System Voice”后的下来菜单,选择不同语言的语音库,默认的是英文语音,选择自定义查找“Chinese”:


可以看到只中文相关的就提供了三种语音库:中国大陆简体、广东话、中华台湾的台湾话(赶紧收复那该死的TW吧!):


注:虽然提供了,但没有内置到你目前的操作系统,所以当你选择的时候,会提示你先下载(文件还不小,所以按需下载,我这里打上勾代表我已经下载了中文库了)

下载完,选择中文即可,点击Play是可以试听的!

好了,以上就已经使得默认的语音库为中文语音库了。如何测试,它会读中文?你可以在应用程序的实用工具里找到“终端”(英文系统叫Terminal)。打开它,然后输入:

say 祝你:身体健康

系统就会自动朗读:祝你:身体健康

为系统设置定时唤醒和定时开机的系统计划

这个同样不难,进入系统设置,选择节能灯的菜单:


进入点击:


进入,即可设置定时计划:


系统定时开机设置完毕!

下面,还是回到我上篇文章中如何使得一个脚本程序开机自启。需要的文件,我已经在代码库里提供了。

代码注解

代码中,我自己设置了,假如过了九点机子才被开机,那么将取消自动播报天气预报:

#before 08:59:59, the weather voice reportor will start 
    if time.localtime(time.time())[3] <= 8:
        parserRSSFeed(WEATHER_SERVICE_URL)

上面提到的如何设置系统定时开机,不是必须动作,这只不过可以使得这个程序看起来更为“智能”一点。

因为,say命令遇到一些特殊字符,会使得朗读命令失效,所以,我简单得列举了几个我碰到过的失败的例子的正则表达式,如果文字中包含这些,则将其替换:

#handle some "special char" which will stop the "speak order"
#such as -、(、).....
PRE_PROCESSING_EXPRESSION=\
(
    ('[-]'          ,   '负'),
    ('[\(]'         ,   '左括号'),
    ('[\)]'         ,   '右括号')
    #......
    #TODO:append more
)

def processSpeakingTxt(txtStr):
    global PRE_PROCESSING_EXPRESSION
    for (reg_Expression, replaceingStr) in PRE_PROCESSING_EXPRESSION:
        if re.search(reg_Expression, txtStr) is not None:
            txtStr = re.sub(reg_Expression, replaceingStr, txtStr)
    return txtStr


另外如果你不想改.sh和.plist文件,你还需要在/usr/local下新建一个名为:customizeService的文件夹,然后把.py和.sh的两个文件放到其下。.plist文件如何放置,还是看我上一篇文章。

最好,还要提醒一下:成功执行的前提是——系统开机时,电脑已连接互联网(否则你如果想听见语音播报,只能在之后,自己手动执行了)




原文发布时间为:2013-02-15


本文作者:vinoYang


本文来自云栖社区合作伙伴CSDN博客,了解相关信息可以关注CSDN博客。

目录
相关文章
|
1月前
|
Python
【10月更文挑战第10天】「Mac上学Python 19」小学奥数篇5 - 圆和矩形的面积计算
本篇将通过 Python 和 Cangjie 双语解决简单的几何问题:计算圆的面积和矩形的面积。通过这道题,学生将掌握如何使用公式解决几何问题,并学会用编程实现数学公式。
164 60
|
1月前
|
Python
【10月更文挑战第10天】「Mac上学Python 20」小学奥数篇6 - 一元一次方程求解
本篇将通过 Python 和 Cangjie 双语讲解如何求解一元一次方程。通过这道题,学生将掌握如何用编程实现方程求解,并体验基本的代数计算。
108 1
|
1月前
|
存储 网络安全 数据安全/隐私保护
|
18天前
|
机器学习/深度学习 自然语言处理 API
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程。通过简单的代码示例,展示如何将文本转换为自然流畅的语音,适用于有声阅读、智能客服等场景。
74 3
|
1月前
|
Python
【10月更文挑战第7天】「Mac上学Python 15」小学奥数篇1 - 如何平分6个苹果和4个橘子
本篇将通过 Python 和 Cangjie 双语讲解一个简单的数学题:如何平分 N 个苹果和 M 个橘子。这道题旨在锻炼初学者的逻辑思维,并学会使用编程解决实际问题。
78 1
【10月更文挑战第7天】「Mac上学Python 15」小学奥数篇1 - 如何平分6个苹果和4个橘子
|
1月前
|
Java 索引 Python
【10月更文挑战第19天】「Mac上学Python 30」基础篇11 - 高级循环技巧与应用
本篇将介绍更深入的循环应用与优化方法,重点放在高级技巧和场景实践。我们将讲解enumerate()与zip()的妙用、迭代器与生成器、并发循环以及性能优化技巧。这些内容将帮助您编写更高效、结构更合理的代码。
66 5
|
1月前
|
数据安全/隐私保护 Python
【10月更文挑战第17天】「Mac上学Python 28」基础篇9 - 条件语句与逻辑判断
在Python中,条件语句和逻辑判断是控制程序执行流程的关键工具,帮助程序在不同条件下做出不同决策。通过本篇的学习,您将掌握单选、双分支、多选结构、单行条件表达式、条件嵌套、条件判断的类型和逻辑运算符的用法,从而更灵活地控制程序执行流程。
49 5
|
1月前
|
Python
【10月更文挑战第18天】「Mac上学Python 29」基础篇10 - 循环结构与迭代控制
在Python中,循环结构是控制程序执行的重要工具。通过学习本篇内容,您将掌握如何使用for循环和while循环来高效地处理重复任务,并了解break、continue和else的使用方式。同时,我们还会探索嵌套循环和典型应用场景中的实际应用。
39 2
|
1月前
|
机器学习/深度学习 数据采集 传感器
使用Python实现深度学习模型:智能极端天气事件预测
使用Python实现深度学习模型:智能极端天气事件预测
93 3
|
1月前
|
存储 算法 Python
【10月更文挑战第16天】「Mac上学Python 27」小学奥数篇13 - 动态规划入门
本篇将通过 Python 和 Cangjie 双语介绍动态规划的基本概念,并解决一个经典问题:斐波那契数列。学生将学习如何使用动态规划优化递归计算,并掌握编程中的重要算法思想。
97 3
下一篇
无影云桌面