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

1import argparse 

2import logging 

3import os 

4from pprint import pprint 

5from typing import Optional 

6 

7import requests 

8from open_webui.retrieval.web.main import SearchResult, get_filtered_results 

9 

10log = logging.getLogger(__name__) 

11""" 

12Documentation: https://docs.microsoft.com/en-us/bing/search-apis/bing-web-search/overview 

13""" 

14 

15 

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} 

27 

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 

46 

47 

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 ) 

64 

65 args = parser.parse_args() 

66 

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)