コンテンツへスキップ

モーレツ! Org mode 教室 その7: org2blog で WordPress に投稿する

Org mode でブログを書きたい

Org modeに慣れてくるとなんでも Org modeで書きたくなってくるもので、ブログも Org 記法で書きたいのである。本ブログのような WordPress ベースのシステムでこれを実現するのが org2blog で、XML-RPC を使って Emacs からウェブなどを介さず直に WordPress へ投稿する手段を提供してくれる。XML-RPC (というか MetaWeblog API)ベースなので、Wordpress 以外の CMS でもおそらく使えるとは思うが(名前も org2 blog だし)、基本的には WordPress が想定されているようである。SOAPだJSON-RPCだというご時世にXML-RPCというのはやや古風だが、ちゃんと動く。

例によって org2blog もすでに MELPA レポジトリに入っているので、前回説明した straight.el と use-package の組み合わせで手軽にインストールできる…はずなのだが、残念ながら若干の小細工が必要だ。

org2blog のインストール

話の前提として、Wordpress の XML-RPC インターフェースにアクセスできなければならない。最近では脆弱性対策ということでサーバのほうでアクセスが制限されていることが多いので、これから org2blog を使うというマシンから、Wordpressを入れたディレクトリの直下にある xmlrpc.php にウェブブラウザからアクセスできることを確認すると良い(「XML-RPC server accepts POST requests only.」と表示されるはず)。おそらくhttp://www.yourblog.com/xmlrpc.php といった感じのURLで、WordPress.com のブログホスティングでも同じである。もちろん強いパスワードを設定し、アクセスできるIPアドレスを絞るなどの対策はしておくべきだろう。

さて、org2blog そのものには特に問題ないのだが、org2blog が中で使っている xml-rpc-el の現在のバージョンには若干問題があり、日本語のような Unicode キャラクタを含むリクエストがエラーになってしまう。そこで、早速前回紹介した straight.el の出番となる。直したバージョンを自分の Github レポジトリで公開している人がいるので、オフィシャルではなくそちらを使ってインストールするわけだ。具体的には、org2blog に関する記述の前に、init.el に

(straight-use-package
 '(xml-rpc-el :type git :host github :repo "grettke/xml-rpc-el"))
(use-package xml-rpc
  :defer t  
  )

などと書くだけでよい。

org2blog そのものの設定は、最小限で

(use-package org2blog
  :after org
  :defer t
  :config
  (setq org2blog/wp-blog-alist
        `(("myblog"
           :url "https://www.yourwordpresshost.com/xmlrpc.php"
           :username ,(car (auth-source-user-and-password "myblog"))
           :password ,(cadr (auth-source-user-and-password "myblog"))
           )
          ))
  (setq org2blog/wp-buffer-template
        "#+TITLE: 
#+CATEGORY: 
#+TAGS: 
#+OPTIONS:
#+PERMALINK: \n")
  )

こんな感じになるだろうか。 細かい説明は不要だと思うが、 wp-blog-alist には当然複数のブログを設定することもできる。

auth-source を用いた認証

問題は認証で、ユーザ名とパスワードを与える必要があるわけだが、流石に平文で init.el に書きこむのは気が引ける。そんなときは、Emacs 標準の認証管理機能である auth-source を使うと良いだろう。具体的には、~/.authinfo というファイルを用意し、

machine myblog login WordPressのユーザ名 password WordPressのパスワード

などと書いた上で、

$ gpg -c .authinfo

と GnuPG で暗号化して ~/.authinfo.gpg として置いておけばよい。あとは、 必要なときに auth-source が pinentry のようなパスフレーズ入力ダイアログを呼び出すので、そこから復号化できる。GPG は、Windows でも gpg4win などをインストールすれば普通に使えるだろう。org2blog を毎回使うわけではないのに起動時に毎回 GPG のパスフレーズを聞いてきて面倒くさいという場合は、上記の例のように (use-package org2blog):defer t を指定してやれば、必要なときまで読み込みが遅延されるので、パスフレーズ入力用ダイアログも org2blog の起動時に呼び出されるようになる。

org2blog でブログを書く

ここまで設定した上で、 M-x org2blog/wp-login を実行すると、Wordpress にログインして準備完了となる。あとは、 M-x org2blog/wp-new-entry を実行するとドラフトバッファが準備される。このドラフトのひな形を指定しているのが org2blog/wp-buffer-template だ。Org mode は、ファイル(というかバッファ)に #+FOO: bar という形式で書くことで、ファイル毎に細かく設定を変える仕組みがあるのだが(詳しくはThe Org Manual: In-buffer settingを参照)、ここではWordpressの記事のタイトルやパーマリンクを指定するのに使われている。 #+DATE: を使えば公開日時も指定できる。

ここまで来れば、後は Org 記法で記事を書くだけだ。書くにあたって記法に全く制限はなく、リンクを張ればリンクとして扱われるし、画像ファイルへリンクを張れば自動的にアップロードされる。書き終わったら、 M-x org2blog/wp-post-buffer でドラフトがサーバに送られ、希望すればウェブブラウザを呼び出してプレビューも見られる。もちろんいきなり公開することも可能だ。

ちなみに一度サーバに記事が送られると、ドラフトバッファには先ほどの In-buffer setting の一つとして #+POSTID: 数字 という行が追記される。これがあれば、Emacs 側で追記や編集をした上でまた M-x org2blog/wp-post-buffer を実行すれば、記事がダブることなくちゃんとサーバ側も変更に追従してアップデートされるのである。他にも、サブツリー単位で送信したり MathJax を用いた数式を書いたりといろいろなことが出来るのだが、細かいコマンド等は org2blog の Gihub レポジトリにある説明を参照してほしい。

いずれにせよ、org2blog を使うと WordPress のウェブインターフェースからちまちまパーマリンクやらタグやらを入力する必要がなくなり、まあ大したことではないのだが、気分的には大変楽である。Wordpress をお使いならぜひお試しください。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください