summaryrefslogtreecommitdiff
path: root/flora/services/urlwatcher.scm
blob: 2884c052244b4543e17edf79ea85dff5e4b988fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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))