Kaynağa Gözat

[rss] feed hashtag

Innocenty Enikeew 5 yıl önce
ebeveyn
işleme
859c5af801
1 değiştirilmiş dosya ile 14 ekleme ve 7 silme
  1. 14 7
      plugins/rss.lisp

+ 14 - 7
plugins/rss.lisp

@@ -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))