mirror of
https://github.com/searxng/searxng.git
synced 2026-06-22 17:48:33 +02:00
108 lines
3.2 KiB
Python
108 lines
3.2 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""Startpagina is a Netherlands search engine by `Kompas`_. It takes all its
|
|
results from Google.
|
|
|
|
.. _Kompas: https://www.kompaspublishing.nl/
|
|
"""
|
|
|
|
import typing as t
|
|
from urllib.parse import urlencode
|
|
|
|
from dateutil import parser
|
|
|
|
from searx.utils import format_duration
|
|
from searx.result_types import EngineResults
|
|
|
|
if t.TYPE_CHECKING:
|
|
from searx.extended_types import SXNG_Response
|
|
from searx.search.processors import OnlineParams
|
|
|
|
about = {
|
|
"website": "https://startpagina.nl",
|
|
"wikidata_id": None,
|
|
"official_api_documentation": None,
|
|
"use_official_api": False,
|
|
"require_api_key": False,
|
|
"results": "JSON",
|
|
}
|
|
|
|
language = "ne"
|
|
paging = True
|
|
safesearch = True
|
|
|
|
categories = ["general"]
|
|
startpagina_categ = "web"
|
|
"""Category to search in. Can be either "web", "images", "videos" or "news"."""
|
|
page_size = 10
|
|
|
|
|
|
api_url = "https://search.kompas.services"
|
|
|
|
|
|
def init(_):
|
|
if startpagina_categ not in ("web", "images", "videos", "news"):
|
|
raise ValueError("invalid search type: %s" % startpagina_categ)
|
|
|
|
|
|
def request(query: str, params: "OnlineParams") -> None:
|
|
args = {"q": query, "page_size": page_size, "page": params["pageno"]}
|
|
params["url"] = f"{api_url}/api/v2/search/{startpagina_categ}/?{urlencode(args)}"
|
|
|
|
|
|
def response(resp: "SXNG_Response"):
|
|
res = EngineResults()
|
|
|
|
json_resp = resp.json()
|
|
|
|
for result in json_resp["results"]:
|
|
if startpagina_categ == "web":
|
|
res.add(
|
|
res.types.MainResult(
|
|
url=result["original_url"],
|
|
title=result["title"],
|
|
content=result["description"],
|
|
)
|
|
)
|
|
elif startpagina_categ == "news":
|
|
publishedDate = None
|
|
try:
|
|
publishedDate = parser.parse(result["date"])
|
|
except parser.ParserError:
|
|
pass
|
|
|
|
res.add(
|
|
res.types.MainResult(
|
|
url=result["original_url"],
|
|
title=result["title"],
|
|
content=result["description"],
|
|
thumbnail=result["image"]["thumbnail_url"],
|
|
publishedDate=publishedDate,
|
|
)
|
|
)
|
|
elif startpagina_categ == "videos":
|
|
res.add(
|
|
res.types.LegacyResult(
|
|
template="videos.html",
|
|
url=result["original_url"],
|
|
title=result["title"],
|
|
content=result["description"],
|
|
thumbnail=result["video"]["thumbnail_url"],
|
|
length=format_duration(result["video"]["duration"]),
|
|
)
|
|
)
|
|
elif startpagina_categ == "images":
|
|
res.add(
|
|
res.types.Image(
|
|
url=result["original_url"],
|
|
title=result["title"],
|
|
content=result["description"],
|
|
thumbnail_src=result["image"]["thumbnail_url"],
|
|
resolution=f"{result['image']['width']}x{result['image']['height']}",
|
|
)
|
|
)
|
|
|
|
for related in json_resp["related_searches"]:
|
|
res.add(res.types.LegacyResult(suggestion=related["query"]))
|
|
|
|
return res
|