URL: https://linuxfr.org/users/azmeuk/journaux/mediarss-le-mal-aime Title: MediaRSS le mal aimé Authors: azmeuk Date: 2019年11月20日T15:17:53+01:00 License: CC By-SA Tags: rss, mediarss, atom, syndication et framasoft Score: 34 Parmi les standards intéressants que personne n'implémente, on peut compter [Managesieve](http://sieve.info/clients), la [RFC 1149](https://rfc1149.net/rfc1149.html) ou encore [Media-RSS](http://www.rssboard.org/media-rss) (ou MRSS). Pourtant j'ai envie de vous parler un peu de ce dernier. # Le standard Media-RSS Media-RSS est une extension [RSS](https://fr.wikipedia.org/wiki/Media_RSS) permettant d'attacher des contenus audio, vidéo ou images à des articles. [Wikipedia](https://fr.wikipedia.org/wiki/Media_RSS) nous apprend qu'il fut créé par Yahoo en 2004, et vécu quelques itération pour trouver sa version la plus aboutie en 2009, il y a 10 ans déjà. Media-RSS permet de décrire assez précisément les métadonnées du contenu attaché : miniatures, description, notes, nombre de vues, licences, hash, classification du contenue (PEGI &co), sous-titres, etc. Tout est là par exemple pour décrire correctement une vidéo. Et ça tombe bien car Youtube l'utilise dans ses flux, ainsi que Peertube ([du moins en partie](https://github.com/Chocobozzz/PeerTube/pull/500)). D'autres outils tels que [RSS-Bridge](https://github.com/RSS-Bridge/rss-bridge) supportent aussi en partie cette extension. J'y vois là une manière élégante de s'abonner à des chaînes de vidéos, la possibilité de classer et organiser les contenus qui m'intéressent avec mes propres outils. Tout cela en utilisant un standard ouvert, et surtout, sans avoir à me créer de compte. Ce standard me semble pertinent dans une démarche de dégooglisation lente, bien qu'on ne puisse pas réellement faire confiance à Google pour soutenir des formats interopérables sur le long terme. Parmi les extensions similaires, on peut citer le namespace maison que l'on retrouve dans les flux youtube, ou bien [l'extension Podcast Connect](https://help.apple.com/itc/podcasts_connect/#/itcb54353390) d'Apple (utilisée notamment par [Vimeo](https://vimeo.com/user6918151/videos/rss), [Soundcloud](https://feeds.soundcloud.com/users/soundcloud:users:253227459/sounds.rss), etc.) et qui semble faire standard en matière de podcast. Alors voilà, à part Peertube, et Youtube, tout le monde se fout de Media-RSS. De la [dizaine de sujets](https://stackoverflow.com/questions/tagged/mediarss) sur StackOverflow, tous datant de ~2010-2012, au vide sidéral de contenu proposé par les moteurs de recherche, en passant par l'age et la solitude des [projets Github](https://github.com/search?q=mediarss) en rapport avec Media-RSS, on se rend vite compte à quel point ce standard est mal supporté, et surtout, méconnu. La plupart des lecteurs de flux RSS ne supporte donc pas Media-RSS. En fouillant un peu, on se rend vite compte que les bibliothèques logicielles de lecture de flux sur lesquelles ils s'appuient non plus. J'ai donc pris un peu de temps pour faire le tour du support de Media-RSS dans quelques lecteurs RSS bureau, web et mobiles, et ouvrir quelques tickets de bug pour discuter de son adoption avec les développeurs. # Les lecteurs de flux RSS J'attends d'un lecteur de flux qu'il tire partie au maximum des informations apportées Media-RSS, mais pour une utilisation confortable, je me contenterait de l'affichage de la miniature et de la description d'une vidéo. Je constate que la plupart des lecteurs de flux ne supporte pas du tout le standard. Lorsqu'ils le supportent, généralement ils considèrent les vidéos comme des pièces-jointe à un article, mais pas de réelle intégration. Voici l'affichage des flux de la chaîne [Youtube de PBS Space Time](https://www.youtube.com/feeds/videos.xml?channel_id=UC7_gcs09iThXybpVgjHZ_7g) et la chaîne [Peertube de Framasoft](https://framatube.org/feeds/videos.xml?accountId=3) dans plusieurs applications. Logiciel | Langage | Support de MediaRSS | Notes | Flux Youtube | Flux Peertube ---|---|---|---|---|--- [Akregator](https://userbase.kde.org/Akregator/fr) | C | aucun ([rapport de bug](https://bugs.kde.org/show_bug.cgi?id=366487)) | | [![akregator-youtube](https://bugsfiles.kde.org/attachment.cgi?id=124010)](https://bugsfiles.kde.org/attachment.cgi?id=124010) | [![akregator-peertube](https://bugs.kde.org/attachment.cgi?id=124011)](https://bugs.kde.org/attachment.cgi?id=124011) [Commafeed](https://www.commafeed.com/) | Java | aucun ([rapport de bug](https://github.com/Athou/commafeed/issues/800)) | | [![commafeed-youtube](https://user-images.githubusercontent.com/60163/69148306-49757380-0ad4-11ea-8c06-9da32fd1f14a.png)](https://user-images.githubusercontent.com/60163/69148306-49757380-0ad4-11ea-8c06-9da32fd1f14a.png) | [![comafeed-peertube](https://user-images.githubusercontent.com/60163/69160948-a9771480-0aea-11ea-98c9-e9fb539a8489.png)](https://user-images.githubusercontent.com/60163/69160948-a9771480-0aea-11ea-98c9-e9fb539a8489.png) [Feeder](https://gitlab.com/spacecowboy/Feeder) | Kotlin (android) | moyen ([rapport de bug](https://gitlab.com/spacecowboy/Feeder/issues/231)) | | [![feeder-youtube](https://gitlab.com/spacecowboy/Feeder/uploads/f9e25c7788c17589fc4352ba7de10c0f/feeder-youtube.png)](https://gitlab.com/spacecowboy/Feeder/uploads/f9e25c7788c17589fc4352ba7de10c0f/feeder-youtube.png) | [![feeder-peertube](https://gitlab.com/spacecowboy/Feeder/uploads/54927d675b6f2bc45476307e17fbef92/feeder-peertube.png)](https://gitlab.com/spacecowboy/Feeder/uploads/54927d675b6f2bc45476307e17fbef92/feeder-peertube.png) [FeedReader](https://jangernert.github.io/FeedReader/) | Vala | aucun ([rapport de bug](https://github.com/jangernert/FeedReader/issues/806)) | | [![feedreader-youtube](https://user-images.githubusercontent.com/60163/69161449-7b460480-0aeb-11ea-93e6-24b2418c206e.png)](https://user-images.githubusercontent.com/60163/69161449-7b460480-0aeb-11ea-93e6-24b2418c206e.png) | [![feedreader-peertube](https://user-images.githubusercontent.com/60163/69161489-89942080-0aeb-11ea-891f-84adccb522f9.png)](https://user-images.githubusercontent.com/60163/69161489-89942080-0aeb-11ea-891f-84adccb522f9.png) [Flym](https://github.com/FredJul/Flym) | Kotlin+Java (android) | aucun ([rapport de bug](https://github.com/FredJul/Flym/issues/530))| | [![flym-youtube](https://user-images.githubusercontent.com/60163/69180066-f5d34c00-0b0c-11ea-8fc5-12c64eec2222.png)](https://user-images.githubusercontent.com/60163/69180066-f5d34c00-0b0c-11ea-8fc5-12c64eec2222.png) | [![flym-peertube](https://user-images.githubusercontent.com/60163/69180087-fcfa5a00-0b0c-11ea-9941-5a0e603eb969.png)](https://user-images.githubusercontent.com/60163/69180087-fcfa5a00-0b0c-11ea-9941-5a0e603eb969.png) [FreshRSS](https://freshrss.org/) | PHP | mauvais ([rapport de bug](https://github.com/FreshRSS/FreshRSS/pull/1920)) | Affiche miniature et description, mais pas le reste. Utilise la bibliothèque SimplePie | [![freshrss-youtube](https://i.ibb.co/Lt0y5Cj/freshrss-youtube.png)](https://i.ibb.co/Lt0y5Cj/freshrss-youtube.png) | [![freshrss-peertube](https://i.ibb.co/J28Y7Ft/freshrss-peertube.png)](https://i.ibb.co/J28Y7Ft/freshrss-peertube.png) [gfeeds](https://gabmus.gitlab.io/gnome-feeds/) | python | aucun ([rapport de bug](https://gitlab.gnome.org/World/gfeeds/issues/20)) | Utilise la bibliothèque feedparser | [![gfeeds-youtube](https://gitlab.gnome.org/World/gfeeds/uploads/3f81aa6c03a006927ba5e6c01ad7c175/gfeeds-youtube.png)](https://gitlab.gnome.org/World/gfeeds/uploads/3f81aa6c03a006927ba5e6c01ad7c175/gfeeds-youtube.png) | [![gfeeds-peertube](https://gitlab.gnome.org/World/gfeeds/uploads/ace019a9c5a45253c441fa034d83febb/gfeeds-peertube.png)](https://gitlab.gnome.org/World/gfeeds/uploads/ace019a9c5a45253c441fa034d83febb/gfeeds-peertube.png) [handy news reader](https://handynewsreader.blogspot.com/) | Java | aucun ([rapport de bug](https://github.com/yanus171/Handy-News-Reader/issues/368)) | fork de flym | [![handy-youtube](https://user-images.githubusercontent.com/60163/69222700-48971d00-0b7a-11ea-8f9c-30ff1a6c76ab.png)](https://user-images.githubusercontent.com/60163/69222700-48971d00-0b7a-11ea-8f9c-30ff1a6c76ab.png) | [![handy-peertbe](https://user-images.githubusercontent.com/60163/69222692-43d26900-0b7a-11ea-8ac6-b408dd376b5c.png)](https://user-images.githubusercontent.com/60163/69222692-43d26900-0b7a-11ea-8ac6-b408dd376b5c.png) [Kriss feed](https://github.com/tontof/kriss_feed) | PHP | correct ([rapport de bug](https://github.com/tontof/kriss_feed/issues/416) | Youtube OK - Peertube KO | [![krissfeed-youtube](https://user-images.githubusercontent.com/60163/69244430-38486780-0ba5-11ea-8bfe-4a7941e711fa.png)](https://user-images.githubusercontent.com/60163/69244430-38486780-0ba5-11ea-8bfe-4a7941e711fa.png) | [![krissfeed-peertube](https://user-images.githubusercontent.com/60163/69244437-3c748500-0ba5-11ea-8011-13073ce88c3e.png)](https://user-images.githubusercontent.com/60163/69244437-3c748500-0ba5-11ea-8011-13073ce88c3e.png) [Leed](https://github.com/LeedRSS/Leed) | PHP | mauvais ([rapport de bug](https://github.com/LeedRSS/Leed/issues/484)) | Format reconnu, UI non adaptée. | [![leed-youtube](https://user-images.githubusercontent.com/60163/69163690-f52bbd00-0aee-11ea-9776-287c656374f3.png)](https://user-images.githubusercontent.com/60163/69163690-f52bbd00-0aee-11ea-9776-287c656374f3.png) | [![leed-peertube](https://user-images.githubusercontent.com/60163/69163688-f52bbd00-0aee-11ea-827e-6f5ee2344b86.png)](https://user-images.githubusercontent.com/60163/69163688-f52bbd00-0aee-11ea-827e-6f5ee2344b86.png) [Liferea](https://lzone.de/liferea/) | C | mauvais ([rapport de bug](https://github.com/lwindolf/liferea/issues/761)) | Format reconnu, UI non adaptée. | [![liferea-youtube](https://user-images.githubusercontent.com/60163/68994625-5f412980-0885-11ea-9b6a-b998964ca4fd.png)](https://user-images.githubusercontent.com/60163/68994625-5f412980-0885-11ea-9b6a-b998964ca4fd.png) | [![liferea-peertube](https://user-images.githubusercontent.com/60163/69147822-3a41f600-0ad3-11ea-8f7e-296da4f28a18.png)](https://user-images.githubusercontent.com/60163/69147822-3a41f600-0ad3-11ea-8f7e-296da4f28a18.png) [Miniflux](https://miniflux.app/) | GO | mauvais ([rapport de bug](https://github.com/miniflux/miniflux/issues/510)) | Seul le player youtube est affiché | [![miniflux-youtube](https://user-images.githubusercontent.com/60163/69166375-6b322300-0af3-11ea-9b17-ead6433562cc.png)](https://user-images.githubusercontent.com/60163/69166375-6b322300-0af3-11ea-9b17-ead6433562cc.png) | [![miniflux-peertube](https://user-images.githubusercontent.com/60163/69166477-96b50d80-0af3-11ea-92e3-d80d26bf3d7e.png)](https://user-images.githubusercontent.com/60163/69166477-96b50d80-0af3-11ea-92e3-d80d26bf3d7e.png) [nextcloud news](https://apps.nextcloud.com/apps/news) | PHP | mauvais ([rapport de bug](https://github.com/nextcloud/news/issues/570)) | Utilise la bibliothèque feed-io | [![nextcloud-news-youtube](https://user-images.githubusercontent.com/60163/69166839-32df1480-0af4-11ea-80e7-741806345822.png)](https://user-images.githubusercontent.com/60163/69166839-32df1480-0af4-11ea-80e7-741806345822.png) | [![nextcloud-news-peertube](https://user-images.githubusercontent.com/60163/69166845-370b3200-0af4-11ea-8623-ec28a40b57ed.png)](https://user-images.githubusercontent.com/60163/69166845-370b3200-0af4-11ea-8623-ec28a40b57ed.png) [nextcloud news android](https://github.com/nextcloud/news-android) | Java | aucun ([rapport de bug](https://github.com/nextcloud/news-android/issues/800))| Player Youtube OK. Pas de miniature, pas de description. | [![nextcloud-news-android-youtube](https://user-images.githubusercontent.com/60163/69221315-4089ae00-0b77-11ea-9e0e-4ad44adc07fd.png)](https://user-images.githubusercontent.com/60163/69221315-4089ae00-0b77-11ea-9e0e-4ad44adc07fd.png) | [![nextcloud-news-android-peertube](https://user-images.githubusercontent.com/60163/69221325-47182580-0b77-11ea-87be-c5fa87b17972.png)](https://user-images.githubusercontent.com/60163/69221325-47182580-0b77-11ea-87be-c5fa87b17972.png) [newsboat](https://newsboat.org/) | C++ | mauvais ([rapport de bug](https://github.com/newsboat/newsboat/issues/595)) | C'est un lecteur en terminal. On pourrait tout de même y lire les descriptions des vidéos | [![newsboat-youtube](https://user-images.githubusercontent.com/60163/69167092-a8e37b80-0af4-11ea-963c-5ba582ec3c53.png)](https://user-images.githubusercontent.com/60163/69167092-a8e37b80-0af4-11ea-963c-5ba582ec3c53.png) | [![newsboat-peertube](https://user-images.githubusercontent.com/60163/69167110-b00a8980-0af4-11ea-80c8-11e0c9ef14db.png)](https://user-images.githubusercontent.com/60163/69167110-b00a8980-0af4-11ea-80c8-11e0c9ef14db.png) [newsblur](https://github.com/samuelclay/NewsBlur) | python | moyen ([rapport de bug](https://github.com/samuelclay/NewsBlur/issues/1265)) | Youtube est OK mais Peertube KO. Je les soupçonne d'utiliser le namespace de youtube plutôt que Media-RSS | [![newsblur-youtube](https://user-images.githubusercontent.com/60163/69168484-0d9fd580-0af7-11ea-8596-bad25e295c8d.png)](https://user-images.githubusercontent.com/60163/69168484-0d9fd580-0af7-11ea-8596-bad25e295c8d.png) | [![newsblur-peertube](https://user-images.githubusercontent.com/60163/69168507-1690a700-0af7-11ea-86f4-31dab5dbaade.png)](https://user-images.githubusercontent.com/60163/69168507-1690a700-0af7-11ea-86f4-31dab5dbaade.png) [QuiteRSS](https://quiterss.org/) | C++ | partiel ([rapport de bug](https://github.com/QuiteRSS/quiterss/issues/1207)) | Youtube OK, Peertube KO | [![quiterss-youtube](https://user-images.githubusercontent.com/60163/69173803-ccacbe80-0b00-11ea-84ef-a815205e19ae.png)](https://user-images.githubusercontent.com/60163/69173803-ccacbe80-0b00-11ea-84ef-a815205e19ae.png) | [![quiterss-peertube](https://user-images.githubusercontent.com/60163/69173818-d1717280-0b00-11ea-9406-bab4c67a87ad.png)](https://user-images.githubusercontent.com/60163/69173818-d1717280-0b00-11ea-9406-bab4c67a87ad.png) [RSSMonster](https://github.com/pietheinstrengholt/rssmonster) | Javascript | aucun ([rapport de bug](https://github.com/pietheinstrengholt/rssmonster/issues/62) | | [![rssmonster-youtube](https://user-images.githubusercontent.com/60163/69243981-6f6a4900-0ba4-11ea-8378-0d2b9f3034bf.png)](https://user-images.githubusercontent.com/60163/69243981-6f6a4900-0ba4-11ea-8378-0d2b9f3034bf.png) | [![rssmonster-peertube](https://user-images.githubusercontent.com/60163/69243993-72fdd000-0ba4-11ea-998f-bfb12052ba62.png)](https://user-images.githubusercontent.com/60163/69243993-72fdd000-0ba4-11ea-998f-bfb12052ba62.png) [rssowl](http://www.rssowl.org/) | Java | mauvais ([rapport de bug](https://github.com/Xyrio/RSSOwlnix/issues/74)) | Format reconnu, UI non adaptée. | [![rssowl-youtube](https://user-images.githubusercontent.com/60163/69174287-c8cd6c00-0b01-11ea-9351-20e8a9b7451f.png)](https://user-images.githubusercontent.com/60163/69174287-c8cd6c00-0b01-11ea-9351-20e8a9b7451f.png) | [![rssowl-peertube](https://user-images.githubusercontent.com/60163/69174301-cd922000-0b01-11ea-93f8-a021391c9960.png)](https://user-images.githubusercontent.com/60163/69174301-cd922000-0b01-11ea-93f8-a021391c9960.png) [selfoss](https://www.selfoss.aditu.de/) | PHP | aucun ([rapport de bug](https://github.com/SSilence/selfoss/issues/1156))| Utilise la bibliothèque SimplePie | [![selfoss-youtube](https://user-images.githubusercontent.com/60163/69175852-d6d0bc00-0b04-11ea-92d9-34b1434f6cb1.png)](https://user-images.githubusercontent.com/60163/69175852-d6d0bc00-0b04-11ea-92d9-34b1434f6cb1.png) | [![selfoss-peertube](https://user-images.githubusercontent.com/60163/69175874-e05a2400-0b04-11ea-904e-96179288132c.png)](https://user-images.githubusercontent.com/60163/69175874-e05a2400-0b04-11ea-904e-96179288132c.png) [TinyTinyRSS](https://tt-rss.org/) | PHP | mauvais ([rapport de bug](https://community.tt-rss.org/t/media-rss-support/2912)) | Format reconnu, UI non adaptée. | [![ttrss-youtube](https://community.tt-rss.org/uploads/default/original/2X/1/166fd145276263d473ed4ad304dfca1467a47870.png)](https://community.tt-rss.org/uploads/default/original/2X/1/166fd145276263d473ed4ad304dfca1467a47870.png) | [![ttrss-peertube](https://community.tt-rss.org/uploads/default/original/2X/1/166fd145276263d473ed4ad304dfca1467a47870.png)](https://community.tt-rss.org/uploads/default/original/2X/1/166fd145276263d473ed4ad304dfca1467a47870.png) [Winds](https://getstream.io/winds/) | Javascript | correct ([rapport de bug](https://github.com/GetStream/Winds/issues/606)) | Youtube OK. Peertube KO | [![winds-youtube](https://user-images.githubusercontent.com/60163/69228722-5ea9db00-0b84-11ea-84f2-3a455907fdba.png)](https://user-images.githubusercontent.com/60163/69228722-5ea9db00-0b84-11ea-84f2-3a455907fdba.png) | [![winds-peertube](https://user-images.githubusercontent.com/60163/69228731-623d6200-0b84-11ea-99a3-0d54136149fd.png)](https://user-images.githubusercontent.com/60163/69228731-623d6200-0b84-11ea-99a3-0d54136149fd.png) Si d'aventure vous voyez d'autres lecteurs qui pourraient avoir leur place dans cette liste, je suis tout ouïe. # Les bibliothèques de lecture de flux RSS J'attends des bibliothèques de lecture de flux RSS qu'elles exposent un modèle de données qui soit fidèle à la spécification. Je constate que peu de bibliothèques supportent le standard, et absolument aucune ne le fait correctement, le support étant généralement cantonné à la gestion des miniatures et des descriptions des vidéos (mais c'est un début !). Il est intéressant de noter que certaines bibliothèques sont utilisées par beaucoup de lecteurs de flux (comme par exemple Simplepie). | Langage | Support | Notes ----------|---------|---------|------- [feed-io](https://feed-io.net/) | PHP | [aucun](https://github.com/alexdebril/feed-io/issues/240) | [feedparser](https://pythonhosted.org/feedparser/) | python | [partiel](https://github.com/kurtmckee/feedparser/blob/develop/feedparser/namespaces/mediarss.py) | L'implémentation existe, mais [elle ne respecte pas du tout le standard](https://github.com/kurtmckee/feedparser/issues/195). [podcastparser](https://podcastparser.readthedocs.io/en/latest/) | python | [partiel](https://github.com/gpodder/podcastparser/blob/c342d63f7a5009f122c766f8072535fa760d7374/podcastparser.py#L370) | Beaucoup de tags sont ignorés [libgrss](https://wiki.gnome.org/Projects/Libgrss) | C | [aucun](https://gitlab.gnome.org/GNOME/libgrss/issues/3) | [SimplePie](https://simplepie.org/) | PHP | OK | Le [code](https://github.com/simplepie/simplepie/blob/master/library/SimplePie/Item.php) semble supporter MediaRSS, mais la documentation n'est pas explicite sur le sujet. [syndication](https://github.com/rust-syndication/rss) | Rust | [aucun](https://github.com/rust-syndication/rss/issues/29) | Mes recherches sur les bibliothèques n'ont pas été très approfondies, mais si vous en voyez une qui aurait sa place dans ce tableau, encore une fois je suis tout ouïe. # Conclusion Étonnamment, je me rends compte que la plupart des développeurs d'outils lié à Atom/RSS ignorent jusqu'à l'existence de Media-RSS. Lorsque des utilisateurs demandent le support du tag ``, les développeurs le considèrent souvent comme du RSS non standard et exotique et refusent de l'implémenter. Je suis bien au courant qu'il ne suffit pas de demander gentiment aux développeurs pour qu'une fonctionnalité arrive, mais j'espère au moins que ces tickets permettront de discuter, et à minima de rappeler au monde l'existence de Media-RSS. Pour le moment les réponses que j'ai eues sont globalement positives. Elles vont de « ok, code le toi-même » à « trop cool j'implémente ça tout de suite ». Par ailleurs je compte contribuer à une meilleure implémentation dans feedparser afin que gfeeds puisse en profiter, ainsi que dans feed-io afin que nextcloud-news puisse en profiter. Et puis qui sait, si les choses bougent, je publierai peut-être une rétrospective.

AltStyle によって変換されたページ (->オリジナル) /