| 177 |
177 |
# site rendu en JavaScript (ex. Québec solidaire) : rendu Firecrawl, texte = markdown |
| 178 |
178 |
try: |
| 179 |
179 |
import httpx as _hx |
| 180 |
|
− rr = _hx.post("https://api.firecrawl.dev/v1/scrape", timeout=120, headers={"Authorization": f"Bearer {settings.firecrawl_api_key}"}, |
| 181 |
|
− json={"url": doc.url, "formats": ["markdown", "html"], "onlyMainContent": True}) |
|
180 |
+ rr = _hx.post("https://api.firecrawl.dev/v1/scrape", timeout=150, headers={"Authorization": f"Bearer {settings.firecrawl_api_key}"}, |
|
181 |
+ json={"url": doc.url, "formats": ["markdown", "html"], "onlyMainContent": True, "waitFor": 4000}) |
| 182 |
182 |
rr.raise_for_status() |
| 183 |
183 |
data = rr.json().get("data", {}) |
| 184 |
184 |
rendered_md = (data.get("markdown") or "").strip() |
| 185 |
185 |
if len(rendered_md) >= 400: |
| 186 |
186 |
text = rendered_md |
| 187 |
187 |
b = (data.get("html") or rendered_md).encode() |
|
188 |
+ # date de publication en tête de communiqué (« 11 fév 2022 », « 3 septembre 2026 ») |
|
189 |
+ if not doc.published_date: |
|
190 |
+ head = rendered_md[:300] |
|
191 |
+ m = re.search(r"(\d{1,2})\s+([a-zéû]{3,9})\.?\s+(\d{4})", head, re.I) |
|
192 |
+ if m: |
|
193 |
+ doc.published_date = parse_fr_date(f"{m.group(1)} {m.group(2).lower()} {m.group(3)}") |
|
194 |
+ if not doc.published_date: |
|
195 |
+ short = {"fév": "février", "fev": "février", "avr": "avril", "juil": "juillet", "sept": "septembre", "oct": "octobre", "nov": "novembre", "déc": "décembre", "dec": "décembre", "janv": "janvier", "jan": "janvier", "mar": "mars", "mai": "mai", "juin": "juin", "août": "août", "aout": "août"} |
|
196 |
+ mois = short.get(m.group(2).lower().rstrip(".")) |
|
197 |
+ if mois: |
|
198 |
+ doc.published_date = parse_fr_date(f"{m.group(1)} {mois} {m.group(3)}") |
| 188 |
199 |
except Exception as e: # noqa: BLE001 |
| 189 |
200 |
log.debug("firecrawl %s : %s", doc.url, e) |
| 190 |
201 |
hash_src = text.encode() |
| 269 |
280 |
doc.status = "ignored" |
| 270 |
281 |
v.analyzed_at = utcnow() |
| 271 |
282 |
return 0 |
| 272 |
|
− if OLD_YEAR_RE.search(doc.url): |
| 273 |
|
− # document d'archive (daté d'avant 2022 dans l'URL) : conservé et versionné, mais pas de propositions 2026 |
|
283 |
+ if OLD_YEAR_RE.search(doc.url) or (doc.published_date and doc.published_date.year < 2022): |
|
284 |
+ # document d'archive (daté d'avant 2022) : conservé et versionné, mais pas de propositions 2026 |
| 274 |
285 |
doc.status = "archive" |
| 275 |
286 |
doc.doc_type = "archive" |
| 276 |
287 |
v.analyzed_at = utcnow() |