]> gitweb.fperrin.net Git - atom.el.git/commitdiff
Add atom:link with rel=self for RSS feeds
authorFrédéric Perrin <fred@fperrin.net>
Tue, 2 Apr 2024 18:32:10 +0000 (19:32 +0100)
committerFrédéric Perrin <fred@fperrin.net>
Tue, 2 Apr 2024 18:32:10 +0000 (19:32 +0100)
atom.el

diff --git a/atom.el b/atom.el
index 39bfef7e020707413c9304cd3b5152db1b9a67f8..b0d05121e7b223b549ad50bdfcc989ac2d9484fd 100644 (file)
--- a/atom.el
+++ b/atom.el
@@ -171,11 +171,15 @@ fragment. See `atom-add-entry' for additional details."
     (write-file filename)))
 
 \f
-(defun atom-to-rss (atom)
+(defun atom-to-rss (atom &optional rss-self)
   "Translate an Atom feed into an RSS one, returning the translation.
 
 Some information may be lost or approximated."
   (let ((rss (list (assoc 'title atom))))
+    (if rss-self
+       (atom-modify-entry rss 'atom:link
+                          `(((href . ,rss-self) (rel . "self")
+                             (type . "application/atom+xml")))))
     (atom-to-rss-translator atom rss '((subtitle . description)
                                       (updated . pubDate)
                                       (link . link)))
@@ -217,10 +221,11 @@ Some information may be lost or approximated."
       (setcar (cdr link) nil)
       (setcdr (cdr link) (cons link-addr nil)))))
 
-(defun atom-print-as-rss (atom)
-  (let ((rss (atom-to-rss atom)))
+(defun atom-print-as-rss (atom &optional rss-self)
+  (let ((rss (atom-to-rss atom rss-self)))
     (insert atom-xml-declaration)
-    (insert "<rss version=\"2.0\">\n")
+    ;; xmlns:atom included in order to allow the atom:link rel=self element
+    (insert "<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n")
     (insert "  <channel>\n")
     (xml-print rss "    ")
     (insert "\n  </channel>\n")
@@ -238,10 +243,10 @@ format used by RSS."
     (setcar (cddr pubDate)
            (atom-to-rss-time (car (xml-node-children pubDate))))))
 
-(defun atom-to-rss-write-file (atom filename)
+(defun atom-to-rss-write-file (atom filename &optional rss-self)
   "Saves ATOM as a RSS feed into FILENAME."
   (with-temp-buffer
-    (atom-print-as-rss atom)
+    (atom-print-as-rss atom rss-self)
     (write-file filename)))
 
 \f