From 1c394462d8bc88f06a3f65c78f2eca813fa6ff66 Mon Sep 17 00:00:00 2001 From: "St.Huang" Date: Mon, 9 Jul 2018 19:00:19 +0800 Subject: [PATCH] Support Youdao Korean. fix #12 --- docs/services.md | 1 + src/fastwq/service/youdaoko.py | 79 ++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/fastwq/service/youdaoko.py diff --git a/docs/services.md b/docs/services.md index 0838757..a47fb82 100644 --- a/docs/services.md +++ b/docs/services.md @@ -20,4 +20,5 @@ - **Oxford**, https://od-api.oxforddictionaries.com/ - **Youdao-English**, [http://dict.youdao.com/...](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=eng&q=word) - **Youdao-French**, [http://dict.youdao.com/...](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=fr&q=word) + - **Youdao-Korean**, [http://dict.youdao.com/...](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=ko&q=대한민국) - **MDX Server**, You have to run mdx server by yourself first. diff --git a/src/fastwq/service/youdaoko.py b/src/fastwq/service/youdaoko.py new file mode 100644 index 0000000..3783499 --- /dev/null +++ b/src/fastwq/service/youdaoko.py @@ -0,0 +1,79 @@ +#-*- coding:utf-8 -*- +import re +import urllib2 +import xml.etree.ElementTree + +from aqt.utils import showInfo +from .base import WebService, export, register, with_styles + + +@register([u'有道词典-韩语', u'Youdao-Korean']) +class Youdaoko(WebService): + + def __init__(self): + super(Youdaoko, self).__init__() + + def _get_from_api(self, lang='ko'): + 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) + # showInfo(str(result)) + doc = xml.etree.ElementTree.fromstring(html) + # fetch explanations + explains = '
'.join([node.text for node in doc.findall( + ".//custom-translation/translation/content")]) + result.update({'explains': explains}) + except: + pass + return self.cache_this(result) + + @export(u'基本释义', 1) + def fld_explains(self): + return self.cache_result('explains') if self.cached('explains') else \ + self._get_from_api().get('explains', '') + + @with_styles(cssfile='_youdao.css', need_wrap_css=True, wrap_class='youdao') + def _get_singledict(self, single_dict, lang='ko'): + url = u"http://m.youdao.com/singledict?q={0}&dict={1}&le={2}&more=false".format( + self.word, single_dict, lang + ) + try: + html = urllib2.urlopen(url, timeout=5).read() + return (u'
' + '
{3}
' + '
' + '
' + '' + '
').format( + single_dict, + single_dict, + single_dict, + html + ) + except: + return '' + + @export(u'网络释义', 5) + def fld_web_trans(self): + return self._get_singledict('web_trans') + + @export(u'双语例句', 8) + def fld_blng_sents_part(self): + return self._get_singledict('blng_sents_part') + + @export(u'百科', 11) + def fld_baike(self): + return self._get_singledict('baike') + + @export(u'汉语词典(中)', 13) + def fld_hh(self): + return self._get_singledict('hh')