summaryrefslogtreecommitdiff
path: root/searx/engines/soundcloud.py
diff options
context:
space:
mode:
Diffstat (limited to 'searx/engines/soundcloud.py')
-rw-r--r--searx/engines/soundcloud.py32
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