(in-package :lispostory) (defparameter *chronostory-drops-sheet-url* "https://docs.google.com/spreadsheets/d/e/2PACX-1vRpKuZGJQIFFxSi6kzYx4ALI0MQborpLEkh3J1qIGSd0Bw7U4NYg5CK-3ESzyK580z4D8NO59SUeC3k/pub?gid=1888753114&single=true&output=csv") (defparameter *chronostory-drops* nil) (defun refresh-drops () (let* ((data (drakma:http-request *chronostory-drops-sheet-url*)) (csv (cl-csv:read-csv data)) (header (car csv)) (num-fields-to-keep (position "" header :test #'equal)) (keys (mapcar #'string-to-hash-table-key (subseq header 0 num-fields-to-keep))) (drops (map 'vector (lambda (row) (pairhash keys (subseq row 0 num-fields-to-keep))) (cdr csv)))) (setf *chronostory-drops* drops) (write-string-into-file (shasht:write-json drops nil) "drops.json" :if-exists :overwrite :if-does-not-exist :create))) (defun reload-drops () (let ((drops (shasht:read-json (uiop:read-file-string "drops.json")))) (setf *chronostory-drops* drops) drops)) (defun load-drops () (if *chronostory-drops* *chronostory-drops* (reload-drops)))