原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:https://blog.csdn.net/humanking7/article/details/88630856


文章目录

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

比个例子,美音 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.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._worddef _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')

4. Next …

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


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

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

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

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

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

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

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

  4. Python 调用有道翻译api接口翻译外文网站的整篇西班牙文实战演示

    Python 调用有道翻译 api 接口翻译整篇西班牙文实战演示 第一章:翻译效果展示 ① 翻译文章示例一[阿尔卡拉门的无海摩纳哥:"不到4万欧元,你就不能在这里租任何东西."] ...

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

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

  6. python有道翻译-Python调用有道词典翻译

    Python调用有道词典翻译 分析 翻译按钮 点击翻译按钮,查看网络请求,如图 共有四个网络请求,通过分析,查看返回的信息,显然第一个是真正的翻译请求,具体信息如下: 如图所示,我们真正关注的是请求参 ...

  7. python有道-Python调用有道词典翻译

    Python调用有道词典翻译 分析 翻译按钮 点击翻译按钮,查看网络请求,如图 共有四个网络请求,通过分析,查看返回的信息,显然第一个是真正的翻译请求,具体信息如下: 如图所示,我们真正关注的是请求参 ...

  8. python调用有道词典_菜鸟上手Python最有野心的库Asyncio

    Asyncio是Python中非常牛逼的一个异步并发库,比较复杂不太好理解!从Py3.4之后开始加入这个内置并发库,一举解决了Python中高并发的问题.它提供了一整套异步IO模型的编程接口,可以说它 ...

  9. python有道翻译接口-Python调用有道翻译api实现翻译

    通过调用有道翻译的api,实现中译英.其他语言译中文 代码: # coding=utf-8 import urllib import urllib2 import json import time i ...

  10. python读音有道词典-利用python实现命令行有道词典的方法示例

    前言 由于一直用Linux系统,对于词典的支持特别不好,对于我这英语渣渣的人来说,当看英文文档就一直卡壳,之前用惯了有道词典,感觉很不错,虽然有网页版的但是对于全站英文的网页来说并不支持.索性自己实现 ...

最新文章

  1. apache 版本_Apache Hudi 0.5.1版本重磅发布
  2. android surfaceflinger研究----SurfaceFlinger loop
  3. python+selenium自动登录qq空间并下载相册
  4. php函数库快速记忆法_PHP速成大法
  5. [分享]我国食品行业ERP现状及分析解决方案
  6. java对数据库的操作_java对数据库的操作(jdbc)
  7. 容器编排技术 -- Kubernetes 声明网络策略
  8. Hbase和MySQL的区别是什么?
  9. 深度操作系统 Deepin 15.11 发布
  10. charles iPhone抓包步骤 Fiddler
  11. maven ...../.m2/settings.xml
  12. 网络安全设备Bypass功能介绍及分析
  13. 固态硬盘坏了数据能恢复吗?(已解决)
  14. 22-23 - 页式内存管理
  15. java程序员的转正述职ppt
  16. Android Studio 生成二维码、生成带logo的二维码
  17. 【数字电路】数字电子时钟设计
  18. 微信小程序之如何获取输入框的内容
  19. Linux 系统调用深思:从原理到实战
  20. 水库大坝安全监测监控系统平台axure分析+辽阳市水库大坝安全检测平台+志豪未来科技有限公司+陈志豪

热门文章

  1. 装配区5s管理制度推行办法
  2. 计算机二级不看教材只刷题可以吗,中级会计可以只看轻松过关不看教材吗
  3. pi启动configtool
  4. 阿里云盘秒传使用方法
  5. vs2015社区版有账号后仍然过期
  6. cad填充密度怎么调整_CAD填充比例调好了,填充物数量怎么调,就是密度怎么调?...
  7. day01(计算机基本知识+JAVA基础知识+环境变量的配置+标识符命名规则+注释的分类)
  8. Android Assets里的资源保存本地
  9. 计算机网络可以划分几个阶段,计算机网络的发展可以划分为几个阶段.doc
  10. c#获取软件版本、windows用户名、windows用户目录、.net版本、windows版本等