Files
lispostory/items.lisp
2026-01-05 21:22:19 -05:00

43 lines
1.5 KiB
Common Lisp

(in-package :lispostory)
(define-data-source item)
(defparameter *maplestory-items-url* "https://maplestory.io/api/gms/83/item")
(defun get-maplestory-items ()
(http-get-json *maplestory-items-url*))
(defparameter *chronostory-item-url-format* "https://chronostory.onrender.com/api/item-info?itemId=~a")
(defun chronostory-item-url (item-id)
(format nil *chronostory-item-url-format* item-id))
(defun get-chrono-item (maple-item)
(if (gethash "isCash" maple-item)
nil
(let* ((item-id (gethash "id" maple-item))
(url (chronostory-item-url item-id))
(data (http-get-json url)))
(sleep 0.3)
data)))
(defmethod refresh ((ds item-data-source))
(let* ((maple-items (get-maplestory-items))
(_ (uiop:println "Retrieved maplestory items. Getting chronostory items..."))
(chrono-items
(loop for maple-item across maple-items
for chrono-item = (get-chrono-item maple-item)
when (and chrono-item
(stringp (gethash "item_name" chrono-item))
(string-not-equal (gethash "item_name" chrono-item) ""))
collect chrono-item)))
(declare (ignore _))
(uiop:println "Retrieved chronostory items. Writing out to json file...")
(setf (cache ds) chrono-items)
(write-string-into-file
(shasht:write-json chrono-items nil)
(file-path ds)
:if-exists :overwrite
:if-does-not-exist :create)
(uiop:println "Done!")))