[feat] results: automatically set embedded stream url for video results

Currently, many engines that provide video results call the same
`get_embedded_stream_url` method for setting the `iframe_src`. There
is no value in that because this logic is engine-specific and probably
many video engines forgot to implement this.

With these changes, it's done automatically, so engine implementors
don't have to worry about setting an `iframe_src` (unless the engine
explicitly has a field for it).
This commit is contained in:
Bnyro
2026-07-29 17:55:53 +02:00
parent 8f452ee892
commit 86008c9dd6
3 changed files with 9 additions and 1 deletions

View File

@@ -15,6 +15,7 @@
__all__ = [
"Result",
"MainResult",
"LegacyResult",
"KeyValue",
"EngineResults",
"AnswerSet",

View File

@@ -31,6 +31,7 @@ from collections.abc import Callable
import msgspec
from searx import logger
from searx.utils import get_embedded_stream_url
log = logger.getChild("result_types")
@@ -480,6 +481,7 @@ class LegacyResult(dict[str, t.Any]):
category: str
publishedDate: datetime.datetime | None
pubdate: str = ""
iframe_src: str | None
# infobox result
urls: list[dict[str, str]]
@@ -509,6 +511,7 @@ class LegacyResult(dict[str, t.Any]):
self["score"] = self.get("score", 0)
self["category"] = self.get("category", "")
self["publishedDate"] = self.get("publishedDate")
self["iframe_src"] = self.get("iframe_src")
if "infobox" in self:
self["urls"] = self.get("urls", [])
@@ -531,6 +534,10 @@ class LegacyResult(dict[str, t.Any]):
DeprecationWarning,
)
# TODO: move into typed video results class once it is implemented # pylint: disable=fixme
if self.template == "videos.html" and self.url and not self.iframe_src:
self.iframe_src = get_embedded_stream_url(self.url)
def __getattr__(self, name: str, default: t.Any = UNSET) -> t.Any:
if default == UNSET and name not in self:
raise AttributeError(f"LegacyResult object has no field named: {name}")

View File

@@ -592,7 +592,7 @@ def eval_xpath_getindex(
return default
def get_embeded_stream_url(url: str):
def get_embedded_stream_url(url: str):
"""
Converts a standard video URL into its embed format. Supported services include Youtube,
Facebook, Instagram, TikTok, Dailymotion, and Bilibili.