git.fiddlerwoaroof.com
Browse code

feat: improve detection of self-link in atom feeds

fiddlerwoaroof authored on 05/05/2023 06:17:39
Showing 1 changed files
... ...
@@ -16,6 +16,7 @@
16 16
 (defclass atom-feed (alimenta:feed)
17 17
   ((subtitle   :initarg :subtitle                        :initform nil :accessor subtitle)
18 18
    (id         :initarg :id                              :initform nil :accessor id)
19
+   (links      :initarg :links                           :initform nil :accessor links)
19 20
    (icon       :initarg :icon                            :initform nil :accessor icon)
20 21
    (categories :initarg :categories :type (or null list) :initform nil :accessor categories)
21 22
    (logo       :initarg :logo                            :initform nil :accessor logo)
... ...
@@ -101,8 +102,18 @@
101 102
           (doc-id (get-feed-elem "feed > id"))
102 103
           (doc-updated (awhen (get-feed-elem "feed > updated")
103 104
                          (local-time:parse-timestring it)))
104
-          (doc-link (get-feed-elem-attr "feed > link[rel=alternate]" "href"))
105
-          (doc-feed-link (or feed-link (get-feed-elem-attr "feed > link[rel=self]" "href")))
105
+          (doc-link (or (get-feed-elem-attr "feed > link[rel=alternate]" "href")
106
+                        (get-feed-elem-attr "feed > link:not([rel=self])" "href")
107
+                        (get-feed-elem-attr "feed > link[rel=self]" "href")
108
+                        feed-link))
109
+
110
+          (doc-links (coerce ($ (inline xml-dom)
111
+                               "feed > link"
112
+                               (combine (attr "rel")
113
+                                        (attr "href")))
114
+                             'list))
115
+          (doc-feed-link (or feed-link
116
+                             (get-feed-elem-attr "feed > link[rel=self]" "href")))
106 117
           (doc-categories ($ (inline xml-dom) "feed > category"
107 118
                             (combine (attr "term") (attr "label") (attr "scheme"))
108 119
                             (map-apply #'make-category)))
... ...
@@ -113,8 +124,7 @@
113 124
                      :icon doc-icon
114 125
                      :logo doc-logo
115 126
                      :link doc-link
116
-                     :updated doc-updated
117
-                     :id doc-id
127
+                     :links doc-links
118 128
                      :feed-link doc-feed-link
119 129
                      :subtitle doc-subtitle
120 130
                      :categories (coerce doc-categories 'list)