|
|
@@ -40,10 +40,9 @@
|
|
|
(local-time:timestamp> (local-time:now) (feed-next-fetch feed))))
|
|
|
|
|
|
(defun refresh-feed (feed &optional (skip-p #'not))
|
|
|
- (let* ((items
|
|
|
- (loop for item in (ignore-errors (fetch-feed-items feed))
|
|
|
- unless (funcall skip-p item)
|
|
|
- collect item))
|
|
|
+ (let* ((items (loop for item in (ignore-errors (fetch-feed-items feed))
|
|
|
+ unless (funcall skip-p item)
|
|
|
+ collect item))
|
|
|
(new-period (adjust-period (feed-period feed) (length items))))
|
|
|
(setf (feed-period feed) new-period
|
|
|
(feed-next-fetch feed) (local-time:timestamp+ (local-time:now) new-period :sec))
|
|
|
@@ -75,7 +74,8 @@
|
|
|
|
|
|
(defun fetch-feed-items (feed)
|
|
|
(let ((plump:*tag-dispatchers* plump:*xml-tags*))
|
|
|
- (loop for item in (get-by-tag (xml-request (feed-url feed)) "item")
|
|
|
+ (loop
|
|
|
+ for item in (get-by-tag (xml-request (feed-url feed)) "item")
|
|
|
collect (make-feed-item :feed feed
|
|
|
:guid (or (child-text item "guid") (child-text item "link"))
|
|
|
:link (child-text item "link")
|
|
|
@@ -89,8 +89,14 @@
|
|
|
(local-time:universal-to-timestamp
|
|
|
(date-time-parser:parse-date-time pub))))))))
|
|
|
|
|
|
+(defun feed-tag (feed)
|
|
|
+ (let* ((domain (quri:uri-domain (quri:uri (feed-url feed))))
|
|
|
+ (dot (position #\. domain)))
|
|
|
+ (when dot (setf domain (subseq domain 0 dot)))
|
|
|
+ (format nil "#~A" (subst #\_ #\- domain))))
|
|
|
+
|
|
|
(defun format-feed-item (item)
|
|
|
- (format nil "[~A](~A)~@[ @ ~A~]~%~A~%"
|
|
|
+ (format nil "[~A](~A)~@[ @ ~A~]~%~A~%~@[~A~]"
|
|
|
(feed-title (feed-item-feed item))
|
|
|
(feed-item-link item)
|
|
|
(alexandria:when-let (ts (feed-item-published item))
|
|
|
@@ -98,7 +104,8 @@
|
|
|
nil ts
|
|
|
:format '((:year 2) "-" (:month 2) "-" (:day 2)
|
|
|
" " (:hour 2) ":" (:min 2))))
|
|
|
- (feed-item-title item)))
|
|
|
+ (feed-item-title item)
|
|
|
+ (feed-tag (feed-item-feed item))))
|
|
|
|
|
|
(defun feed-next-fetch-unix (feed)
|
|
|
(alexandria:when-let (ts (feed-next-fetch feed))
|