import requests import json from urllib.parse import quote from time import sleep braveNewsEndpoint = "https://api.search.brave.com/res/v1/news/search" braveSearchEndpoint = "https://api.search.brave.com/res/v1/web/search" def get_brave_search_results(query: str, brave_key: str): rv = '' url = f'{braveSearchEndpoint}?q={quote(query)}&count=20' sleep_time = 1 while sleep_time < 10: response = requests.get( url, headers= {"Accept": "application/json", "X-Subscription-Token": brave_key }, ) if response.status_code != 200: # == 429: sleep(sleep_time) sleep_time *= 3 else: break if sleep_time > 9: return 'Sorry no items could be found.' rv ='''Following are list items delineated by *item separator* At the end of each item is (item source, item age) *item separator* ''' jdata = response.json() web_results = jdata['web']['results'] for item in web_results: title = item['title'] description = item['description'] rv += f'{title}: {description} --' try: # extra_snippets can be missing for snip in item['extra_snippets']: rv += (snip + ' ') except: pass try: host = item['meta_url']['hostname'] except: host = 'unknown' try: age = item['age'] except: age = 'unknown' rv += f' (Item source: {host}, Item age: {age})' rv += ' *item separator* ' return rv def get_brave_news(query: str, brave_key: str, interval: str = 'pd'): url = f'{braveNewsEndpoint}?q={quote(query)}&count=20&extra_snippets=true&freshness={interval}' sleep_time = 1 while sleep_time < 10: response = requests.get( url, headers= {"Accept": "application/json", "X-Subscription-Token": brave_key }, ) if response.status_code != 200: # == 429: sleep(sleep_time) sleep_time *= 3 else: break; if sleep_time > 9: return ('Sorry no news items were found.') rv ='''Following are list items delineated by *item separator* At the end of each item is (item source, item age) *item separator* ''' jdata = response.json() for item in jdata['results']: title = item['title'] description = item['description'] rv += f'{title}: {description} --' try: # extra_snippets can be missing for snip in item['extra_snippets']: rv += (snip + ' ') except: pass try: host = item['meta_url']['hostname'] except: host = 'unknown' try: age = item['age'] except: age = 'unknown' rv += f' (Item source: {host}, Item age: {age})' rv += ' *item separator* ' return rv # if __name__ == '__main__': # response = get_brave_news('latest news about charlie kirk shooting', # 'BSAI-GRRwoCR1j', # 'pd') # print(response)