#-*- coding:utf-8 -*-
import re
import urllib2
import xml.etree.ElementTree
from aqt.utils import showInfo
from ..base import WebService, export, register, with_styles
js = '''
var initVoice = function () {
var player = document.getElementById('dictVoice');
document.addEventListener('click', function (e) {
var target = e.target;
if (target.hasAttribute('role') && target.getAttribute('role').indexOf('dict_audio_js') >= 0) {
var url = target.getAttribute('data-rel');
player.setAttribute('src', url);
player.volume = 1;
player.play();
e.preventDefault();
}
}, false);
};
initVoice();
'''
youdao_download_mp3 = True
@register([u'有道词典-英汉', u'Youdao'])
class Youdao(WebService):
def __init__(self):
super(Youdao, self).__init__()
def _get_from_api(self, lang='eng'):
url = (u'http://dict.youdao.com/fsearch?client=deskdict'
'&keyfrom=chrome.extension&pos=-1'
'&doctype=xml&xmlVersion=3.2'
'&dogVersion=1.0&vendor=unknown'
'&appVer=3.1.17.4208'
'&le={0}&q={1}').format(lang, self.word)
result ={
'phonetic': '',
'explains':'',
}
try:
html = self.get_response(url, timeout=5)
doc = xml.etree.ElementTree.fromstring(html)
# fetch symbols
symbol, uk_symbol, us_symbol = doc.findtext(".//phonetic-symbol"), doc.findtext(
".//uk-phonetic-symbol"), doc.findtext(".//us-phonetic-symbol")
if uk_symbol and us_symbol:
#phonetics = 'UK [%s] US [%s]' % (uk_symbol, us_symbol)
phonetics = '/%s/' % (us_symbol)
elif symbol:
phonetics = '/%s/' % symbol
else:
phonetics = ''
# fetch explanations
explains = '
'.join([node.text
for node in doc.findall(
".//custom-translation/translation/content"
)])
result.update({'phonetic': phonetics, 'explains': explains})
except:
pass
return self.cache_this(result)
def _get_field(self, key, default=u''):
return self.cache_result(key) if self.cached(key) else self._get_from_api().get(key, default)
@export(u'音标')
def fld_phonetic(self):
return self._get_field('phonetic')
@export(u'基本释义')
def fld_explains(self):
return self._get_field('explains')
@with_styles(cssfile='_youdao.css', js=js, need_wrap_css=True, wrap_class='youdao')
def _get_singledict(self, single_dict, lang='eng'):
url = u"http://m.youdao.com/singledict?q={0}&dict={1}&le={2}&more=false".format(
self.word,
single_dict,
lang
)
try:
result = urllib2.urlopen(url, timeout=5).read()
return (u'