今天晚上闲着没事(其实事情很多的,只是不太想干,sign~)又开始折腾python了~之前用c#做了一个命令行下的简单的翻译工具,今天翻出来用的时候发现不太好用,于是乎,想再做一个,这次就用python吧~实现起来应该不难(一开始是这么想的~)
////// Time : 2015年12月 //////
1.准备工作
Windows [Version 10.0.10586] (win10 th2)
python 3.5.2
pyglet
AvBin.dll
2.代码
准备完成之后,开始上马!。。。。。。。
导入以下的库(关于程序的详细说明,我都放在注释里面了,个人偏好,虽然这样会直接导致我的代码很难看很难看!!!)
import urllib.request
# 解析接口返回的json数据
import json
import sys
# 播放音频的库
import pyglet
# 使用pprint()可以美化输出,方便我们之后查看接口返回的json数据
from pprint import pprint
# 如果tts.mp3不存在,就新建一个这个文件
ttsfile = open("tts.mp3",'w')
# 接口调用的地址
url = 'http://open.iciba.com/dsapi'
req = urllib.request.urlopen(url)
# 读取数据
data = req.read()
# 这是个大坑,关于编码的,我先后尝试了很多方法去解析返回的byte数据中的数据,因为返回的数据是ascii编码格式的,
# 我试过decode("utf-8") decode().encode()等等等等很多很多,最后无意中看到有人这么写,decode("unicode_escape")试了之后,
# 发现果然有用
data = data.decode("unicode_escape")
tts_url = 0;
if type(data) == str:
# 将str转为dict
b = json.loads(data)
print(b['caption'] + " => " + b['dateline'])
print(b['content'])
print(b['translation'])
tts_url = b['tts']
# 可以通过uri(指定资源符)下载数据,我试过吧接收到数据直接写入空白
# 的mp3文件中,很明显这样是不行,因为传输的数据中不是只有你需要的MP3
# byte ==>> 暂时是这么理解的,总之
# ttsfile.write(data) 这样直接写进去是不行的
urllib.request.urlretrieve(tts_url,"tts.mp3")
# 导入一个库
pyglet.lib.load_library('avbin64')
pyglet.hava_avbin = True
window = pyglet.window.Window()
# 加载音频文件,并播放
source = pyglet.media.load("tts.mp3")
source.play()
pyglet.app.run()
以上就是所有的代码了~
3.来来来,资源啊分析啊什么的,真正有用的都在这呢
- 金山词霸api:http://open.iciba.com/?c=wiki&t=cc 这里有关于调用接口的介绍,查词接口的调用需要注册然后它会发送一个key到你的注册邮箱中,调用每日一句的接口不需要key直接用就好了,http://open.iciba.com/dsapi 这个是查询当日每日一句的地址,没有添加时间默认是当天的时间.具体参数参考调用手册
- pyglet 官方网站:http://pyglet.readthedocs.org/en/latest/index.html里面有关于这个库的基本使用教程,音频播放就是借助这个库来实现的,之前看过一下大牛的博客,说是什么都搬已有的库不会又长足的进步,我听认同的,以后可能会写一个decode来解码MP3文件,自己具体实现以下
- AvBin.dll 下载地址:https://code.google.com/p/avbin/ 其实pyglet是用了avbin的接口来播放音频的~上面的代码中
pyglet.lib.load_library(‘avbin64’)
pyglet.hava_avbin = True
就是使用了这个。如果不引入这个文件是没办法播放mp3文件的。感兴趣的话可以下下来看看,github地址:https://github.com/AVbin/AVbin 这里有源代码
- 编码问题:推荐阮一峰的一篇博客:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html里面对于ascii utf-8 unicode等格式的编码介绍挺详细的,通俗易懂
- 关于urllib.request的使用网上有很多很多,大家可以去找找,这里我就不详细介绍了
PS:大家以后搜关于python教程的时候最好带上 版本号 比如 “python 3” 不然搜出来的很多东西大概都不能用,最后写进自己代码的时候各种报错很浪费时间的。。。。
再PS:如果代码报错,可以邮我啊:1823403153@qq.com