diff options
Diffstat (limited to 'searx/engines/soundcloud.py')
| -rw-r--r-- | searx/engines/soundcloud.py | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/searx/engines/soundcloud.py b/searx/engines/soundcloud.py index 23032223e..08df9aa04 100644 --- a/searx/engines/soundcloud.py +++ b/searx/engines/soundcloud.py @@ -1,14 +1,23 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """SoundCloud is a German audio streaming service.""" +from __future__ import annotations import re -from urllib.parse import quote_plus, urlencode +import typing import datetime +from urllib.parse import quote_plus, urlencode + from dateutil import parser from lxml import html from searx.network import get as http_get +from searx.enginelib import EngineCache + +if typing.TYPE_CHECKING: + import logging + + logger: logging.Logger about = { "website": "https://soundcloud.com", @@ -28,7 +37,6 @@ HTML frontend of the common WEB site. """ cid_re = re.compile(r'client_id:"([^"]*)"', re.I | re.U) -guest_client_id = "" results_per_page = 10 soundcloud_facet = "model" @@ -48,6 +56,10 @@ app_locale_map = { "sv": "sv", } +CACHE: EngineCache +"""Persistent (SQLite) key/value cache that deletes its values after ``expire`` +seconds.""" + def request(query, params): @@ -55,6 +67,12 @@ def request(query, params): # - user_id=451561-497874-703312-310156 # - app_version=1740727428 + guest_client_id = CACHE.get("guest_client_id") + if guest_client_id is None: + guest_client_id = get_client_id() + if guest_client_id: + CACHE.set(key="guest_client_id", value=guest_client_id) + args = { "q": query, "offset": (params['pageno'] - 1) * results_per_page, @@ -104,12 +122,12 @@ def response(resp): return results -def init(engine_settings=None): # pylint: disable=unused-argument - global guest_client_id # pylint: disable=global-statement - guest_client_id = get_client_id() +def init(engine_settings): # pylint: disable=unused-argument + global CACHE # pylint: disable=global-statement + CACHE = EngineCache(engine_settings["name"]) # type:ignore -def get_client_id() -> str: +def get_client_id() -> str | None: client_id = "" url = "https://soundcloud.com" @@ -143,4 +161,4 @@ def get_client_id() -> str: logger.info("using client_id '%s' for soundclud queries", client_id) else: logger.warning("missing valid client_id for soundclud queries") - return client_id + return client_id or None |