设为首页 收藏本站
查看: 1426|回复: 0

[经验分享] Python脚本实现Mac开机自动语音播报天气

[复制链接]

尚未签到

发表于 2015-10-26 12:16:42 | 显示全部楼层 |阅读模式
简介
最近专注于捣腾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,那么就是一句话的事情:


[python] viewplaincopyprint?

  • pip install feedparser  

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

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

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

DSC0000.png

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

DSC0001.png

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

DSC0002.png

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

DSC0003.png

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

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

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


[html] viewplaincopyprint?

  • say 祝你:身体健康  

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

为系统设置定时唤醒和定时开机的系统计划
这个同样不难,进入系统设置,选择节能灯的菜单:

DSC0004.png

进入点击:

DSC0005.png

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

DSC0006.png

系统定时开机设置完毕!

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

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


[python] viewplaincopyprint?

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

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

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


[python] viewplaincopyprint?

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

[python] viewplaincopyprint?

  • 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文件如何放置,还是看我上一篇文章。

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-130949-1-1.html 上篇帖子: Python/Django开发笔记(2) --- CouchDB 下篇帖子: python socket编程详细介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表