yep.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # lint: pylint
  3. """Yep (general, images, news)
  4. """
  5. from datetime import datetime
  6. from urllib.parse import urlencode
  7. from searx.utils import html_to_text
  8. about = {
  9. 'website': 'https://yep.com/',
  10. 'official_api_documentation': 'https://docs.developer.yelp.com',
  11. 'use_official_api': False,
  12. 'require_api_key': False,
  13. 'results': 'JSON',
  14. }
  15. base_url = "https://api.yep.com"
  16. search_type = "web" # 'web', 'images', 'news'
  17. safesearch = True
  18. safesearch_map = {0: 'off', 1: 'moderate', 2: 'strict'}
  19. def request(query, params):
  20. args = {
  21. 'client': 'web',
  22. 'no_correct': 'false',
  23. 'q': query,
  24. 'safeSearch': safesearch_map[params['safesearch']],
  25. 'type': search_type,
  26. }
  27. params['url'] = f"{base_url}/fs/2/search?{urlencode(args)}"
  28. params['headers']['Referer'] = 'https://yep.com/'
  29. return params
  30. def _web_result(result):
  31. return {
  32. 'url': result['url'],
  33. 'title': result['title'],
  34. 'content': html_to_text(result['snippet']),
  35. }
  36. def _images_result(result):
  37. return {
  38. 'template': 'images.html',
  39. 'url': result['host_page'],
  40. 'title': result.get('title', ''),
  41. 'content': '',
  42. 'img_src': result['image_id'],
  43. 'thumbnail_src': result['src'],
  44. }
  45. def _news_result(result):
  46. return {
  47. 'url': result['url'],
  48. 'title': result['title'],
  49. 'content': html_to_text(result['snippet']),
  50. 'publishedDate': datetime.strptime(result['first_seen'][:19], '%Y-%m-%dT%H:%M:%S'),
  51. }
  52. def response(resp):
  53. results = []
  54. for result in resp.json()[1]['results']:
  55. if search_type == "web":
  56. results.append(_web_result(result))
  57. elif search_type == "images":
  58. results.append(_images_result(result))
  59. elif search_type == "news":
  60. results.append(_news_result(result))
  61. else:
  62. raise ValueError(f"Unsupported yep search type: {search_type}")
  63. return results