Mets à jour la page en suivant strictement les règles définies dans /home/alan/SITE/WEB/AGENTS.md (section « Règles d'affichage des cartes »).
Mets à jour la page reinformation-sur-le-monde.html avec l'actualité récente de la chaîne Réinformation sur le monde (Stéphane Bonard).
Objectif : recherche d'actualité (moins de 28 jours), max 25 cartes antéchronologiques.
RÈGLE STRICTE DE TEMPS : exécution totale en MOINS DE 3 MINUTES. Max 1 appel webfetch, max 3 appels bash, max 10 steps au total. Aucune itération de recherche : une seule collecte de données, puis édite immédiatement.
Étapes :
1. Découverte — UN SEUL appel bash (pas de webfetch, pas de navigation) :
Télécharger les 2 pages vidéos puis extraire les vidéos avec python3.
IMPORTANT : ne PAS spécifier de User-Agent (curl sans -A) — un User-Agent Chrome déclenche l'anti-bot YouTube (réponse vide de 0 octet). Sans -A, la page s'ouvre (~1,2 Mo) :
curl -sL --max-time 12 "https://www.youtube.com/@StephaneBonard-RsM/videos" -o /tmp/opencode/reinformation-stephane-bonard.html; curl -sL --max-time 12 "https://www.youtube.com/@FranckPengam/videos" -o /tmp/opencode/reinformation-franck-pengam.html; wc -c /tmp/opencode/reinformation-stephane-bonard.html /tmp/opencode/reinformation-franck-pengam.html
VÉRIFICATION : grep -o '
[^<]*' /tmp/opencode/reinformation-franck-pengam.html | head -1 — le titre doit contenir « GÉOPOLITIQUE ». Sinon : ÉCHEC_SOURCE, ne pas éditer.
VÉRIFICATION : grep -o '[^<]*' /tmp/opencode/reinformation-stephane-bonard.html | head -1 — le titre doit contenir « Reinformation ». Sinon : ÉCHEC_SOURCE, ne pas éditer.
puis :
python3 -c "
import re,json
for f in ['/tmp/opencode/reinformation-stephane-bonard.html','/tmp/opencode/reinformation-franck-pengam.html']:
h=open(f,encoding='utf-8',errors='ignore').read()
i=h.find('ytInitialData'); s=h.find('{',i)
d=0;e=-1;q=False;sc=False
for j,c in enumerate(h[s:s+4000000]):
if q:
if sc: sc=False
elif c=='\\\\': sc=True
elif c=='\"': q=False
else:
if c=='\"': q=True
elif c=='{': d+=1
elif c=='}':
d-=1
if d==0: e=j+1; break
data=json.loads(h[s:s+e])
def walk(o,out):
if isinstance(o,dict):
if 'lockupViewModel' in o:
v=o['lockupViewModel']
vid=None
def fv(x):
nonlocal vid
if isinstance(x,dict):
for k,val in x.items():
if k=='videoId' and isinstance(val,str) and vid is None: vid=val
elif isinstance(val,(dict,list)): fv(val)
elif isinstance(x,list):
for it in x: fv(it)
fv(v)
t=v.get('metadata',{}).get('lockupMetadataViewModel',{}).get('title',{}).get('content','')
rows=v.get('metadata',{}).get('lockupMetadataViewModel',{}).get('metadata',{}).get('contentMetadataViewModel',{}).get('metadataRows',[])
date='?'
for r in rows:
for p in r.get('metadataParts',[]):
txt=p.get('text',{}).get('content','')
if 'ago' in txt: date=txt
out.append((vid,t,date))
for k in o: walk(o[k],out)
elif isinstance(o,list):
for it in o: walk(it,out)
out=[]; walk(data,out)
print('===',f)
for vid,t,d in out[:20]: print(vid,'|',d,'|',t)
"
C'est la SEULE source de découverte (les 2 chaînes YouTube officielles). Ne navigue pas ailleurs.
OBLIGATOIRE : traite les DEUX chaînes. Compare les vidéos des DEUX fichiers (sb.html ET fp.html) avec la page. Toute vidéo de l'une OU l'autre chaîne datée de moins de 28 jours et absente de la page doit être ajoutée en carte. Ne conclus jamais « page à jour » en n'ayant vérifié qu'une seule chaîne.
Les dates sont relatives (« 1 day ago ») : convertir par rapport à aujourd'hui 07/08/2026.
Les titres sont en anglais (chaînes GPTV) : traduire en français pour les cartes.
Si le téléchargement échoue (0 octet, anti-bot), réessaie UNE fois (2 tentatives max). Si les 2 tentatives échouent, utilise le REPLI feed RSS (source secondaire) pour les DEUX chaînes :
curl -s --max-time 10 -A "Mozilla/5.0" "https://www.youtube.com/feeds/videos.xml?channel_id=UCTbrbqBOKVehZczokKrW-bw" -o /tmp/opencode/reinformation-stephane-bonard.xml; curl -s --max-time 10 -A "Mozilla/5.0" "https://www.youtube.com/feeds/videos.xml?channel_id=UCwAS7bowP5S5P44eP_f7W0Q" -o /tmp/opencode/reinformation-franck-pengam.xml; wc -c /tmp/opencode/reinformation-stephane-bonard.xml /tmp/opencode/reinformation-franck-pengam.xml
Les flux contiennent les dernières vidéos des chaînes Stéphane Bonard (Réinformation sur le monde) et Franck Pengam (Géopolitique Profonde) avec titres, IDs vidéo et dates de publication (, format ISO 8601). Convertir les dates ISO 8601 en JJ/MM/2026. Ne garder que les vidéos de moins de 28 jours. Traite les DEUX flux (ne conclus jamais « page à jour » en n'ayant vérifié qu'un seul).
Si les 2 feeds échouent aussi (réponse non XML valide), n'édite pas, ne conclus JAMAIS « page à jour » (interdit d'émettre VERDICT=PAGE_A_JOUR dans ce cas), et termine en signalant : ÉCHEC_SOURCE
2. Vérification des liens (30 s max, UN SEUL appel bash groupé) :
- Les URLs viennent de l'extraction (https://www.youtube.com/watch?v=).
- Vérifier en parallèle (curl -o /dev/null -w "%{http_code}") les 4-6 nouvelles URLs à ajouter.
- 429 = lien valide (rate limit), ne pas retry. Codes acceptés : 200, 204, 302.
- Dates : convertir les dates relatives en JJ/MM/2026 (ex : « 1 day ago » depuis le 07/08/2026 → 06/08/2026).
3. Mise à jour de reinformation-sur-le-monde.html :
- Éditer uniquement .
- Ajouter les nouvelles cartes .news-card au début (antéchronologique).
- Supprimer les cartes dont la data-date dépasse 28 jours.
- Conserver les cartes sans data-date (chaîne @StephaneBonard-RsM, Telegram Analyses du monde, page Stéphane Bonard geopolitique-profonde.com) en fin de liste.
- Limite : 25 cartes après filtre (les plus récentes en premier).
- Classe src-youtube pour les vidéos des 2 chaînes.
- favicon Google : https://www.google.com/s2/favicons?domain=youtube.com&sz=64
- news-tag : « Vidéo » pour YouTube, « Chaîne » pour la carte sans date.
- Titres : toujours en français (traduire les titres anglais) ; préserver la casse d'origine. Retirer les hashtags et emojis.
- data-date au format JJ/MM/2026.
- Ne pas modifier , le header, le footer, ni les scripts.
4. Vérifier l'ordre antéchronologique, la cohérence des dates, l'unicité des URLs,
et que le total ne dépasse pas 25 cartes. Terminer.
IMPORTANT : si aucune carte n'a été ajoutée ni supprimée (page réellement à jour après analyse des données de la source), termine ta réponse par la ligne exacte : VERDICT=PAGE_A_JOUR
IMPORTANT : TERMINE TOUJOURS ta réponse par ces 5 lignes exactes (aucune ligne après) :
VERDICT=OK | PAGE_A_JOUR | ECHEC_SOURCE
CARTES_AJOUTEES=
CARTES_SUPPRIMEES=
CARTES_TOTAL=
ERREURS=