from src.core.factory.analyzer_facrory import AnalyzerFactory from src.core.factory.scraper_factory import ScraperFactory from src.core.factory.searcher_factory import SearcherFactory from src.core.types import AnalyzerType, ScraperType, SearcherType from src.models.analyzer_models import AnalyzerResult searcher = SearcherFactory.initialize_searcher( searcher_type=SearcherType.OPEN_GOOGLE_SEARCH ) scraper = ScraperFactory.initialize_scraper(ScraperType.TRAFILATURA_SCRAPER) analyzer = AnalyzerFactory.initialize_analyzer(AnalyzerType.OPENAI_ANALYZER) def search_on_web(query: str) -> AnalyzerResult: """ Performs a general search on web, scrapes the resulting URLs, and analyzes the search results. Args: query (str): The search query string. Must not be empty. Returns: AnalyzerResult: The analyzed result of the search, as returned by the analyzer. Raises: ValueError: If the query or domains are empty. Exception: Propagates any exceptions raised during the search, scraping, or analysis process. """ try: # 1. Validate search parameters if not query or query.strip() == "": raise ValueError("Query can't be empty.") # 2. Run initial search searcher_result = searcher.search_custom_domains(query=query) valid_searcher_result = [item for item in searcher_result.items if item.url] if not valid_searcher_result or valid_searcher_result == []: return AnalyzerResult(response_str="No search result found for you query.") # 3. Scrape search result scrape_result = [] for item in searcher_result.items: url_scrape_result = scraper.get_url_content(url_parameters=item) scrape_result.append(url_scrape_result) # 4. Analyze search result final_result = analyzer.analyze_search_result( query=query, search_results=scrape_result ) return final_result except Exception as e: raise e