Python通过有道词典API获取单词发音MP3

1. 原因

最近打算重新开始好好学英语,那当然从单词开始了。我最近好好研究了一下所谓的记忆神器 Anki ,然后自己做卡片(主要是用 欧路词典 的生词本功能记录生词,然后将网页版的 欧陆词典 的生词复制下来,自己写个 Python脚本 将其处理成 Anki 导入的文本,然后再用 Anki 的插件 AwesomeTTS 将卡片附上音频, AwesomeTTS 也是用 Python + PyQt4 写的,牛逼啊,有机会了研究研究,不过感觉跑题了,主要还是为了学英语 捂脸笑 ),学习起来感觉很不错,目前学了3个List(一共是30个List),以后看看会不会半途而废,看看这个 Anki 到底如何。

但是,这中间缺少了一个过程, 听写 ,没错就是 听写 ,初中,高中,甚至到了大学,最怕的 听写 ,但是我现在不可能找个老师或者同学给我报听写吧,这感觉既二逼,又没操作性。找了市场上英语类的APP,不过失望的是,我没有找到(如果有朋友有,一定要给我说一下啊),但是活人不能让尿给憋死,自己动手丰衣足食,感觉没有什么难度,所以打算自己写一个 听写软件 ,好,今天立下了 Flag ,开一个坑。

但是知易行难,本来打算用 Python + PyQt ,写一个听写软件,最后发现 Python 的发音库,简单粗暴,好用易行的都支持 Python2 ,其他的要么太高端,要么说失真,所以改变策略,打算是 Python3 + Qt ,主要用 Python 去爬取 MP3 ,然后用 QT 播放和控制 MP3 (窃以为用 PyQt 没有 Qt 写界面舒服便捷)。

所以先要有 音频文件 啊,怎么办,爬之。

2. 有道发音API介绍

为什么用有道的发音API?一方面,我是没去试几个;另一方面,有道的发音真不错(比微软的 TTS 标准好听多了)

调用有道词典的在线发音库:
美音:

http://dict.youdao.com/dictvoice?type=0&audio=

http://dict.youdao.com/dictvoice?type=1&audio=

api 仅有两个参数,就是发音类型和单词,在 audio= 后面加上单词就ok了, type=0 为美国发音, type=1 为英国发音。

比个例子,美音 king 发音(点击链接):
http://dict.youdao.com/dictvoice?type=0&audio=king

比个例子,英音 king 发音(点击链接):
http://dict.youdao.com/dictvoice?type=1&audio=king

3.代码及其解释

使用说明:
调用youdao的API下载对应的单词发音。
判断语音库中是否有对应的MP3文件:

  • 如果有就不下载,返回 MP3 绝对路径地址
  • 如果没有,就下载 MP3 ,返回 MP3 绝对路径地址

主要开放的就两个函数:

  • setAccent() : 调整语音库
  • getAccent() : 获取是什么语音库
  • down() : 下载MP3
程序思想: 有两个本地语音库,美音库Speech_US,英音库Speech_US 调用有道api,获取语音MP3,存入对应的语音库中 import os import urllib . request class youdao ( ) : def __init__ ( self , type = 0 , word = 'hellow' ) : 调用youdao API type = 0:美音 type = 1:英音 判断当前目录下是否存在两个语音库的目录 如果不存在,创建 word = word . lower ( ) # 小写 self . _type = type # 发音方式 self . _word = word # 单词 # 文件根目录 self . _dirRoot = os . path . dirname ( os . path . abspath ( __file__ ) ) if 0 == self . _type : self . _dirSpeech = os . path . join ( self . _dirRoot , 'Speech_US' ) # 美音库 else : self . _dirSpeech = os . path . join ( self . _dirRoot , 'Speech_EN' ) # 英音库 # 判断是否存在美音库 if not os . path . exists ( 'Speech_US' ) : # 不存在,就创建 os . makedirs ( 'Speech_US' ) # 判断是否存在英音库 if not os . path . exists ( 'Speech_EN' ) : # 不存在,就创建 os . makedirs ( 'Speech_EN' ) def setAccent ( self , type = 0 ) : type = 0:美音 type = 1:英音 self . _type = type # 发音方式 if 0 == self . _type : self . _dirSpeech = os . path . join ( self . _dirRoot , 'Speech_US' ) # 美音库 else : self . _dirSpeech = os . path . join ( self . _dirRoot , 'Speech_EN' ) # 英音库 def getAccent ( self ) : type = 0:美音 type = 1:英音 return self . _type def down ( self , word ) : 下载单词的MP3 判断语音库中是否有对应的MP3 如果没有就下载 word = word . lower ( ) # 小写 tmp = self . _getWordMp3FilePath ( word ) if tmp is None : self . _getURL ( ) # 组合URL # 调用下载程序,下载到目标文件夹 # print('不存在 %s.mp3 文件\n将URL:\n' % word, self._url, '\n下载到:\n', self._filePath) # 下载到目标地址 urllib . request . urlretrieve ( self . _url , filename = self . _filePath ) print ( '%s.mp3 下载完成' % self . _word ) else : print ( '已经存在 %s.mp3, 不需要下载' % self . _word ) # 返回声音文件路径 return self . _filePath def _getURL ( self ) : 私有函数,生成发音的目标URL http://dict.youdao.com/dictvoice?type=0&audio= self . _url = r 'http://dict.youdao.com/dictvoice?type=' + str ( self . _type ) + r '&audio=' + self . _word def _getWordMp3FilePath ( self , word ) : 获取单词的MP3本地文件路径 如果有MP3文件,返回路径(绝对路径) 如果没有,返回None word = word . lower ( ) # 小写 self . _word = word self . _fileName = self . _word + '.mp3' self . _filePath = os . path . join ( self . _dirSpeech , self . _fileName ) # 判断是否存在这个MP3文件 if os . path . exists ( self . _filePath ) : # 存在这个mp3 return self . _filePath else : # 不存在这个MP3,返回none return None if __name__ == "__main__" : sp = youdao ( ) sp . down ( 'reconcile' )

4. Next …

那个最近比较忙,写好了软件就会写Blog,未完待续…

<h2 th:text="${word.getWordName()}">日语N3 </h2> <button onclick="playAudio()" th:text="${word.getAudio()}" > [ apple ] </button>
Termux是一个在Android设备上运行Linux环境的应用,而QEMU(Quick Emulator Machine)是一款开源的虚拟机软件,用于在宿主机上模拟不同架构的计算机系统。如果你想在Termux中安装和使用QEMU,你可以按照以下步骤操作: 1. **更新Termux**: 首先确保你的Termux是最新版本,可以通过运行`apt update && apt upgrade`来更新。 2. **安装依赖**: QEMU需要一些特定的依赖才能运行,比如GCC编译器和其他必要的库。在Termux中,你可以通过运行以下命令安装它们: apt install build-essential git libtool autoconf automake zlib1g-dev libncurses5-dev libreadline6-dev libelf-dev libseccomp-dev libtinfo-dev libpciaccess-dev libsqlite3-dev libqemu-dev 3. **下载和构建QEMU源码**: 使用Git从QEMU官方仓库克隆代码,然后编译: git clone https://github.com/qemu/qemu.git cd qemu ./configure make -j$(nproc) # 使用多核进行并行编译,nproc为CPU核心数 sudo make install # 安装到Termux的系统路径下 4. **测试QEMU**: 安装完成后,你可以创建一个简单的虚拟机来测试是否成功安装和运行: qemu-system-x86_64 -nographic 如果一切正常,你将看到一个提示,表示QEMU正在启动一个无图形界面的虚拟机。