keotl / ohdieux

A podcast feed converted for Radio-Canada Ohdio / Un convertisseur de flux de balados pour Radio-Canada Ohdio
https://ohdieux.ligature.ca
GNU Affero General Public License v3.0
31 stars 5 forks source link

Erreur lors de l'abonnement dans AntennaPod (titre invalide) #6

Closed simark closed 1 year ago

simark commented 1 year ago

Avec AntennaPod, lorsque j'essaie d'ajouter un flux Ohdieux, j'obtiens l'erreur suivante:

Item has no title: FeedItem[autoDownload=1,description=<null>,feedId=0,hasChapters=false,imageUrl=<null>,itemIdentifier=https://rcavmedias-static.akamaized.net/hls/0d811476-bdc1-4287-b321-a0acddb5adef/2022-09-05_16_30_00_journeeestencorejeune_0000_master.m3u8,link=<null>,media=de.danoeh.antennapod.model.feed.FeedMedia@f569512,paymentLink=<null>,podcastIndexChapterUrl=<null>,pubDate=Mon Sep 05 16:30:00 EDT 2022,state=0,tags=[],title=<null>,id=0]

File URL:
unknown 

J'ai creusé un peu, et j'ai trouvé qu'il échoue à analyser le titre suivant:

      <title>
    Rattrapage du lundi 5 sept. 2022 : La première émission de <em>La journée</em>, avec Jean-Sébastien Girard et Claire Samson
      </title>

À noter: la présence des balises <em>...</em> au milieu de l'élément textuel AntennaPod. Je croyais qu'avoir des éléments enfants mêlés avec des enfants textuels n'était pas valide en XML, mais en fait oui, il s'agit de mixed content. Donc le document est syntaxiquement correct.

Par contre, je crois que la présence de balises HTML dans les descriptions et titres rend le document invalide en sa qualité de flux RSS. D'abord, la réponse suivante:

https://stackoverflow.com/questions/1140307/what-are-the-valid-html-tags-in-rss-feeds

Puis, la spécification RSS 2.0 dit:

... if so, the description contains the text (entity-encoded HTML is allowed ...

Donc, les descriptions peuvent contenir du HTML, à condition qu'ils soit encodé de façon appropriée. Comme ce n'est pas précisé pour les titres, j'aurais tendance à croire qu'il n'est pas attendu d'avoir du HTML (entity-encodé ou non) dans la balise title.

En effectuant la modification suivante, j'arrive à m'abonner au flux dans AntennaPod:

diff --git a/ohdieux/resource/rss_resource.py b/ohdieux/resource/rss_resource.py
index fd494864f463..b55f13e1f7f8 100644
--- a/ohdieux/resource/rss_resource.py
+++ b/ohdieux/resource/rss_resource.py
@@ -2,6 +2,7 @@ import logging
 import threading
 from datetime import datetime
 from email.utils import formatdate
+from html import escape

 from jivago.inject.annotation import Singleton
 from jivago.lang.annotations import Inject
@@ -52,7 +53,7 @@ class RssResource(object):
         return RenderedView("manifest.xml",
                             {"programme": programme.programme,
                              "episodes": Stream(programme.episodes)
-                            .map(lambda x: EpisodeDescriptor(x.title, x.description, x.guid,
+                            .map(lambda x: EpisodeDescriptor(escape(x.title), escape(x.description), x.guid,
                                                              formatdate(float(x.date.strftime("%s"))), x.duration,
                                                              MediaDescriptor(x.media.media_url, x.media.media_type,
                                                                              x.media.length))

Cependant, je crois qu'il serait mieux de retirer les valises HTML du titre pour ne garder que le texte.

keotl commented 1 year ago

Salut, merci pour les détails. Il ne me semble pas trop problématique d'enlever les balises HTML. Les changements sont listés ici (#7) et devraient déjà être déployés.