only_show_green_results.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. '''
  2. searx is free software: you can redistribute it and/or modify
  3. it under the terms of the GNU Affero General Public License as published by
  4. the Free Software Foundation, either version 3 of the License, or
  5. (at your option) any later version.
  6. searx is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  9. GNU Affero General Public License for more details.
  10. You should have received a copy of the GNU Affero General Public License
  11. along with searx. If not, see < http://www.gnu.org/licenses/ >.
  12. (C) 2015 by Adam Tauber, <asciimoo@gmail.com>
  13. '''
  14. from flask_babel import gettext
  15. import re
  16. from searx.url_utils import urlunparse, parse_qsl, urlencode
  17. import requests
  18. name = gettext('Only show green hosted results')
  19. description = gettext('Any results not being hosted on green infrastructure will be filtered')
  20. default_on = True
  21. preference_section = 'privacy'
  22. # attach callback to the post search hook
  23. # request: flask request object
  24. # ctx: the whole local context of the pre search hook
  25. def post_search(request, search):
  26. print "post search"
  27. results = search.result_container.get_ordered_results()
  28. resultlist = enumerate(list(search.result_container._merged_results))
  29. for i, result in resultlist:
  30. print i
  31. print result
  32. if get_green(result):
  33. #result = search.result_container._merged_results[i]
  34. print('deleting result:', result)
  35. if i < len(search.result_container._merged_results):
  36. del(search.result_container._merged_results[i])
  37. return True
  38. def get_green(result):
  39. if 'parsed_url' not in result:
  40. return True
  41. print result['url']
  42. # Put a green.html template up to have access over which results are shown or not
  43. # @todo figure out a way to filter results in this callback so we don't need a special template
  44. result['template'] = 'green.html'
  45. # @todo hook up the url to our greencheck tool instead of api here
  46. response = requests.get("https://api.thegreenwebfoundation.org/greencheck/" + result['parsed_url'].netloc)
  47. data = response.json()
  48. #print(data['green'])
  49. return data['green']
  50. def on_result(request, search, result):
  51. result['green'] = get_green(result)