feat: Replace DuckDuckGo with direct site search

- Remove duckduckgo-search dependency (unreliable results)
- Add direct_search_service.py that scrapes sites' search pages directly
- Add search_url and product_link_selector fields to SearchSite model
- Add beautifulsoup4 and lxml for HTML parsing
- Update schemas with new fields
- Add database migration for new columns

Direct search is more reliable as it queries each site's own search
functionality instead of relying on external search engines.
This commit is contained in:
Claude committed 2025-11-22 15:00:49 +00:00
1 parent 6f5b50a372
commit 3b095801c5
7 files changed
+379 -198

No files matched your search

+6
View File
@@ -63,6 +63,8 @@ class SearchSiteCreate(BaseModel):
priority: int = 0
requires_js: bool = False
price_selector: str | None = None
search_url: str | None = None # URL avec {query} placeholder, ex: https://amazon.fr/s?k={query}
product_link_selector: str | None = None # Sélecteur CSS pour les liens produits
class SearchSiteUpdate(BaseModel):
@@ -74,6 +76,8 @@ class SearchSiteUpdate(BaseModel):
priority: int | None = None
requires_js: bool | None = None
price_selector: str | None = None
search_url: str | None = None
product_link_selector: str | None = None
class SearchSiteResponse(BaseModel):
@@ -86,6 +90,8 @@ class SearchSiteResponse(BaseModel):
priority: int
requires_js: bool
price_selector: str | None = None
search_url: str | None = None
product_link_selector: str | None = None
created_at: datetime | None = None
updated_at: datetime | None = None
model_config = ConfigDict(from_attributes=True)