mirror of
https://git.mirrors.martin98.com/https://github.com/mendableai/firecrawl
synced 2025-08-13 05:19:06 +08:00
Update firecrawl.py
This commit is contained in:
parent
b67bc707d5
commit
8c5509cbb4
@ -558,61 +558,96 @@ class FirecrawlApp:
|
|||||||
def search(
|
def search(
|
||||||
self,
|
self,
|
||||||
query: str,
|
query: str,
|
||||||
params: Optional[Union[Dict[str, Any], SearchParams]] = None) -> SearchResponse:
|
limit: Optional[int] = None,
|
||||||
|
tbs: Optional[str] = None,
|
||||||
|
filter: Optional[str] = None,
|
||||||
|
lang: Optional[str] = None,
|
||||||
|
country: Optional[str] = None,
|
||||||
|
location: Optional[str] = None,
|
||||||
|
timeout: Optional[int] = None,
|
||||||
|
scrape_options: Optional[CommonOptions] = None,
|
||||||
|
params: Optional[Union[Dict[str, Any], SearchParams]] = None,
|
||||||
|
**kwargs) -> SearchResponse:
|
||||||
"""
|
"""
|
||||||
Search for content using Firecrawl.
|
Search for content using Firecrawl.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
query (str): Search query string
|
query (str): Search query string
|
||||||
|
limit (Optional[int]): Max results (default: 5)
|
||||||
params (Optional[Union[Dict[str, Any], SearchParams]]): See SearchParams model:
|
tbs (Optional[str]): Time filter (e.g. "qdr:d")
|
||||||
|
filter (Optional[str]): Custom result filter
|
||||||
Search Options:
|
lang (Optional[str]): Language code (default: "en")
|
||||||
* limit - Max results (default: 5)
|
country (Optional[str]): Country code (default: "us")
|
||||||
* tbs - Time filter (e.g. "qdr:d")
|
location (Optional[str]): Geo-targeting
|
||||||
* filter - Custom result filter
|
timeout (Optional[int]): Request timeout in milliseconds
|
||||||
|
scrape_options (Optional[CommonOptions]): Result scraping configuration
|
||||||
Localization:
|
params (Optional[Union[Dict[str, Any], SearchParams]]): Additional search parameters
|
||||||
* lang - Language code (default: "en")
|
**kwargs: Additional keyword arguments for future compatibility
|
||||||
* country - Country code (default: "us")
|
|
||||||
* location - Geo-targeting
|
|
||||||
|
|
||||||
Request Options:
|
|
||||||
* timeout - Request timeout (ms)
|
|
||||||
* scrapeOptions - Result scraping config, check ScrapeParams model for more details
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
SearchResponse
|
SearchResponse: Response containing:
|
||||||
|
* success (bool): Whether request succeeded
|
||||||
|
* data (List[FirecrawlDocument]): Search results
|
||||||
|
* warning (Optional[str]): Warning message if any
|
||||||
|
* error (Optional[str]): Error message if any
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
Exception: If search fails
|
Exception: If search fails or response cannot be parsed
|
||||||
"""
|
"""
|
||||||
if params is None:
|
# Build search parameters
|
||||||
params = {}
|
search_params = {}
|
||||||
|
if params:
|
||||||
if isinstance(params, dict):
|
if isinstance(params, dict):
|
||||||
search_params = SearchParams(query=query, **params)
|
search_params.update(params)
|
||||||
else:
|
else:
|
||||||
search_params = params
|
search_params.update(params.dict(exclude_none=True))
|
||||||
search_params.query = query
|
|
||||||
|
|
||||||
params_dict = search_params.dict(exclude_none=True)
|
# Add individual parameters
|
||||||
|
if limit is not None:
|
||||||
|
search_params['limit'] = limit
|
||||||
|
if tbs is not None:
|
||||||
|
search_params['tbs'] = tbs
|
||||||
|
if filter is not None:
|
||||||
|
search_params['filter'] = filter
|
||||||
|
if lang is not None:
|
||||||
|
search_params['lang'] = lang
|
||||||
|
if country is not None:
|
||||||
|
search_params['country'] = country
|
||||||
|
if location is not None:
|
||||||
|
search_params['location'] = location
|
||||||
|
if timeout is not None:
|
||||||
|
search_params['timeout'] = timeout
|
||||||
|
if scrape_options is not None:
|
||||||
|
search_params['scrapeOptions'] = scrape_options.dict(exclude_none=True)
|
||||||
|
|
||||||
|
# Add any additional kwargs
|
||||||
|
search_params.update(kwargs)
|
||||||
|
|
||||||
|
# Create final params object
|
||||||
|
final_params = SearchParams(query=query, **search_params)
|
||||||
|
params_dict = final_params.dict(exclude_none=True)
|
||||||
params_dict['origin'] = f"python-sdk@{version}"
|
params_dict['origin'] = f"python-sdk@{version}"
|
||||||
|
|
||||||
|
# Make request
|
||||||
response = requests.post(
|
response = requests.post(
|
||||||
f"{self.api_url}/v1/search",
|
f"{self.api_url}/v1/search",
|
||||||
headers={"Authorization": f"Bearer {self.api_key}"},
|
headers={"Authorization": f"Bearer {self.api_key}"},
|
||||||
json=params_dict
|
json=params_dict
|
||||||
)
|
)
|
||||||
|
|
||||||
if response.status_code != 200:
|
if response.status_code == 200:
|
||||||
raise Exception(f"Request failed with status code {response.status_code}")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return response.json()
|
response_json = response.json()
|
||||||
except:
|
if response_json.get('success') and 'data' in response_json:
|
||||||
raise Exception(f'Failed to parse Firecrawl response as JSON.')
|
return SearchResponse(**response_json)
|
||||||
|
elif "error" in response_json:
|
||||||
|
raise Exception(f'Search failed. Error: {response_json["error"]}')
|
||||||
|
else:
|
||||||
|
raise Exception(f'Search failed. Error: {response_json}')
|
||||||
|
except ValueError:
|
||||||
|
raise Exception('Failed to parse Firecrawl response as JSON.')
|
||||||
|
else:
|
||||||
|
self._handle_error(response, 'search')
|
||||||
|
|
||||||
def crawl_url(self, url: str,
|
def crawl_url(self, url: str,
|
||||||
params: Optional[CrawlParams] = None,
|
params: Optional[CrawlParams] = None,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user