Fix W3C validator errors: duplicate guids and missing atom:link self

- 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>
This commit is contained in:
para
2026-09-25 23:49:31 +02:00
co-authored by Claude Sonnet 5
parent 13ea82e347
commit 13e5c94ee7
4 changed files with 29 additions and 8 deletions
+5 -2
View File
@@ -166,14 +166,17 @@ function xml_escape(string $text): string
/**
* Construit un flux RSS 2.0 complet a partir d'une liste d'items deja
* formates (chacun un tableau title/link/guid/pubDate/description).
* $selfUrl est l'URL du flux lui-meme (atom:link rel="self", recommande
* par le validateur W3C).
*/
function build_rss(string $title, string $link, string $description, array $items): string
function build_rss(string $title, string $link, string $description, array $items, string $selfUrl): string
{
$now = rfc822(null);
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
$xml .= '<rss version="2.0">' . "\n <channel>\n";
$xml .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">' . "\n <channel>\n";
$xml .= ' <title>' . xml_escape($title) . "</title>\n";
$xml .= ' <link>' . xml_escape($link) . "</link>\n";
$xml .= ' <atom:link href="' . xml_escape($selfUrl) . '" rel="self" type="application/rss+xml" />' . "\n";
$xml .= ' <description>' . xml_escape($description) . "</description>\n";
$xml .= " <language>fr-be</language>\n";
$xml .= " <lastBuildDate>$now</lastBuildDate>\n";