searx_engine.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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/searxng/searxng',
  10. "wikidata_id": 'Q17639196',
  11. "official_api_documentation": 'https://searxng.github.io/searxng/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