96def request(query: str, params:
"OnlineParams") ->
None:
97 lang: str |
None = traits.get_language(params[
"searxng_locale"], traits.all_locale)
100 +
"/s/{search_query}/?page={pageno}"
101 +
"&yearFrom={zlib_year_from}"
102 +
"&yearTo={zlib_year_to}"
103 +
"&languages[]={lang}"
104 +
"&extensions[]={zlib_ext}"
106 params[
"url"] = search_url.format(
107 search_query=quote(query),
108 pageno=params[
"pageno"],
110 zlib_year_from=zlib_year_from,
111 zlib_year_to=zlib_year_to,
114 params[
"verify"] =
False
175 """Fetch languages and other search arguments from zlibrary's search form."""
185 def _use_old_values():
187 engine_traits.all_locale = ENGINE_TRAITS[
"z-library"][
"all_locale"]
188 engine_traits.custom = ENGINE_TRAITS[
"z-library"][
"custom"]
189 engine_traits.languages = ENGINE_TRAITS[
"z-library"][
"languages"]
192 resp = get(base_url, verify=
False)
193 except (SearxException, httpx.HTTPError)
as exc:
194 print(f
"ERROR: zlibrary domain '{base_url}' is seized?")
200 raise RuntimeError(
"Response from zlibrary's search page is not OK.")
201 dom = html.fromstring(resp.text)
204 print(f
"ERROR: zlibrary domain is seized: {base_url}")
208 engine_traits.all_locale =
""
209 engine_traits.custom[
"ext"] = []
214 for year
in eval_xpath_list(dom,
"//div[@id='advSearch-noJS']//select[@id='sf_yearFrom']/option"):
215 l.append(year.get(
"value")
or "")
216 engine_traits.custom[
"year_from"] = l
220 for year
in eval_xpath_list(dom,
"//div[@id='advSearch-noJS']//select[@id='sf_yearTo']/option"):
221 l.append(year.get(
"value")
or "")
222 engine_traits.custom[
"year_to"] = l
226 for ext
in eval_xpath_list(dom,
"//div[@id='advSearch-noJS']//select[@id='sf_extensions']/option"):
227 l.append(ext.get(
"value")
or "")
228 engine_traits.custom[
"ext"] = l
232 language_name_locale_map: dict[str, babel.Locale] = {}
233 for locale
in babel.core.localedata.locale_identifiers():
235 loc = babel.Locale.parse(locale)
236 if loc.english_name
is None:
238 language_name_locale_map[loc.english_name.lower()] = loc
240 for x
in eval_xpath_list(dom,
"//div[@id='advSearch-noJS']//select[@id='sf_languages']/option"):
241 eng_lang = x.get(
"value")
245 locale = language_name_locale_map[eng_lang.lower()]
250 sxng_lang = language_tag(locale)
251 conflict = engine_traits.languages.get(sxng_lang)
253 if conflict != eng_lang:
254 print(
"CONFLICT: babel %s --> %s, %s" % (sxng_lang, conflict, eng_lang))
256 engine_traits.languages[sxng_lang] = eng_lang