paraandClaude Sonnet 5 7da5a7a3e6 Fix article links and include full content in PHP feeds
Two bugs found by testing real links from the feed:
- Link format was wrong (?news=<internal-id>), landing on the general
  listing instead of the article. Traced the real network call the site
  makes when opening an item and found the actual pattern:
  /actualites/<slug>?u=<UID> (agenda: /agenda/<slug>?u=<UID>), where the
  JS router reads the `u` query param to fetch @results?UID=...&fullobjects=1.
- Description only used the short teaser (description_fr) even though the
  API response already includes the full rich-text body (text_fr.data) and
  attachments (items[].file.download) in the same call — no extra request
  needed, just wasn't being used.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 23:45:55 +02:00
…
…

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)

  1. Copier tout le dossier php/ sur l'hebergement (FTP/SFTP), dans silly-rss/ a la racine du site (Apache, confirme actif sur sillycone-village.be).
  2. Verifier que PHP a l'extension curl activee (quasi toujours le cas en mutualise standard).
  3. Le dossier php/cache/ doit etre inscriptible par PHP (permissions par defaut suffisent generalement sur du mutualise ; sinon chmod 775).
  4. Les flux sont alors accessibles en :
    • https://sillycone-village.be/silly-rss/actualites.php
    • https://sillycone-village.be/silly-rss/agenda.php
    • https://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)
  5. 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)

  1. Dossier de sortie

    sudo mkdir -p /var/www/silly-rss
    sudo chown $(whoami):www-data /var/www/silly-rss
    
  2. Cron — voir deploy/silly-rss.cron pour la ligne a ajouter via crontab -e (execution toutes les heures).

  3. nginx — voir deploy/nginx-silly-rss.conf, a copier dans /etc/nginx/conf.d/akbar.nohost.me.d/silly-rss.conf puis :

    sudo nginx -t && sudo systemctl reload nginx
    

    NB : /rss est deja pris par FreshRSS sur ce domaine, d'ou le choix de /silly-rss/ comme chemin.

  4. Premiere generation (avant le premier passage du cron) :

    python3 silly_rss.py /var/www/silly-rss
    
  5. FreshRSS — ajouter comme sources :

    • https://akbar.nohost.me/silly-rss/actualites.xml
    • https://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.

S
Description
No description provided
Readme
98 KiB
Languages
PHP 100%