summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2021-12-30 16:03:48 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2021-12-30 16:03:48 +0100
commitdb73c44a2640413fce80a9b5fa03fa58dc98d458 (patch)
tree54c704290abfa527890297c76afee277189d18bf
parentFix add-to-load-path. (diff)
downloadrss-filter-db73c44a2640413fce80a9b5fa03fa58dc98d458.tar.gz
rss-filter-db73c44a2640413fce80a9b5fa03fa58dc98d458.tar.xz
Move date parsing to library.
-rw-r--r--config.scm47
1 files changed, 8 insertions, 39 deletions
diff --git a/config.scm b/config.scm
index 33a06d1..888f5c8 100644
--- a/config.scm
+++ b/config.scm
@@ -7,43 +7,12 @@
(feed-handler)
- ((datetime) :select (datetime datetime->string)))
+ ((ice-9 i18n) :select (make-locale))
+ ((calp util) :select (->))
+ ((datetime) :select (datetime datetime->string
+ string->datetime)))
-(define (parse-month str)
- "Get month number from (a shortened) monthname.
-Returns -1 on failure"
- (let loop ((i 1)
- (months
- (list "january" "february" "march" "april" "may" "june" "july"
- "august" "september" "october" "november" "december")))
-
-
- (if (null? months)
- -1
- (let ((len (min (string-length (car months))
- (string-length str))))
- (if (string=?
- (string-take (string-downcase str) len)
- (string-take (car months) len))
- i
- (loop (1+ i) (cdr months)))))))
-
-
-(define (parse-date str)
- (and=> (string-match "([a-zA-Z]*)\\. ([0-9]+), ([0-9]+), ([0-9]+):([0-9]+) ([ap])\\.m\\." str)
- (lambda (m)
- (let ((month (match:substring m 1))
- (day (string->number (match:substring m 2)))
- (year (string->number (match:substring m 3)))
- (hour (string->number (match:substring m 4)))
- (minute (string->number (match:substring m 5)))
- (am-pm (match:substring m 6)))
- (datetime #:year year
- #:month (parse-month month)
- #:day day
- #:hour (+ hour (if (string=? am-pm "p") 12 0))
- #:minute minute)))))
(define feeds
(list
@@ -62,10 +31,10 @@ Returns -1 on failure"
"https://swordscomic.com/comic/feed/"
`((rss:pubDate
. ,(lambda (key . children)
- (cond ((parse-date (car children))
- => (lambda (dt)
- (list key (datetime->string dt "~Y-~m-~dT~H:~M:~S"))))
- (else (cons key children)))))
+ (list key
+ (-> (car children)
+ (string->datetime "~b. ~d, ~Y, ~H:~M ~p" (make-locale LC_TIME "en_US.UTF-8"))
+ (datetime->string "~Y-~m-~dT~H:~M:~S")))))
(rss:description
. ,(lambda (key . children)