Simple Wordpress API lisp client
I like old things, therefore I started to learn Lisp.
There isn't a better way to learn than by doing, so I tried to implement a client for the wordpress api. the result, even if not complete yet, it's so elegant that I'd like to share it.
(require 's-xml-rpc)
(defpackage :wp
(:use :cl :cl-user :s-xml-rpc))
(in-package :wp)
(defparameter +interfaces+
'((get-blogs "wp.getUsersBlogs" username password)
(get-tags "wp.getTags" blog-id username password)
(get-comment-count "wp.getCommentCount" blog-id username password post-id)
(get-post-status-list "wp.getPostStatusList" blog-id username password)
(get-page-status-list "wp.getPageStatusList" blog-id username password)
(get-page-templates "wp.getPageTemplates" blog-id username password)
(get-options "wp.getOptions" blog-id username password)
(delete-comment "wp.deleteComment" blog-id username password comment-id)
(get-comment-status-list "wp.getCommentStatusList" blog-id username password)
(get-page "wp.getPage" blog-id page-id username password)
(get-pages "wp.getPages" blog-id username password)
(get-page-list "wp.getPageList" blog-id username password)
(delete-page "wp.deletePage" blog-id username password page-id)
(get-authors "wp.getAuthors" blog-id username password)
(get-categories "wp.getCategories" blog-id username password)
(delete-category "wp.deleteCategory" blog-id username password category-id)
(suggest-categories "wp.suggestCategories" blog-id username password category max-results)
(get-comment "wp.getComment" blog-id username password comment-id))
"Interface definition to WP services")
(defun defunwp (params)
(destructuring-bind (name service &rest rest) params
(setf (fdefinition name) (compile nil `(lambda (host ,@rest &optional (url "/xmlrpc.php"))
(block ,name
(xml-rpc-call
(encode-xml-rpc-call ,service ,@rest)
:host host
:url url)))))
name))
(mapcar #'(lambda (interface) (export (defunwp interface))) +interfaces+)
It uses the s-xml-rpc package and I've tested it with SBCL.
Example usage is as follows:
(wp:get-blogs "username.wordpress.com" "your-username" "your-password") ; returns the list of blogs for the user
(wp:get-pages "username.wordpress.com" your-blog-id "your-username" "your-password") ; returns the list of pages
And so on (see wp::+interfaces+ for function names and required params).
Enjoy!