From e36216552c31e1c63fc505285b0cddc1659979bc Mon Sep 17 00:00:00 2001 From: sthoo Date: Sun, 28 Oct 2018 22:44:50 +0800 Subject: [PATCH] Add cambridge ECS & ECT --- addons/fastwq/service/dict/cambridge.py | 13 ++++++++----- addons/fastwq/service/dict/cambridge_cs.py | 12 ++++++++++++ addons/fastwq/service/dict/cambridge_ct.py | 12 ++++++++++++ addons/fastwq/service/dict/cambridge_ee.py | 12 ++++++++++++ addons/fastwq/service/manager.py | 4 ++++ addons21/fastwq/service/dict/cambridge.py | 10 ++++++---- addons21/fastwq/service/dict/cambridge_cs.py | 12 ++++++++++++ addons21/fastwq/service/dict/cambridge_ct.py | 12 ++++++++++++ addons21/fastwq/service/dict/cambridge_ee.py | 12 ++++++++++++ addons21/fastwq/service/manager.py | 4 ++++ 10 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 addons/fastwq/service/dict/cambridge_cs.py create mode 100644 addons/fastwq/service/dict/cambridge_ct.py create mode 100644 addons/fastwq/service/dict/cambridge_ee.py create mode 100644 addons21/fastwq/service/dict/cambridge_cs.py create mode 100644 addons21/fastwq/service/dict/cambridge_ct.py create mode 100644 addons21/fastwq/service/dict/cambridge_ee.py diff --git a/addons/fastwq/service/dict/cambridge.py b/addons/fastwq/service/dict/cambridge.py index 079cc2b..c61e6b6 100644 --- a/addons/fastwq/service/dict/cambridge.py +++ b/addons/fastwq/service/dict/cambridge.py @@ -2,28 +2,31 @@ import os from ..base import * -cambridge_url_base = u'https://dictionary.cambridge.org' +cambridge_url_base = u'https://dictionary.cambridge.org/dictionary/english/' cambridge_download_mp3 = True cambridge_download_img = True -@register([u'剑桥英英', u'Cambridge']) class Cambridge(WebService): def __init__(self): super(Cambridge, self).__init__() + def _get_url(self): + return cambridge_url_base + def _get_from_api(self): - data = self.get_response(u'{0}/dictionary/english/{1}'.format(cambridge_url_base, self.quote_word)) + data = self.get_response(u'{0}{1}'.format(self._get_url(), self.quote_word)) soup = parse_html(data) result = { 'pronunciation': {'AmE': '', 'BrE': '', 'AmEmp3': '', 'BrEmp3': ''}, 'image': '', 'thumb': '', - 'def': '' + 'def': '', + 'def_list': [] } #english - element = soup.find('div', class_='link') + element = soup.find('div', class_='di-body') if element: #页 elements = element.find_all('div', class_='entry-body__el clrd js-share-holder') diff --git a/addons/fastwq/service/dict/cambridge_cs.py b/addons/fastwq/service/dict/cambridge_cs.py new file mode 100644 index 0000000..c431c65 --- /dev/null +++ b/addons/fastwq/service/dict/cambridge_cs.py @@ -0,0 +1,12 @@ +#-*- coding:utf-8 -*- +from ..base import * +from .cambridge import Cambridge + +@register([u'剑桥词典-英汉简', u'Cambridge(英汉简)']) +class CambridgeCS(Cambridge): + + def __init__(self): + super(CambridgeCS, self).__init__() + + def _get_url(self): + return u'https://dictionary.cambridge.org/us/dictionary/english-chinese-simplified/' diff --git a/addons/fastwq/service/dict/cambridge_ct.py b/addons/fastwq/service/dict/cambridge_ct.py new file mode 100644 index 0000000..da27d43 --- /dev/null +++ b/addons/fastwq/service/dict/cambridge_ct.py @@ -0,0 +1,12 @@ +#-*- coding:utf-8 -*- +from ..base import * +from .cambridge import Cambridge + +@register([u'剑桥词典-英汉繁', u'Cambridge(英汉繁)']) +class CambridgeCT(Cambridge): + + def __init__(self): + super(CambridgeCT, self).__init__() + + def _get_url(self): + return u'https://dictionary.cambridge.org/us/dictionary/english-chinese-traditional/' diff --git a/addons/fastwq/service/dict/cambridge_ee.py b/addons/fastwq/service/dict/cambridge_ee.py new file mode 100644 index 0000000..7f4d7b5 --- /dev/null +++ b/addons/fastwq/service/dict/cambridge_ee.py @@ -0,0 +1,12 @@ +#-*- coding:utf-8 -*- +from ..base import * +from .cambridge import Cambridge + +@register([u'剑桥词典-英英', u'Cambridge(English)']) +class CambridgeEE(Cambridge): + + def __init__(self): + super(CambridgeEE, self).__init__() + + def _get_url(self): + return u'https://dictionary.cambridge.org/dictionary/english/' diff --git a/addons/fastwq/service/manager.py b/addons/fastwq/service/manager.py index 15bf7e9..9743b93 100644 --- a/addons/fastwq/service/manager.py +++ b/addons/fastwq/service/manager.py @@ -94,6 +94,8 @@ class ServiceManager(object): continue if not(issubclass(clazz, WebService) or issubclass(clazz, LocalService)): continue + if getattr(clazz, '__register_label__', None) is None: + continue service = service_wrap(clazz, *args) service.__title__ = getattr(clazz, '__register_label__', name) service.__unique__ = name @@ -103,6 +105,8 @@ class ServiceManager(object): # get the customized local services if issubclass(clazz, LocalService): local_custom_services.append(service) + web_services = sorted(web_services, key=lambda service: service.__title__) + local_custom_services = sorted(local_custom_services, key=lambda service: service.__title__) return web_services, local_custom_services def _get_available_local_services(self): diff --git a/addons21/fastwq/service/dict/cambridge.py b/addons21/fastwq/service/dict/cambridge.py index ae9feb5..bfb37b4 100644 --- a/addons21/fastwq/service/dict/cambridge.py +++ b/addons21/fastwq/service/dict/cambridge.py @@ -2,18 +2,20 @@ import os from ..base import * -cambridge_url_base = u'https://dictionary.cambridge.org' +cambridge_url_base = u'https://dictionary.cambridge.org/dictionary/english/' cambridge_download_mp3 = True cambridge_download_img = True -@register([u'剑桥英英', u'Cambridge']) class Cambridge(WebService): def __init__(self): super(Cambridge, self).__init__() + def _get_url(self): + return cambridge_url_base + def _get_from_api(self): - data = self.get_response(u'{0}/dictionary/english/{1}'.format(cambridge_url_base, self.quote_word)) + data = self.get_response(u'{0}{1}'.format(self._get_url(), self.quote_word)) soup = parse_html(data) result = { 'pronunciation': {'AmE': '', 'BrE': '', 'AmEmp3': '', 'BrEmp3': ''}, @@ -24,7 +26,7 @@ class Cambridge(WebService): } #english - element = soup.find('div', class_='link') + element = soup.find('div', class_='di-body') if element: #页 elements = element.find_all('div', class_='entry-body__el clrd js-share-holder') diff --git a/addons21/fastwq/service/dict/cambridge_cs.py b/addons21/fastwq/service/dict/cambridge_cs.py new file mode 100644 index 0000000..c431c65 --- /dev/null +++ b/addons21/fastwq/service/dict/cambridge_cs.py @@ -0,0 +1,12 @@ +#-*- coding:utf-8 -*- +from ..base import * +from .cambridge import Cambridge + +@register([u'剑桥词典-英汉简', u'Cambridge(英汉简)']) +class CambridgeCS(Cambridge): + + def __init__(self): + super(CambridgeCS, self).__init__() + + def _get_url(self): + return u'https://dictionary.cambridge.org/us/dictionary/english-chinese-simplified/' diff --git a/addons21/fastwq/service/dict/cambridge_ct.py b/addons21/fastwq/service/dict/cambridge_ct.py new file mode 100644 index 0000000..da27d43 --- /dev/null +++ b/addons21/fastwq/service/dict/cambridge_ct.py @@ -0,0 +1,12 @@ +#-*- coding:utf-8 -*- +from ..base import * +from .cambridge import Cambridge + +@register([u'剑桥词典-英汉繁', u'Cambridge(英汉繁)']) +class CambridgeCT(Cambridge): + + def __init__(self): + super(CambridgeCT, self).__init__() + + def _get_url(self): + return u'https://dictionary.cambridge.org/us/dictionary/english-chinese-traditional/' diff --git a/addons21/fastwq/service/dict/cambridge_ee.py b/addons21/fastwq/service/dict/cambridge_ee.py new file mode 100644 index 0000000..7f4d7b5 --- /dev/null +++ b/addons21/fastwq/service/dict/cambridge_ee.py @@ -0,0 +1,12 @@ +#-*- coding:utf-8 -*- +from ..base import * +from .cambridge import Cambridge + +@register([u'剑桥词典-英英', u'Cambridge(English)']) +class CambridgeEE(Cambridge): + + def __init__(self): + super(CambridgeEE, self).__init__() + + def _get_url(self): + return u'https://dictionary.cambridge.org/dictionary/english/' diff --git a/addons21/fastwq/service/manager.py b/addons21/fastwq/service/manager.py index 34d5ba4..b6fb396 100644 --- a/addons21/fastwq/service/manager.py +++ b/addons21/fastwq/service/manager.py @@ -84,6 +84,8 @@ class ServiceManager(object): continue if not(issubclass(clazz, WebService) or issubclass(clazz, LocalService)): continue + if getattr(clazz, '__register_label__', None) is None: + continue service = service_wrap(clazz, *args) service.__title__ = getattr(clazz, '__register_label__', name) service.__unique__ = name @@ -93,6 +95,8 @@ class ServiceManager(object): # get the customized local services if issubclass(clazz, LocalService): local_custom_services.append(service) + web_services = sorted(web_services, key=lambda service: service.__title__) + local_custom_services = sorted(local_custom_services, key=lambda service: service.__title__) return web_services, local_custom_services def _get_available_local_services(self):