searx_engine.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """
  3. Searx (all)
  4. """
  5. from json import loads
  6. from searx.engines import categories as searx_categories
  7. # about
  8. about = {
  9. "website": 'https://github.com/searx/searx',
  10. "wikidata_id": 'Q17639196',
  11. "official_api_documentation": 'https://searx.github.io/searx/dev/search_api.html',
  12. "use_official_api": True,
  13. "require_api_key": False,
  14. "results": 'JSON',
  15. }
  16. categories = searx_categories.keys()
  17. # search-url
  18. instance_urls = []
  19. instance_index = 0
  20. # do search-request
  21. def request(query, params):
  22. global instance_index
  23. params['url'] = instance_urls[instance_index % len(instance_urls)]
  24. params['method'] = 'POST'
  25. instance_index += 1
  26. params['data'] = {
  27. 'q': query,
  28. 'pageno': params['pageno'],
  29. 'language': params['language'],
  30. 'time_range': params['time_range'],
  31. 'category': params['category'],
  32. 'format': 'json'
  33. }
  34. return params
  35. # get response from search-request
  36. def response(resp):
  37. response_json = loads(resp.text)
  38. results = response_json['results']
  39. for i in ('answers', 'infoboxes'):
  40. results.extend(response_json[i])
  41. results.extend({'suggestion': s} for s in response_json['suggestions'])
  42. results.append({'number_of_results': response_json['number_of_results']})
  43. return results