Le site de ma commune a récemment été refait par IMIO à base de Plone. Quelques aspects ont été améliorés, par exemple les actualités sont lisibles sur la page d'accueil. Mais ces mêmes actualités étaient jusqu'ici disponibles en RSS, et plus maintenant.
Puisqu'IMIO m'a déjà envoyé chier au sujet des RSS l'autre jour, je pense qu'il n'est la peine de les recontacter à ce sujet donc je me suis directement mis au boulot pour convertir ce qui est disponible (un flux JSON cette fois) en RSS.
Cette fois-ci on doit donner le nom de domaine de la commune, par exemple ellezelles.be ou oupeye.be. Certaines utilisent un autre système que je n'ai pas pris la peine de gérer parce qu'il faut parser du HTML (comme Tournai ou Binche par exemple).
On peut accéder au RSS à cette adresse, donc :
https://seos.fr/blog/20260703.actualites.html?actualites=ellezelles.be
https://seos.fr/blog/20260703.actualites.html?actualites=oupeye.be
Et ainsi de suite.
<?php
if (isset($_GET['actualites']) and $url = $_GET['actualites']) {
header("Content-Type: application/xml; charset=UTF-8");
$last_build_date = date('r');
$url_html = "https://www.{$url}/actualites";
$url_flux = "https://www.{$url}/actualites/@results?b_start=0&fullobjects=1";
$json = file_get_contents($url_flux, false, stream_context_create([
'http' => [ 'header' => 'Accept: application/json', ]
]));
$data = json_decode($json);
$rss = <<<RSS
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<atom:link href="{$url_html}" rel="self" type="application/rss+xml" />
<title>{$data->items[0]->usefull_container_title}</title>
<description>Actualités</description>
<link>{$url_html}</link>
<language>fr-FR</language>
<lastBuildDate>{$last_build_date}</lastBuildDate>
<ttl>86400</ttl>
RSS;
foreach ($data->items as $item) {
$title = strip_tags($item->description ?: $item->title ?: $item->items[0]->file->filename ?? "");
if (!empty($item->text->data)) {
$text = strip_tags($item->text->data);
} else if (!empty($item->items[0]->file->download)) {
$text = strip_tags($item->items[0]->file->download);
}
$url = $item->{'@id'};
$pub_date = date('r', strtotime($item->created));
$rss .= <<<RSS
<item>
<title>{$title}</title>
<description>{$text}</description>
<link>{$url}</link>
<guid isPermaLink="true">{$url}</guid>
<pubDate>{$pub_date}</pubDate>
</item>
RSS;
}
$rss .= "</channel>\n";
$rss .= "</rss>";
echo $rss;
die();
}