Format: text/x-python
⬇ Download File (1.8 KB)
   1  # Web search functionality for NovaChat
   2  from duckduckgo_search import DDGS
   3  
   4  from duckduckgo_search import DDGS
   5  from googlesearch import search
   6  from typing import List
   7  
   8  
   9  def fetch_ddg(query, max_results=5):
  10      """Perform DuckDuckGo search returning titles and URLs"""
  11      try:
  12          with DDGS() as ddgs:
  13              return [{"title": r['title'], "url": r['href']} 
  14                      for r in ddgs.text(query, max_results=max_results)]
  15      except Exception as e:
  16          return [{"error": str(e)}]
  17  
  18  
  19  def fetch_google(query, num_results=5):
  20      """Perform Google search returning titles and URLs"""
  21      try:
  22          return [{"title": result, "url": result} 
  23                 for result in search(query, num=num_results, stop=num_results)]
  24      except Exception as e:
  25          return [{"error": str(e)}]
  26  
  27  def fetch_torrents(query: str, max_results: int = 5) -> List[str]:
  28      items = list(google_search(f"{query} torrent", num_results=max_results))
  29      results = []
  30      for item in items[:max_results]:
  31          url = item.get("href")
  32          title, snippet = scrape_page(url)
  33          results.append(f"{title}\n{snippet}\n{url}")
  34      return results
  35  
  36  # Example usage (can be removed or moved)
  37  if __name__ == '__main__':
  38      search_query = "python web frameworks"
  39      ddg_results = fetch_ddg(search_query)
  40      print(f"DuckDuckGo results for '{search_query}':")
  41      for i, result in enumerate(ddg_results):
  42          if 'error' in result:
  43              print(f"Error: {result['error']}")
  44              break
  45          if 'message' in result:
  46              print(result['message'])
  47              break
  48          print(f"{i+1}. {result['title']}")
  49          print(f"   Link: {result['link']}")
  50          print(f"   Snippet: {result['snippet'][:100]}...")
  51          print("---")