Coverage for open_webui/retrieval/web/bing.py: 31%
33 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 05:07 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 05:07 +0000
1import argparse
2import logging
3import os
4from pprint import pprint
5from typing import Optional
7import requests
8from open_webui.retrieval.web.main import SearchResult, get_filtered_results
10log = logging.getLogger(__name__)
11"""
12Documentation: https://docs.microsoft.com/en-us/bing/search-apis/bing-web-search/overview
13"""
16def search_bing(
17 subscription_key: str,
18 endpoint: str,
19 locale: str,
20 query: str,
21 count: int,
22 filter_list: Optional[list[str]] = None,
23) -> list[SearchResult]:
24 mkt = locale
25 params = {'q': query, 'mkt': mkt, 'count': count}
26 headers = {'Ocp-Apim-Subscription-Key': subscription_key}
28 try:
29 response = requests.get(endpoint, headers=headers, params=params)
30 response.raise_for_status()
31 json_response = response.json()
32 results = json_response.get('webPages', {}).get('value', [])
33 if filter_list:
34 results = get_filtered_results(results, filter_list)
35 return [
36 SearchResult(
37 link=result['url'],
38 title=result.get('name'),
39 snippet=result.get('snippet'),
40 )
41 for result in results
42 ]
43 except Exception as ex:
44 log.error(f'Error: {ex}')
45 raise ex
48def main():
49 parser = argparse.ArgumentParser(description='Search Bing from the command line.')
50 parser.add_argument(
51 'query',
52 type=str,
53 default='Top 10 international news today',
54 help='The search query.',
55 )
56 parser.add_argument('--count', type=int, default=10, help='Number of search results to return.')
57 parser.add_argument('--filter', nargs='*', help='List of filters to apply to the search results.')
58 parser.add_argument(
59 '--locale',
60 type=str,
61 default='en-US',
62 help='The locale to use for the search, maps to market in api',
63 )
65 args = parser.parse_args()
67 results = search_bing(
68 os.environ.get('BING_SEARCH_V7_SUBSCRIPTION_KEY', ''),
69 os.environ.get('BING_SEARCH_V7_ENDPOINT', 'https://api.bing.microsoft.com/v7.0/search'),
70 args.locale,
71 args.query,
72 args.count,
73 args.filter,
74 )
75 pprint(results)