原创文章

文章目录

@[toc]1. 原因

2. 有道发音API介绍

3.代码及其解释

4. Next ...

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为英国发音。

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 文件 将URL: ' % word, self._url, ' 下载到: ', 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,未完待续…

python 单词发音-[Python]通过有道词典API获取单词发音MP3相关推荐

  1. python利用有道词典翻译_使用Python从有道词典网页获取单词翻译

    从有道词典网页获取某单词的中文解释. import re import urllib word=raw_input('input a word\n') url='http://dict.youdao. ...

  2. 使用有道词典API做一个简单的翻译页面 HTML+JS+有道词典API(代码可直接运行)

    使用有道词典API做一个简单的翻译页面 HTML+JS+有道词典API(代码可直接运行) 代码很简单,适合初学者学习借鉴.可以当成一个小工具使用. 注意: 1.代码应联网使用. 2.在输入密钥和id时 ...

  3. python有道字典_Java和Python使用有道词典制作查单词脚本

    先上两张图看一下效果 Java的: 今天突发奇想,想做个查单词的东西,就赶紧去有道词典官网看了一下,原来我们要查询的单词是嵌入在网页地址中送给有道词典的,然后页面的结果就是我们需要的单词释义,所以这个 ...

  4. 在iPad上利用pythonista(python3.6)调用有道翻译API实现单词的批量翻译

    目录 准备工作 参考资料 代码 结果 原因:有很多单词要背,然后一开始一个一个查单词意思,令人智熄,于是心想批量翻译. 准备工作 一台装有pythonista的iPad (当然用电脑肯定是可以的,只不 ...

  5. Java Swing 调用有道词典API实现自定义桌面翻译字典

    具体实现内容长这个样子: 下面开始具体的内容准备: 要调用有道词典的API,必须先申请API 进入网址(https://ai.youdao.com/?keyfrom=old-openapi) 先登录注 ...

  6. SpringBoot,+毕业项目引入有道词典api接口,记录

    1.有道智云注册账号,获取资格 有免费体验, http://ai.youdao.com/ 2.复制官方的Demo,修改一下,作为一个工具类 注意:import 别引错 package com.exam ...

  7. python爬虫 破解js加密有道词典案列的两种方式以及思路总结

    代码在后面 思路1总结 抓包找到这四个加密参数 'salt': salt, 'sign': sign, 'ts': ts, 'bv': bv, 得到四个值(涉及到js中 MD5, 时间戳. 随机数等) ...

  8. python gps与高德地图poi_Python——使用高德API获取指定城指定类别POI并实现XLSX文件合并...

    # 以下内容为原创,转载请注明出处 1 import xlrd #读xlsx 2 import xlsxwriter #写xlsx 3 import urllib.request #url请求,Pyt ...

  9. python爬取路况信息_高德地图api获取路况信息(python版)

    1.依旧是先申请key 2.查看url https://restapi.amap.com/v3/traffic/status/circle?location=116.3057764,39.986413 ...

  10. 用 python+tkinter+有道云API 写一个自用的背单词软件

    目录 导语 程序功能 需要用的工具 需要安装的python包 程序代码 功能类函数Functions 键盘响应 窗体设置 Sql连接 Gui程序打包 结语 参考文献 导语 最近在学英语,新单词需要反复 ...

最新文章

  1. 一秒回到P图前:Adobe发布“反向PS”利器,知道你修过哪里,还帮你修回去
  2. python3.8.1安装教程-记一次Python3.8.1安装
  3. 小图标文字对齐的终极解决方案
  4. 华为M2 e服务器信息解析失败,关于华为:华为审核被拒检查HMS-Core更新失败
  5. 2021-9-下旬 数据结构-线性表-队列-java代码实现(复习用)
  6. PAT1044 火星数字 (20 分)
  7. 批量恢复文件的Py脚本
  8. Unity WebGL 窗口自适应
  9. python3的xpath_python3爬虫之xpath
  10. 吴恩达深度学习的改善深层神经网络编程作业:优化Optimization
  11. 解读对象存储九大关键特征
  12. 海康威视摄像头-chrome谷歌浏览器高版本局域网下海康摄像头web网页实时播放
  13. EPSON机械手视觉操作手册
  14. Pr入门系列之十一:基本图形(上)
  15. 云模型及发生器matlab代码
  16. Bouncing Ball
  17. 【时间序列分析】12. ARMA(1,1)模型
  18. android开发中如何判断手机中存在的sim卡数量?
  19. Monit的web监控界面
  20. 51单片机控制SG90舵机、MG90S舵机

热门文章

  1. 双卡双待的iPhone终于要来了?中国特供了解一下!
  2. 项目经理最核心的能力是什么?
  3. CC2530单片机P1寄存器说明
  4. 解决 Intel Extreme Tuning Utility(XtuService)的日志占用过大(直接删Logs或卸载)
  5. Django实现登录注册
  6. java oracle中文乱码_解决java oracle中文乱码的方法
  7. STM32驱动SG90舵机与HC_SR04超声波模块
  8. SpringBoot整合集成p6spy
  9. 源码解析-为什么引入了jackson-dataformat-xml 包我的接口全变成了xml格式?
  10. echarts2的一个地图demo