Files
nas-runbooks/hermes-perso/veille-tayara-macbook-64go.md
T

40 lines
4.0 KiB
Markdown

# Veille Tayara.tn — MacBook Pro M4/M5 Max 64 Go
**Date** : 2026-08-16
**Sphere** : hermes-perso (achat personnel, Mac de travail Nabil)
**Workflow n8n** : `VEILLE | Tayara MacBook M4/M5 Max 64Go` (id `YcJfM7bmV99xL8oi`), actif, planification 2h.
## Contexte
Recherche d'un MacBook Pro M4 Max ou M5 Max, 64 Go RAM minimum, AZERTY. Le neuf (Redcorp Belgique) coute quasi le double du marche tunisien d'occasion, mais les annonces 64 Go sont rares et disparaissent vite sur le marche tunisien. Deux canaux de veille repartis selon le risque :
- **Facebook Marketplace** : alertes natives FB (2 alertes crees manuellement par Nabil, M4 Max + M5 Max) — pas d'automatisation. Facebook detecte agressivement le scraping Marketplace (produit commercial pour eux), contrairement a l'OWA deja scrape par hermes-mail-browser. Verification manuelle par Nabil.
- **Tayara.tn** : automatise via ce workflow n8n. Site classifieds standard, pas d'auth requise, scraping direct sans risque de ban significatif.
## Fonctionnement technique
Un seul node Code (mode `runOnceForAllItems`), meme pattern que `CLASSEMENTS | Benchmark IA` (fetchUrl/sendTelegram en `require('https')` brut — confirme fonctionnel malgre le sandbox par defaut documente dans le SDK n8n, l'instance self-hosted autorise les modules `http`/`https`/`fs`).
1. **Fetch** : `https://www.tayara.tn/ads/k/{query}/` pour `macbook pro m4 max` et `macbook pro m5 max` (URL-encode).
2. **Parsing** : extraction du bloc `<script id="__NEXT_DATA__">` (page Next.js SSR) plutot que du HTML rendu — beaucoup plus robuste qu'un parsing CSS-selector, insensible aux changements de mise en page. Chemin JSON : `props.pageProps.searchedListingsAction.newHits`. Chaque hit contient `id`, `title`, `description`, `price`, `location.{governorate,delegation}`.
3. **Filtre 64 Go** : regex `\b64\s?(go|gb|g)\b` (insensible casse) sur titre + description.
4. **Dedup** : fichier JSON persistant `/root/.n8n/tayara_macbook64_seen.json` (meme pattern que le compteur du workflow `MONITORING | Marche RLA Sync`). Comparaison des IDs, pas de re-alerte sur une annonce deja vue.
5. **Notification** : uniquement si nouvelle annonce matchee — silence total sinon (pas de `alwaysOutputData`, comportement zero-item standard n8n). Envoi Telegram HTML via le meme bot/chat que `CLASSEMENTS | Benchmark IA` (token + chat_id 2084513684, achemine par hermes-perso).
6. **Lien direct** : `https://www.tayara.tn/item/{id}/` — verifie que l'URL courte sans slug categorie/gouvernorat redirige correctement vers la fiche annonce (HTTP 200, titre correct), plus simple que de reconstruire le slug complet.
## Verification effectuee (16/08/2026)
Execution manuelle testee avant activation : succes, `{checked:1, matches:0, newAlerts:0}` — 0 annonce 64 Go sur Tayara au moment du test, coherent avec la rarete signalee par Nabil. Confirme que le fetch reseau, le parsing JSON et l'ecriture fichier fonctionnent tous dans le sandbox Code node de cette instance n8n.
## Points d'attention / limites connues
- Le sandbox Code node par defaut de n8n interdit normalement `require('http')`/`fetch` (voir builderHint SDK) — ca fonctionne ici uniquement parce que l'instance self-hosted a `NODE_FUNCTION_ALLOW_BUILTIN` (ou equivalent) configure. Ne pas supposer que ce pattern est portable vers une instance n8n standard.
- Regex 64 Go peut avoir des faux positifs/negatifs selon la formulation du vendeur ("64Go", "64 G", "64GB" couverts ; "64000 Mo" ou fautes de frappe non couverts).
- Pas de gestion de pagination Tayara — si plus d'une page de resultats existe un jour pour ces requetes, seule la premiere page (newHits initial) est lue.
- Structure `__NEXT_DATA__` depend de l'implementation Next.js de Tayara — a revalider si Tayara migre son frontend.
## Pour aller plus loin
- Etendre la regex si des formulations manquees sont constatees en usage reel.
- Envisager d'ajouter une recherche generique "macbook pro 64" en complement des deux requetes ciblees, si les vendeurs omettent parfois "M4/M5 Max" du titre.