From bb487e1259c9b8caf70a2505d22ef90d38a0ace5 Mon Sep 17 00:00:00 2001 From: Javan Zhu Date: Sun, 20 Jan 2019 09:44:22 +0800 Subject: [PATCH] Fix bug that can not query word like 'Saudi Arabia' by longman and oxford learning --- addons21/fastwq/service/dict/longman.py | 3 ++- addons21/fastwq/service/dict/oxford_learning.py | 3 ++- addons21/fastwq/utils/misc.py | 10 ++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) 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 0068aab..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: 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: