[fix] invidious engine: store random base_url in param

Two different threads ( = two different user queries) can call the request
function in a row and then the response function.  The namespace will be same
since this is the same engine.

To keep exactly the same value ``base_url`` must be stored in params and then
retrieve using ``resp.search_params["base_url"]``.

Suggested-by: @dalf https://github.com/searxng/searxng/pull/862#discussion_r799324861
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
Markus Heiser 2022-02-04 15:16:23 +01:00
parent ae804ddf40
commit e2ec6b4211
2 changed files with 13 additions and 17 deletions

View file

@ -23,16 +23,12 @@ categories = ["videos", "music"]
paging = True
time_range_support = True
# search-url
base_url = ''
base_url_rand = ''
# base_url can be overwritten by a list of URLs in the settings.yml
base_url = 'https://vid.puffyan.us'
# do search-request
def request(query, params):
global base_url_rand
time_range_dict = {
"day": "today",
"week": "week",
@ -41,11 +37,11 @@ def request(query, params):
}
if isinstance(base_url, list):
base_url_rand = random.choice(base_url)
params["base_url"] = random.choice(base_url)
else:
base_url_rand = base_url
params["base_url"] = base_url
search_url = base_url_rand + "api/v1/search?q={query}"
search_url = params["base_url"] + "/api/v1/search?q={query}"
params["url"] = search_url.format(query=quote_plus(query)) + "&page={pageno}".format(pageno=params["pageno"])
if params["time_range"] in time_range_dict:
@ -67,12 +63,12 @@ def response(resp):
embedded_url = (
'<iframe width="540" height="304" '
+ 'data-src="'
+ base_url_rand
+ 'embed/{videoid}" '
+ resp.search_params['base_url']
+ '/embed/{videoid}" '
+ 'frameborder="0" allowfullscreen></iframe>'
)
base_invidious_url = base_url_rand + "watch?v="
base_invidious_url = resp.search_params['base_url'] + "/watch?v="
for result in search_results:
rtype = result.get("type", None)

View file

@ -786,11 +786,11 @@ engines:
# Instanes will be selected randomly, see https://api.invidious.io/ for
# instances that are stable (good uptime) and close to you.
base_url:
- https://invidious.snopyta.org/
- https://vid.puffyan.us/
- https://invidious.kavin.rocks/
- https://invidio.xamh.de/
- https://inv.riverside.rocks/
- https://invidious.snopyta.org
- https://vid.puffyan.us
# - https://invidious.kavin.rocks # Error 1020 // Access denied by Cloudflare
- https://invidio.xamh.de
- https://inv.riverside.rocks
shortcut: iv
timeout: 3.0
disabled: true