bing.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import logging
  2. import os
  3. from pprint import pprint
  4. from typing import Optional
  5. import requests
  6. from open_webui.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,
  16. endpoint: str,
  17. locale: str,
  18. query: str,
  19. count: int,
  20. filter_list: Optional[list[str]] = None,
  21. ) -> list[SearchResult]:
  22. mkt = locale
  23. params = {"q": query, "mkt": mkt, "count": count}
  24. headers = {"Ocp-Apim-Subscription-Key": subscription_key}
  25. try:
  26. response = requests.get(endpoint, headers=headers, params=params)
  27. response.raise_for_status()
  28. json_response = response.json()
  29. results = json_response.get("webPages", {}).get("value", [])
  30. if filter_list:
  31. results = get_filtered_results(results, filter_list)
  32. return [
  33. SearchResult(
  34. link=result["url"],
  35. title=result.get("name"),
  36. snippet=result.get("snippet"),
  37. )
  38. for result in results
  39. ]
  40. except Exception as ex:
  41. log.error(f"Error: {ex}")
  42. raise ex
  43. def main():
  44. parser = argparse.ArgumentParser(description="Search Bing from the command line.")
  45. parser.add_argument(
  46. "query",
  47. type=str,
  48. default="Top 10 international news today",
  49. help="The search query.",
  50. )
  51. parser.add_argument(
  52. "--count", type=int, default=10, help="Number of search results to return."
  53. )
  54. parser.add_argument(
  55. "--filter", nargs="*", help="List of filters to apply to the search results."
  56. )
  57. parser.add_argument(
  58. "--locale",
  59. type=str,
  60. default="en-US",
  61. help="The locale to use for the search, maps to market in api",
  62. )
  63. args = parser.parse_args()
  64. results = search_bing(args.locale, args.query, args.count, args.filter)
  65. pprint(results)