45def response(resp) -> EngineResults:
46 results = EngineResults()
47
48 item_list = []
49
50 if not resp.ok:
51 return results
52
53 dom = html.fromstring(resp.text)
54
55 for result in eval_xpath(dom, ".//table[@id='r']//tr"):
56
57
58
59 td_list = result.xpath("./td")
60 if len(td_list) != 2:
61
62 continue
63
64 col_from, col_to = td_list
65 _clean_up_node(col_from)
66
67 text = f"{extract_text(col_from)}"
68
69 synonyms = []
70 p_list = col_to.xpath(".//p")
71
72 for i, p_item in enumerate(p_list):
73
74 smpl: str = extract_text(p_list[i].xpath("./i[@class='smpl']"))
75 _clean_up_node(p_item)
76 p_text: str = extract_text(p_item)
77
78 if smpl:
79 p_text += " // " + smpl
80
81 if i == 0:
82 text += f" : {p_text}"
83 continue
84
85 synonyms.append(p_text)
86
87 item = results.types.Translations.Item(text=text, synonyms=synonyms)
88 item_list.append(item)
89
90
91
92
93 from_lang = resp.search_params["from_lang"][1]
94 to_lang = resp.search_params["to_lang"][1]
95 query = resp.search_params["query"]
96
97
98 autotranslate = http_get(f"{base_url}/trans/{query}/{from_lang}_{to_lang}", timeout=1.0)
99 if autotranslate.ok and autotranslate.text:
100 item_list.insert(0, results.types.Translations.Item(text=autotranslate.text))
101
102 if item_list:
103 results.add(results.types.Translations(translations=item_list, url=resp.search_params["url"]))
104 return results