log

Emacs から WordPress に投稿しようとして失敗した話


「投稿記事書くときにHTML書くのだるいし Emacs から投稿できないかな」ってことで調べてみた。



どうやら EmacsからWordPressへwp-emacsで投稿する。 - redtower's memo の通りにやればうまくいきそうだ、ってことで試してみた。



とりあえずファイルをダウンロードする。


$ mkdir ~/.emacs.d/elisp/wp-emacs
$ cd ~/.emacs.d/elisp/wp-emacs
$ wget http://launchpad.net/weblogger-el/trunk/1.4.5/+download/weblogger.el
$ wget http://www.emacswiki.org/emacs/xml-rpc.el



init.el を編集する。
~/.emacs.d/init.el


; wp-emacs (weblogger)
(add-to-list 'load-path "~/.emacs.d/elisp/wp-emacs")
(require 'xml-rpc)
(require 'weblogger)
(global-set-key "\C-c\C-w" 'weblogger-start-entry) ; weblogger 起動 (C-c C-w)

(defun my-weblogger-send-entry (&optional arg)
(interactive)
(save-buffer)
(set-buffer-modified-p t)
(weblogger-save-entry nil arg)
(my-weblogger-quit))

(defun my-weblogger-quit ()
(interactive)
(when (y-or-n-p "Do you want to quit weblogger-entry? ")
(bury-buffer)))

(add-hook 'weblogger-start-edit-entry-hook
'(lambda ()
(define-key weblogger-entry-mode-map (kbd "C-x C-s") nil)
(define-key weblogger-entry-mode-map (kbd "C-c n") 'weblogger-next-entry)
(define-key weblogger-entry-mode-map (kbd "C-c p") 'weblogger-prev-entry)
(define-key weblogger-entry-mode-map (kbd "C-c c") 'weblogger-start-entry)
(define-key weblogger-entry-mode-map (kbd "C-c C-c") 'my-weblogger-send-entry)
(define-key weblogger-entry-mode-map (kbd "C-c C-k") 'my-weblogger-quit)
;(yes/minor-mode t)
(auto-fill-mode -1)))



一旦 Emacs を立ち上げ、初期設定をする。



M-x weblogger-setup-weblog
http://yono05.wordpress.com/xmlrpc.php



ユーザ名とパスワードを聞かれるので、それぞれ入力する。



そうすると、init.el に設定内容が追記される。元記事にもあるようにパスワードの部分を修正する。
'(weblogger-config-alist (quote (("default" "http://yono05.wordpress.com/xmlrpc.php" "yono05" nil "1")))))



これで使えるようになった、ってことで C-c C-w で編集画面を開いて、適当に何か書いて C-c C-c で送信してみる。



が、Invalid date とかエラーが出て送信されない。



どうやら自動的に挿入される日付の書式に対応してない?っぽくて、yyyymmddThhmmss の書式に書き換えるとうまくいくらしい。



というわけで、試しに以下な感じで送ってみた。



Subject: テスト送信
Keywords:
Date: 20111120T182403
From: yono05
Newsgroup: Engineering My Life
–text follows this line--
これはテスト送信です。



そうすると、何故か最新の投稿に上書きされて上記の内容が保存された……。
泣きながら投稿を書きなおし、改めてやり直してみたものの、やっぱり上書きされる。



やり方が間違ってるのかもしれないけど、どうにもやってられないので別の方向を考えることにした。
要するに素のHTMLを書かずに、Org-mode から変換すればいいわけで。だったら、Org-mode からエクスポートしたHTMLを貼りつけてみたらどうか?ということで試してみた。
やってみた結論としては、エクスポートされたHTMLの本文部分のみを貼りつければ特に問題ない感じ。



というわけで、しばしの運用としては


  1. howm で新しくファイルを作る

  2. Org-mode 形式で内容を書いていく

  3. 終わったら M-x org-export-as-html-to-buffer でバッファに書き出す

  4. /tmp/hoge.html 辺りに保存する

  5. cat /tmp/hoge.html | pbcopy でクリップボードにコピー

  6. WordPress の新規投稿画面を開いて貼り付ける

こんな感じ。



直接投稿できたらもうちょい楽だけど、カテゴリの設定ができないのでどっちみち管理画面は開かないといけないらしい。残念。

ちなみに、この投稿自体も Org-mode から生成された HTML を貼りつけたもの。