(defvar *lduser1* "xxxxxx") (defvar *ldkey1* "xxxxxx") (defvar *ldurl1* "http://livedoor.blogcms.jp/atom/blog/xxxxxxx/article") (setf *drakma-default-external-format* :utf-8) (pushnew (cons "application" "atom+xml") *text-content-types* :test #'equal) (defun make-x-wsse-header (user pass) "wsse認証用ヘッダを生成" (let* ((created (multiple-value-bind (sec min hr day mon year dow daylight-p zone) (decode-universal-time (get-universal-time)) (declare (ignore daylight-p zone)) (format nil "~4,'0d-~2,'0d-~2,'0dT~2,'0d:~2,'0d:~2,'0dZ" year mon day hr min sec))) (nonce (cl-base64:usb8-array-to-base64-string (ironclad:digest-sequence :sha1 (ironclad:ascii-string-to-byte-array (kmrcl:random-string :length 40))))) (digest (cl-base64:usb8-array-to-base64-string (ironclad:digest-sequence :sha1 (ironclad:ascii-string-to-byte-array (concatenate 'string nonce created pass)))))) (concatenate 'string "UsernameToken " "Username=\"" user "\", " "PasswordDigest=\"" digest "\", " "Nonce=\"" nonce "\", " "Created=\"" created "\""))) (defun post-ld-atompub (url user pass xml) "Livedoor Blogへ記事を投稿" (http-request url :content-type "application/atom+xml" :method :post :content xml :content-length (length (jp:encode xml :utf-8)) :additional-headers (list (cons "X-WSSE" (make-x-wsse-header user pass))))) (defun make-post-xml (title category main-a main-b) (concatenate 'string "<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:app=\"http://www.w3.org/2007/app\" xmlns:blogcms=\"http://blogcms.jp/-/spec/atompub/1.0/\">" "<title>" title "</title>" "<content type=\"text/html\" xml:lang=\"ja\"></content>" "<category scheme=\"http://livedoor.blogcms.jp/blog/techit2ch/category\" term=\"" category "\" />" "<blogcms:source>" "<blogcms:body><![CDATA[" main-a "]]></blogcms:body>" "<blogcms:more><![CDATA[" main-b "]]></blogcms:more>" "</blogcms:source>" "</entry>"))
CL で Livedoor Blog へ投稿
Tweet
変数にID、API Key、自分のブログ用AtomPubエンドポイントを設定すれば使える(はず
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿