]> 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
     (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))))
   "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)))
     (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)))))
 
       (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 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")
     (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))))))
 
     (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
   "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
     (write-file filename)))
 
 \f