| 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) |
|
|