diff --git a/src/fastwq/service/youdao.py b/src/fastwq/service/youdao.py index fcf5923..b1cd0a9 100644 --- a/src/fastwq/service/youdao.py +++ b/src/fastwq/service/youdao.py @@ -26,20 +26,26 @@ initVoice(); youdao_download_mp3 = True -@register(u'有道词典') +@register([u'有道词典-英汉', u'Youdao']) class Youdao(WebService): def __init__(self): super(Youdao, self).__init__() def _get_from_api(self, lang='eng'): - url = "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=%s&q=%s" % ( - lang, self.word) - phonetics, explains = '', '' + 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: - result = urllib2.urlopen(url, timeout=5).read() - # showInfo(str(result)) - doc = xml.etree.ElementTree.fromstring(result) + 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") @@ -51,34 +57,50 @@ class Youdao(WebService): else: phonetics = '' # fetch explanations - explains = '
'.join([node.text for node in doc.findall( - ".//custom-translation/translation/content")]) - return self.cache_this({'phonetic': phonetics, 'explains': explains}) + explains = '
'.join([node.text + for node in doc.findall( + ".//custom-translation/translation/content" + )]) + result.update({'phonetic': phonetics, 'explains': explains}) except: - return {'phonetic': phonetics, 'explains': explains} + 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'音标', 0) def fld_phonetic(self): - return self.cache_result('phonetic') if self.cached('phonetic') else self._get_from_api()['phonetic'] + return self._get_field('phonetic') @export(u'基本释义', 1) def fld_explains(self): - return self.cache_result('explains') if self.cached('explains') else self._get_from_api()['explains'] + 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) + self.word, + single_dict, + lang + ) try: result = urllib2.urlopen(url, timeout=5).read() - return u'
{1}
'.format(single_dict, result.decode('utf-8')) + return (u'
' + '
{1}
' + '
' + '
' + '' + '
').format( + single_dict, + result.decode('utf-8') + ) except: return '' @export(u'英式发音', 2) def fld_british_audio(self): - audio_url = u'http://dict.youdao.com/dictvoice?audio={}&type=1'.format( - self.word) + audio_url = u'http://dict.youdao.com/dictvoice?audio={}&type=1'.format(self.word) if youdao_download_mp3: filename = u'_youdao_{}_uk.mp3'.format(self.word) if self.download(audio_url, filename): @@ -87,8 +109,7 @@ class Youdao(WebService): @export(u'美式发音', 3) def fld_american_audio(self): - audio_url = u'http://dict.youdao.com/dictvoice?audio={}&type=2'.format( - self.word) + audio_url = u'http://dict.youdao.com/dictvoice?audio={}&type=2'.format(self.word) if youdao_download_mp3: filename = u'_youdao_{}_us.mp3'.format(self.word) if self.download(audio_url, filename): diff --git a/src/fastwq/service/youdaofr.py b/src/fastwq/service/youdaofr.py index 94559c7..0454c7f 100644 --- a/src/fastwq/service/youdaofr.py +++ b/src/fastwq/service/youdaofr.py @@ -7,26 +7,34 @@ from aqt.utils import showInfo from .base import WebService, export, register, with_styles -@register(u'有道词典-法语') +@register([u'有道词典-法语', u'Youdao-French']) class Youdaofr(WebService): def __init__(self): super(Youdaofr, self).__init__() def _get_from_api(self, lang='fr'): - url = "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=%s&q=%s" % ( - lang, self.word) - explains = '' + 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: - result = urllib2.urlopen(url, timeout=5).read() + html = self.get_response(url, timeout=5) # showInfo(str(result)) - doc = xml.etree.ElementTree.fromstring(result) + doc = xml.etree.ElementTree.fromstring(html) # fetch explanations explains = '
'.join([node.text for node in doc.findall( ".//custom-translation/translation/content")]) - return self.cache_this({'explains': explains}) + result.update({'explains': explains}) except: - return {'explains': explains} + pass + return self.cache_this(result) @export(u'基本释义', 1) def fld_explains(self): @@ -35,18 +43,25 @@ class Youdaofr(WebService): @with_styles(cssfile='_youdao.css', need_wrap_css=True, wrap_class='youdao') def _get_singledict(self, single_dict, lang='fr'): - url = "http://m.youdao.com/singledict?q=%s&dict=%s&le=%s&more=false" % ( - self.word, single_dict, lang) + 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 '
%s
' % (single_dict, single_dict, single_dict, result) + html = urllib2.urlopen(url, timeout=5).read() + return (u'
' + '
{3}
' + '
' + '
' + '' + '
').format( + single_dict, + single_dict, + single_dict, + html + ) except: return '' - # @export(u'英英释义', 4) - # def fld_ee(self): - # return self._get_singledict('ee') - @export(u'网络释义', 5) def fld_web_trans(self): return self._get_singledict('web_trans')