#!/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))