bing.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import logging
  2. import os
  3. from pprint import pprint
  4. from typing import Optional
  5. import requests
  6. from open_webui.apps.retrieval.web.main import SearchResult, get_filtered_results
  7. from open_webui.env import SRC_LOG_LEVELS
  8. import argparse
  9. log = logging.getLogger(__name__)
  10. log.setLevel(SRC_LOG_LEVELS["RAG"])
  11. '''
  12. Documentation: https://docs.microsoft.com/en-us/bing/search-apis/bing-web-search/overview
  13. '''
  14. def search_bing(
  15. subscription_key: str, endpoint: str, locale: str, query: str, count: int, filter_list: Optional[list[str]] = None
  16. ) -> list[SearchResult]:
  17. mkt = locale
  18. params = { 'q': query, 'mkt': mkt, 'answerCount': count }
  19. headers = { 'Ocp-Apim-Subscription-Key': subscription_key }
  20. try:
  21. response = requests.get(endpoint, headers=headers, params=params)
  22. response.raise_for_status()
  23. json_response = response.json()
  24. results = json_response.get("webPages", {}).get("value", [])
  25. if filter_list:
  26. results = get_filtered_results(results, filter_list)
  27. return [
  28. SearchResult(
  29. link=result["url"],
  30. title=result.get("name"),
  31. snippet=result.get("snippet"),
  32. )
  33. for result in results
  34. ]
  35. except Exception as ex:
  36. log.error(f"Error: {ex}")
  37. raise ex
  38. def main():
  39. parser = argparse.ArgumentParser(description="Search Bing from the command line.")
  40. parser.add_argument("query", type=str, default="Top 10 international news today", help="The search query.")
  41. parser.add_argument("--count", type=int, default=10, help="Number of search results to return.")
  42. parser.add_argument("--filter", nargs='*', help="List of filters to apply to the search results.")
  43. parser.add_argument("--locale", type=str, default="en-US", help="The locale to use for the search, maps to market in api")
  44. args = parser.parse_args()
  45. results = search_bing(args.locale, args.query, args.count, args.filter)
  46. pprint(results)