openclipart.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """OpenClipArt (images)"""
  3. from urllib.parse import urlencode
  4. from lxml import html
  5. from searx.utils import extract_text, eval_xpath, eval_xpath_list
  6. about = {
  7. "website": 'https://openclipart.org/',
  8. "wikidata_id": 'Q979593',
  9. "official_api_documentation": None,
  10. "use_official_api": False,
  11. "require_api_key": False,
  12. "results": 'HTML',
  13. }
  14. categories = ['images']
  15. paging = True
  16. base_url = "https://openclipart.org"
  17. def request(query, params):
  18. args = {
  19. 'query': query,
  20. 'p': params['pageno'],
  21. }
  22. params['url'] = f"{base_url}/search/?{urlencode(args)}"
  23. return params
  24. def response(resp):
  25. results = []
  26. dom = html.fromstring(resp.text)
  27. for result in eval_xpath_list(dom, "//div[contains(@class, 'gallery')]/div[contains(@class, 'artwork')]"):
  28. results.append(
  29. {
  30. 'template': 'images.html',
  31. 'url': base_url + extract_text(eval_xpath(result, "./a/@href")),
  32. 'title': extract_text(eval_xpath(result, "./a/img/@alt")),
  33. 'img_src': base_url + extract_text(eval_xpath(result, "./a/img/@src")),
  34. }
  35. )
  36. return results