12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import logging
- import os
- from pprint import pprint
- from typing import Optional
- import requests
- from open_webui.retrieval.web.main import SearchResult, get_filtered_results
- from open_webui.env import SRC_LOG_LEVELS
- import argparse
- log = logging.getLogger(__name__)
- log.setLevel(SRC_LOG_LEVELS["RAG"])
- """
- Documentation: https://docs.microsoft.com/en-us/bing/search-apis/bing-web-search/overview
- """
- def search_bing(
- subscription_key: str,
- endpoint: str,
- locale: str,
- query: str,
- count: int,
- filter_list: Optional[list[str]] = None,
- ) -> list[SearchResult]:
- mkt = locale
- params = {"q": query, "mkt": mkt, "count": count}
- headers = {"Ocp-Apim-Subscription-Key": subscription_key}
- try:
- response = requests.get(endpoint, headers=headers, params=params)
- response.raise_for_status()
- json_response = response.json()
- results = json_response.get("webPages", {}).get("value", [])
- if filter_list:
- results = get_filtered_results(results, filter_list)
- return [
- SearchResult(
- link=result["url"],
- title=result.get("name"),
- snippet=result.get("snippet"),
- )
- for result in results
- ]
- except Exception as ex:
- log.error(f"Error: {ex}")
- raise ex
- def main():
- parser = argparse.ArgumentParser(description="Search Bing from the command line.")
- parser.add_argument(
- "query",
- type=str,
- default="Top 10 international news today",
- help="The search query.",
- )
- parser.add_argument(
- "--count", type=int, default=10, help="Number of search results to return."
- )
- parser.add_argument(
- "--filter", nargs="*", help="List of filters to apply to the search results."
- )
- parser.add_argument(
- "--locale",
- type=str,
- default="en-US",
- help="The locale to use for the search, maps to market in api",
- )
- args = parser.parse_args()
- results = search_bing(args.locale, args.query, args.count, args.filter)
- pprint(results)
|