diff --git a/addons21/fastwq/service/dict/cambridge.py b/addons21/fastwq/service/dict/cambridge.py
index 78c8b68..4a1a38d 100644
--- a/addons21/fastwq/service/dict/cambridge.py
+++ b/addons21/fastwq/service/dict/cambridge.py
@@ -60,11 +60,13 @@ class Cambridge(WebService):
for tag in tags:
i = tag.find('span', class_='def-info')
d = tag.find('b', class_='def')
+ trans = tag.find('span', class_='trans')
es = tag.find_all('div', class_='examp emphasized')
l.append(
- u'
{0}{1}{2}'.format(
+ u'{0}{1}{2}{3}'.format(
u'{0}'.format(i.get_text()) if i else u'',
u'{0}'.format(d.get_text()) if d else u'',
+ u'{0}'.format(trans.get_text()) if trans else u'',
u''.join(
u'{0}
'.format(e.get_text()) if e else u''
for e in es
diff --git a/addons21/fastwq/service/dict/longman.py b/addons21/fastwq/service/dict/longman.py
index fc40a2d..511b737 100644
--- a/addons21/fastwq/service/dict/longman.py
+++ b/addons21/fastwq/service/dict/longman.py
@@ -4,6 +4,7 @@ import os
import re
from bs4 import Tag
from ..base import *
+from ...utils.misc import format_multi_query_word
longman_download_mp3 = True
@@ -17,7 +18,7 @@ class Longman(WebService):
super(Longman, self).__init__()
def _get_from_api(self):
- url = 'https://www.ldoceonline.com/dictionary/{}'.format(self.quote_word)
+ url = 'https://www.ldoceonline.com/dictionary/{}'.format(format_multi_query_word(self.quote_word))
data = self.get_response(url)
soup = parse_html(data)
# Top Container
diff --git a/addons21/fastwq/service/dict/oxford_learning.py b/addons21/fastwq/service/dict/oxford_learning.py
index 88c1b6d..321105b 100644
--- a/addons21/fastwq/service/dict/oxford_learning.py
+++ b/addons21/fastwq/service/dict/oxford_learning.py
@@ -3,6 +3,7 @@
from bs4 import Tag
from ..base import *
+from ...utils.misc import format_multi_query_word
#filterwarnings('ignore')
@@ -22,7 +23,7 @@ class OxfordLearning(WebService):
:param word:
:rtype: WebWord
"""
- qry_url = u'https://www.oxfordlearnersdictionaries.com/definition/english/{}'.format(word)
+ qry_url = u'https://www.oxfordlearnersdictionaries.com/definition/english/{}'.format(format_multi_query_word(word))
retried = 10
while retried:
@@ -42,6 +43,8 @@ class OxfordLearning(WebService):
self.cache_this(
{
'phonetic': '{} {}'.format(web_word.wd_phon_bre, web_word.wd_phon_nam),
+ 'phon_bre': '{}'.format(web_word.wd_phon_bre),
+ 'phon_ame': '{}'.format(web_word.wd_phon_nam),
'pos': web_word.wd_pos,
'img_full': web_word.wd_image_full_url,
'img_thumb': web_word.wd_image_thumb_url,
@@ -54,6 +57,8 @@ class OxfordLearning(WebService):
self.cache_this(
{
'phonetic': '',
+ 'phon_bre': '',
+ 'phon_ame': '',
'pos': '',
'img_full': '',
'img_thumb': '',
@@ -68,6 +73,14 @@ class OxfordLearning(WebService):
def fld_phonetic(self):
return self._get_single_dict('phonetic')
+ @export('AME_PHON')
+ def fld_phonetic_us(self):
+ return self._get_single_dict('phon_ame')
+
+ @export('BRE_PHON')
+ def fld_phonetic_uk(self):
+ return self._get_single_dict('phon_bre')
+
@export([u'词性', u'POS'])
def fld_pos(self):
return self._get_single_dict('pos')
diff --git a/addons21/fastwq/utils/misc.py b/addons21/fastwq/utils/misc.py
index f9df336..e76859c 100644
--- a/addons21/fastwq/utils/misc.py
+++ b/addons21/fastwq/utils/misc.py
@@ -60,6 +60,16 @@ def get_icon(filename):
return QIcon(path)
+# Some query words like 'Saudi Arabia' is comprised by two or more words that split by '%20'(space),
+# it is an invalid query format. (Validated Dictionary: Longman, oxford learning)
+def format_multi_query_word(words: str):
+ _space = '%20'
+ if words is None or _space not in words:
+ return words
+
+ return words.lower().replace(_space, '-')
+
+
class MapDict(dict):
"""
Example: