search-web-MCP-server / src /tools /search_on_web_tool.py
Olaemad's picture
Update src/tools/search_on_web_tool.py
efead06 verified
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