33 lines
1.2 KiB
Common Lisp
33 lines
1.2 KiB
Common Lisp
(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)))
|