66 lines
2.2 KiB
Common Lisp
66 lines
2.2 KiB
Common Lisp
#|
|
|
|
|
scryfall API parser
|
|
|
|
WIP
|
|
|
|
This downloads the API data. We haven't even parsed that data
|
|
yet. It's hundreds of GB.
|
|
|
|
|#
|
|
|
|
(in-package #:cl-user)
|
|
|
|
(defpackage #:cl-deck-builder2.models.mtg
|
|
(:use :cl))
|
|
|
|
(in-package #:cl-deck-builder2.models.mtg)
|
|
|
|
(defparameter *base-scryfall-api-uri* "https://api.scryfall.com/")
|
|
|
|
(defun scryfall-api-uri (path)
|
|
(format nil "~a~a" *base-scryfall-api-uri* path))
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(defvar *scryfall-api-data* nil
|
|
"A list of SCRYFALL-API-DATA objects.")
|
|
|
|
(defclass scryfall-api-data ()
|
|
((|content_encoding| :accessor scryfall-content-encoding :initarg :|content_encoding|)
|
|
(|content_type| :accessor scryfall-content-type :initarg :|content_type|)
|
|
(|description| :accessor scryfall-description :initarg :|description|)
|
|
(|download_uri| :accessor scryfall-download-uri :initarg :|download_uri|)
|
|
(|id| :accessor scryfall-id :initarg :|id|)
|
|
(|name| :accessor scryfall-name :initarg :|name|)
|
|
(|object| :accessor scryfall-object :initarg :|object|)
|
|
(|size| :accessor scryfall-size :initarg :|size|)
|
|
(|type| :accessor scryfall-type :initarg :|type|)
|
|
(|updated_at| :accessor scryfall-updated-at :initarg :|updated_at|)
|
|
(|uri| :accessor scryfall-uri :initarg :|uri|)))
|
|
|
|
(defun get-scryfall-data ()
|
|
(let ((json (getf
|
|
(jonathan:parse
|
|
(flex:octets-to-string
|
|
(drakma:http-request (scryfall-api-uri "bulk-data"))))
|
|
:|data|)))
|
|
(mapcar (lambda (row)
|
|
(apply #'make-instance 'scryfall-api-data row))
|
|
json)))
|
|
|
|
(defun load-scryfall-data ()
|
|
(setf *scryfall-api-data*
|
|
(get-scryfall-data)))
|
|
|
|
(defun size-in-gb (size)
|
|
(float (/ size (* 1024 1024 1024))))
|
|
|
|
(defun get-bulk-data-uris (path)
|
|
(with-open-file (out path
|
|
:direction :output
|
|
:if-exists :supersede
|
|
:if-does-not-exist :create)
|
|
(format out "~{~A~%~}"
|
|
(mapcar #'scryfall-download-uri *scryfall-api-data*))))
|