.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
online_url_search.py
Go to the documentation of this file.
1# SPDX-License-Identifier: AGPL-3.0-or-later
2"""Processor used for ``online_url_search`` engines."""
3
4import typing as t
5import re
6
7from .online import OnlineProcessor, OnlineParams
8
9if t.TYPE_CHECKING:
10 from .abstract import EngineProcessor
11 from searx.search.models import SearchQuery
12
13
14search_syntax = {
15 "http": re.compile(r"https?:\/\/[^ ]*"),
16 "ftp": re.compile(r"ftps?:\/\/[^ ]*"),
17 "data:image": re.compile("data:image/[^; ]*;base64,[^ ]*"),
18}
19"""Search syntax used for a URL search."""
20
21
22class UrlParams(t.TypedDict):
23 """URL request parameters."""
24
25 search_urls: dict[str, str | None]
26
27
28class OnlineUrlSearchParams(UrlParams, OnlineParams): # pylint: disable=duplicate-bases
29 """Request parameters of a ``online_url_search`` engine."""
30
31
33 """Processor class used by ``online_url_search`` engines."""
34
35 engine_type: str = "online_url_search"
36
37 def get_params(self, search_query: "SearchQuery", engine_category: str) -> OnlineUrlSearchParams | None:
38 """Returns a dictionary with the :ref:`request params <engine request
39 online_currency>` (:py:obj:`OnlineUrlSearchParams`). ``None`` is
40 returned if the search query does not match :py:obj:`search_syntax`."""
41
42 online_params: OnlineParams | None = super().get_params(search_query, engine_category)
43 if online_params is None:
44 return None
45
46 search_urls: dict[str, str | None] = {}
47 has_match: bool = False
48
49 for url_schema, url_re in search_syntax.items():
50 search_urls[url_schema] = None
51 m = url_re.search(search_query.query)
52 if m:
53 has_match = True
54 search_urls[url_schema] = m[0]
55
56 if not has_match:
57 return None
58
59 params: OnlineUrlSearchParams = {
60 **online_params,
61 "search_urls": search_urls,
62 }
63
64 return params
OnlineUrlSearchParams|None get_params(self, "SearchQuery" search_query, str engine_category)