'''
程序思想:
有两个本地语音库,美音库Speech_US,英音库Speech_US
调用有道api,获取语音MP3,存入对应的语音库中
'''import os
import urllib.requestclass youdao():def __init__(self, type=0, word='hellow'):'''调用youdao APItype = 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._typedef 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._filePathdef _getURL(self):'''私有函数,生成发音的目标URLhttp://dict.youdao.com/dictvoice?type=0&audio='''self._url = r'http://dict.youdao.com/dictvoice?type=' + str(self._type) + r'&audio=' + self._word.replace(" ", "%20")def _getWordMp3FilePath(self, word):'''获取单词的MP3本地文件路径如果有MP3文件,返回路径(绝对路径)如果没有,返回None'''word = word.lower() # 小写self._word = wordself._fileName = self._word + '.mp3'self._filePath = os.path.join(self._dirSpeech, self._fileName)# 判断是否存在这个MP3文件if os.path.exists(self._filePath):# 存在这个mp3return self._filePathelse:# 不存在这个MP3,返回nonereturn Noneif __name__ == "__main__":sp = youdao()sp.down('reconcile')