Posts Tagged ‘client’

simple wordpress api lisp client

August 4, 2010

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!

Advertisements

blog post with charm

April 7, 2009

this is a test blog entry, posted with charm!

charm is a text-based client which uses the MetaWeblog API to post entries to WordPress powered blogs. it also implements other APIs.

I’m wondering if simple ASCII entries like this one will be properly formatted by the WordPress’ Intelligent Text Formatting feature. it would be nice to use vim to edit it…

enjoy!