pyblosxom用のブログ記事をWordPressにインポートする

2009年12月11日 00:54

 以前このブログはPythonで書かれたブログシステム「pyblosxom」を使って運用していたんだけど、機能拡張が面倒臭かった(&色々細かいところが気にくわなかった)ので先日WordPressに移行しました。そこで面倒だったのが記事の移行。WordPressではMovableTypeとかBloggerとかからの移行ツールは充実しているんだけど、pyblosxomからの移行ツールは公式には用意されていません。また、参考情報としてWordPressの公式サイトで紹介されていたblosxomからの移行スクリプトはURLやタグ情報を移行してくれなかったため、結局自前で変換スクリプトを用意することに。

 幸い、WordPressのインポート/エクスポートで使われるWXL(WordPress XML)形式のファイルを簡単に生成できるモジュールをGoogle様が提供しているのを発見、そいつを使ってお気楽に作成できました。ということでここでご紹介。

 スクリプト本体はgithubで公開しているので必要な方は適宜どうぞ。「pyblosxom2wp.py」が本体です。このスクリプト内の頭で宣言している変数「title」にブログのタイトル、「link」にブログのリンクURL、「baseurl」をにBase URLが入るように書き換えて、次のように実行すると標準出力経由でインポート用XMLファイルが出力されます。

./pyblosxom2wp.py <pyblosxomの記事ディレクトリ> > output.xml

あとはそいつをWordPressのインポート機能で読みこめばOK、のはず。これで、カテゴリやタグ、URLについてもできるだけ保持する形でインポートが可能です。

WordPressの記事編集画面を改善する

2009年11月13日 00:35

 Wordpressを導入して困ったのが、記事編集時に勝手に整形されるところ。たとえば、段落の頭の全角アキ(全角スペースね)が勝手に削除されたり、画像を貼りたいときに<div></div>で囲っても勝手にタグが削除されちゃったり。

 めちゃくちゃ不満だったので、設定とかで改善できないか、(極端な話、HTMLでのコーディングに慣れているのでビジュアルエディタなんかなくてもOKなので)エディタをシンプルなものにできないかを調べたところ、どうやら「PS Disable Auto Formatting」なるプラグインを導入すれば解決すると判明。

 ということでさっそく入れてみたところ、HTMLエディタでの使えねー整形は見事に無効化されました?(^o^)/。これで段落頭の全角アキも入れられます! ただ、ビジュアルエディタとHTMLを切り替えると段落頭の全角アキがカットされる問題はまだあったりするわけですが、とりあえず問題点は解決。あと、ビジュアルモードで保存してもやっぱりカットされちゃう。ビジュアルエディタは使うな、ってことですね;-)

 あとは、夜間帯に重い問題が解決すれば万事OKなんだけど、こればっかりはなかなか難しそう。

WordPressのアップデートメモ

2009年11月9日 23:31

 Wordpressの新バージョン(2.8.5)が出ていたので、アップデートしてみた。管理画面から「自動アップデート」なるものが実行できるらしいんだけど、謎のログイン(笑)が要求されたので、tarballからのアップデートを試みてみました。

 といっても、スクリプトを書いてほぼ一発。

#!/bin/bash
old=$1
new=$2

if [ "$2" == "" ]
then
    echo "$0 <old> <new>"
    exit
fi

cp -a $old ${old}.org
rsync -av $new/ $old/

 第1引数に旧バージョンのWordpressのディレクトリ、第2引数にダウンロードしてきたWordpressのアーカイブを展開したディレクトリを与えて実行。やってることは旧バージョンのディレクトリをバックアップしたうえで、新バージョンのファイルをそこに上書きするだけ。

 とりあえずこいつで問題無し。あ、一応念のため、実行前にはデータベース等のバックアップはしておきましょう。ちなみにうちの環境はsqliteを使っているので、ディレクトリの全コピーでバックアップ完了というお手軽作業。

WordPress導入

2009年10月22日 02:31

 ブログシステムをpyblosxom+自前のバックエンドから、WordPressに変更してみた。WordPressはデフォルトではMySQLをデータベースとして使うけど、今回はプラグインを入れてsqliteを使う構成でセットアップ。

 sqliteを入れたのは、ファイルのコピーだけでなにも考えずにバックアップができるというのと、パフォーマンス的に有利なんじゃないかなー、という理由。テキストデータしか入れる気はないので、データベースサイズはせいぜい数MBだし、ファイルキャッシュが効けば結構速くなるんじゃないの? とか考えてるんだけど、実際どうなってるかはちゃんと測ってないので不明。

 ちなみに、WordPressをsqliteを使うプラグインはこれ(PDO (SQLite) For WordPress)。基本的には付属ドキュメント通りにセットアップすればOK(WordPressのwp-contentディレクトリ以下に配布ファイルをコピー→wp-config.phpファイルに「define(‘DB_TYPE’, ‘sqlite’);」を追加)。Web上の情報では、ソースをいじったりする必要があるという話が書いてあるものもあったけど、自分が試したバージョン(WordPress 2.8.4+PDO For WordPress 2.6.1)では設定ファイル以外のソースの変更は不要だった。

 ただ、suexecを使っていない環境ではもちろんデータベースディレクトリおよびデータベースファイルを作成できるようにパーミッションを変更しておく必要がある。データベースファイルはwp-contentディレクトリ以下に「database」というディレクトリが作成され、その中に作成されるので、一時的にwp-content内にWebサーバーを動かしているユーザー権限でディレクトリを作成できるように設定しておく必要あり。

pyblosxomの記事のインポート

 でもって、過去のpyblosxomの記事のインポートなんだけど、直接はインポートできないので、過去の記事からインポート用のファイルを作成する必要がある。WordPressの「Importing Content」ページでは変換用スクリプトを用意してインポートする方法を紹介するページが紹介されているんだが、このスクリプトは日本語環境だと微妙な気がしたので、これを参考にPythonで書き直してみた。

 ただしこの変換スクリプト、カテゴリと記事コンテンツ、投稿日はインポートできるのだがタグとエントリのURL情報は無視してくれるのが困りどころ。おかげで過去記事のリンクが切れる……。カテゴリについては、.htaccessに次の1行を追加すれば解決なのだが、リンク切れはさぁどうしようかねぇ。

RewriteEngine On
RewriteBase /
RewriteRule ^(apple|bluegriffon|develop|fsm|handbrake|s|slashdot|twitter) category/$1 [R=301,L]

# BEGIN WordPress
 :
 :