- Recurring events share one UID across all occurrences (confirmed via the API: same UID, different start dates), which produced duplicate <guid> values the RSS spec forbids. Suffix the guid with the occurrence's start date to make it unique per occurrence. - Add atom:link rel="self" to the channel, per the validator's recommendation, in both the PHP and Python implementations. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Flux RSS - Commune de Silly
Genere trois flux RSS/Atom pour la commune de Silly (Belgique) : actualites, agenda et page Facebook. Deux implementations equivalentes sont fournies :
- php/ — a deployer sur un hebergement PHP mutualise classique. Recommande : aucun cron ni conf serveur a ecrire, chaque flux se regenere a la demande (avec cache 15 min) des qu'un lecteur RSS l'interroge.
- silly_rss.py — script Python autonome a lancer via cron, pour un serveur ou vous controlez le cron/nginx (ex. Yunohost).
Les deux utilisent la meme source : l'API JSON REST (Plone / imio.smartweb)
que www.silly.be charge en JS via les balises <smartweb-news> /
<smartweb-events> — pas besoin de navigateur headless. Le detail technique
(empreinte Cloudflare, contrainte b_size=20) est commente dans
php/common.php et silly_rss.py.
Option recommandee : PHP (hebergement perso — sillycone-village.be)
- Copier tout le dossier php/ sur l'hebergement (FTP/SFTP), dans
silly-rss/a la racine du site (Apache, confirme actif sursillycone-village.be). - Verifier que PHP a l'extension
curlactivee (quasi toujours le cas en mutualise standard). - Le dossier
php/cache/doit etre inscriptible par PHP (permissions par defaut suffisent generalement sur du mutualise ; sinonchmod 775). - Les flux sont alors accessibles en :
https://sillycone-village.be/silly-rss/actualites.phphttps://sillycone-village.be/silly-rss/agenda.phphttps://sillycone-village.be/silly-rss/facebook.php(proxy/cache du flux FetchRSS de la page Facebook, pour avoir une URL stable sur votre propre domaine)
- Ajouter ces 3 URLs comme sources dans FreshRSS (Administration > Flux
RSS > Ajouter un flux), sur
https://akbar.nohost.me/rss.
Note CSP : sillycone-village.be sert ses pages HTML avec un
Content-Security-Policy strict (connect-src 'self' ...). Cela ne
concerne que le JS execute dans le navigateur sur ce site — sans impact ici
puisque FreshRSS recupere les flux XML cote serveur.
Teste avec PHP 8.3 CLI : les 3 scripts produisent du XML valide avec de vraies donnees (40 actualites, 12 evenements, flux Facebook proxifie).
Option alternative : Python + cron (Yunohost)
-
Dossier de sortie
sudo mkdir -p /var/www/silly-rss sudo chown $(whoami):www-data /var/www/silly-rss -
Cron — voir deploy/silly-rss.cron pour la ligne a ajouter via
crontab -e(execution toutes les heures). -
nginx — voir deploy/nginx-silly-rss.conf, a copier dans
/etc/nginx/conf.d/akbar.nohost.me.d/silly-rss.confpuis :sudo nginx -t && sudo systemctl reload nginxNB :
/rssest deja pris par FreshRSS sur ce domaine, d'ou le choix de/silly-rss/comme chemin. -
Premiere generation (avant le premier passage du cron) :
python3 silly_rss.py /var/www/silly-rss -
FreshRSS — ajouter comme sources :
https://akbar.nohost.me/silly-rss/actualites.xmlhttps://akbar.nohost.me/silly-rss/agenda.xml
Cette option ne gere pas Facebook (pas de proxy) : ajouter directement l'URL FetchRSS dans FreshRSS si vous utilisez cette variante.
Facebook (page communedesilly)
Pas de solution fiable trouvee en scraping direct : le HTML de
facebook.com est vide de contenu exploitable sans authentification, et
l'instance RSS-Bridge testee (FacebookBridge) renvoie une erreur 400.
Solution retenue : FetchRSS (service tiers). La
variante PHP le reproxifie sous votre propre domaine (facebook.php) pour
avoir 3 URLs stables et partageables ; la variante Python s'appuie
directement sur l'URL FetchRSS.