summaryrefslogtreecommitdiff
path: root/flora/services/urlwatcher.scm
diff options
context:
space:
mode:
Diffstat (limited to 'flora/services/urlwatcher.scm')
-rw-r--r--flora/services/urlwatcher.scm56
1 files changed, 56 insertions, 0 deletions
diff --git a/flora/services/urlwatcher.scm b/flora/services/urlwatcher.scm
new file mode 100644
index 0000000..2884c05
--- /dev/null
+++ b/flora/services/urlwatcher.scm
@@ -0,0 +1,56 @@
+#!/usr/bin/env gosh
+
+(use gauche.process)
+(use srfi-13)
+(use srfi-19)
+(use file.util)
+
+(define url "https://ilztalbahn.eu/wp-content/uploads/2020/07/gtfs.zip")
+(define cachefile "/tmp/urlwatch-cache")
+(define storagedir "/var/lib/urlwatch-ilztal")
+
+(do-process `(mkdir "-p" ,storagedir))
+
+(define (get-hash url)
+ (string-trim-both
+ (process-output->string `((curl ,url)
+ (sha256sum)))))
+
+(define hash
+ (get-hash url))
+
+(define pretty-date
+ (date->string (time-utc->date (current-time)) "~5"))
+
+(define (hash-did-change oldhash newhash)
+ (print (format "the url's hash has changed to ~s!" newhash))
+ (let ([newfile (string-append storagedir "/" newhash)])
+ (do-process `(curl ,url "-o" ,newfile))
+ (let ([diff (if oldhash
+ (let ([oldfile (string-append storagedir "/" oldhash)])
+ (process-output->string `(zipcmp ,oldfile ,newfile)))
+ "")])
+ (do-pipeline `((echo ,(format "
+From: urlwatcher@flora.stuebinm.eu
+Subject: Ilztalbahn GTFS Update
+
+Neuer hash: ~a
+Link: ~a
+
+~a
+
+(~a)
+
+" newhash url diff pretty-date))
+ (sendmail "stuebinm@disroot.org")))
+ (sexp-list->file
+ cachefile
+ (list (list pretty-date newhash))
+ :if-exists :append))))
+
+(if (file-is-writable? cachefile)
+ (let ([oldhash (cadr (last (file->sexp-list cachefile)))])
+ (if (equal? (cadr (last (file->sexp-list cachefile))) hash)
+ (print (format "url did not change, hash remains ~a" hash))
+ (hash-did-change oldhash hash)))
+ (hash-did-change #f hash))