mirror of
https://github.com/searxng/searxng.git
synced 2026-07-18 05:51:24 +00:00
64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""Picjumbo_ provides free stock photos.
|
|
|
|
.. _Picjumbo: https://picjumbo.com
|
|
"""
|
|
|
|
from urllib.parse import urlparse, urlunparse
|
|
import typing as t
|
|
|
|
from lxml import html
|
|
|
|
from searx.result_types import EngineResults
|
|
from searx.utils import eval_xpath, eval_xpath_list, extract_text
|
|
|
|
if t.TYPE_CHECKING:
|
|
from searx.extended_types import SXNG_Response
|
|
from searx.search.processors import OnlineParams
|
|
|
|
|
|
about = {
|
|
"website": "https://picjumbo.com",
|
|
"wikidata_id": None,
|
|
"official_api_documentation": None,
|
|
"use_official_api": False,
|
|
"require_api_key": False,
|
|
"results": "HTML",
|
|
}
|
|
|
|
base_url = "https://picjumbo.com"
|
|
|
|
categories = ["images"]
|
|
paging = True
|
|
|
|
|
|
def request(query: str, params: "OnlineParams") -> None:
|
|
params["url"] = f"{base_url}/search/{query}/page/{params['pageno']}"
|
|
|
|
|
|
def _get_max_res_url(url: str) -> str:
|
|
"""Get the maximum resolution of the image based on the thumbnail URL."""
|
|
parsed_url = urlparse(url)
|
|
max_res_url = parsed_url._replace(query="w=10000&quality=100")
|
|
return urlunparse(max_res_url)
|
|
|
|
|
|
def response(resp: "SXNG_Response"):
|
|
res = EngineResults()
|
|
|
|
doc = html.fromstring(resp.text)
|
|
|
|
for result in eval_xpath_list(doc, "//div[contains(@class, 'photo_query')]/div[contains(@class, 'photo_item')]"):
|
|
thumbnail = extract_text(eval_xpath(result, ".//img[contains(@class, 'image')]/@src")) or ""
|
|
res.add(
|
|
res.types.Image(
|
|
url=extract_text(eval_xpath(result, ".//a[contains(@class, 'image')]/@href")) or "",
|
|
title=extract_text(eval_xpath(result, ".//h3")) or "",
|
|
content=extract_text(eval_xpath(result, ".//meta[@itemprop='keywords']/@content")) or "",
|
|
thumbnail_src=thumbnail,
|
|
img_src=_get_max_res_url(thumbnail),
|
|
)
|
|
)
|
|
|
|
return res
|