1 (in-package :cl-mediawiki
)
3 (defun get-page-content (title)
10 (flet ((page-content (?title sxml
)
11 "Accepts sxml and pulls out the page content from it"
12 (declare (ignorable ?title
)) ;; supress compiler noise
19 ("page" ,#t
(list ("title" ?title
) &rest _
)
22 ("rev" NIL ?content
))))))
28 (parse-api-response-to-sxml (make-api-request parameters
))))
31 (defclass token-bag
()
32 ((timestamp :accessor timestamp
:initarg
:timestamp
:initform nil
)
33 (tokens :accessor tokens
:initarg
:tokens
:initform nil
34 :documentation
"either a single token, or an
35 alist mapping type to value" )))
37 (defmethod print-object ((token-bag token-bag
) stream
)
38 (with-accessors ((timestamp timestamp
)
39 (tokens tokens
)) token-bag
40 (format stream
"#<Token-bag ~a ~a>" timestamp tokens
)))
42 (defmethod edit-token ((token-bag token-bag
))
43 (cdr (assoc :edit
(tokens token-bag
))))
45 (defmethod move-token ((token-bag token-bag
))
46 (cdr (assoc :move
(tokens token-bag
))))
48 (defmethod delete-token ((token-bag token-bag
))
49 (cdr (assoc :delete
(tokens token-bag
) )))
51 (defun get-action-tokens (title &optional
(tokens '(:edit
)))
52 "Returns a token bag which is how you get permission to perform
53 edit/move/delete changes
55 tokens, set of : :move :delete :edit"
56 (let* (;; put pipes between the downcased tokens
57 (token-string (format nil
"~{~(~a~)~^|~}" tokens
))
62 (intoken ,token-string
)
65 (flet ((bind-token-&-ts
(?title sxml
)
66 "Accepts sxml and pulls out the page content from it"
67 (declare (ignorable ?title
)) ;; supress compiler noise
74 ("page" ,#T
(list &rest ?alist
)))))
80 (loop for token in tokens
83 (attribute-value (format nil
"~atoken" token
) alist
)))
84 :timestamp
(attribute-value "touched" alist
))
88 (parse-api-response-to-sxml (make-api-request parameters
))))