僕は発展途上技術者

WordPress のブログを Lokka に移行(第3部) - Redirect プラグインを作りました

» Lokkathon #11 : ATND


に参加してきました。WordPress で書かれているこのブログを Lokka に移行するプロジェクトの3回目。


これまでやったことは、


» WordPress のブログを Lokka に移行しようとしています(まだ途中) : 僕は発展途上技術者


» WordPress のブログを Lokka に移行(第2部) : 僕は発展途上技術者


に書いています。


今回やりたかったことは WordPress スタイルの URL を Lokka スタイルの URL にリダイレクトすること。たとえばこのブログだと、今月のエントリーが見られる


http://blog.champierre.com/archives/date/2011/09/


という URL は Lokka 移行後は


http://blog.champierre.com/2011/09/


というスタイルの URL にリダイレクトしたい。


正規表現でリダイレクトのルールを作成すれば、その通りリダイレクトされるプラグインを作成することにしました。


lokka-redirect プラグイン


今回も @komagata さんにいろいろ聞いて、相当助けてもらいました。


当たり前ですが、Lokka を開発している本人に聞けばほとんどのことは解決、Lokkathon に参加することでかなり捗りました。


» champierre/lokka-redirect - GitHub


からインストールできます。


redirect プラグインの管理画面で以下のようにルールを設定すれば、WordPress スタイルの URL を Lokka スタイルの URL にリダイレクトしてくれます。


僕は発展途上技術者 - Lokka

次回 Lokkathon


次回 Lokkathon は 10/5(水曜日)。


» Lokkathon #12 : ATND


準備はひと通り整った感じなので、いよいよこのブログを Lokka に移行する日が来ました。


次のエントリーはもしかしたら、Lokka からかもしれません。楽しみです。

WordPress のブログを Lokka に移行(第2部)

» Lokkathon #9 : ATND


に参加して、WordPress で書かれているこのブログを Lokka に移行するプロジェクトの続きをやりました。


前回やった内容は、


» WordPress のブログを Lokka に移行しようとしています(まだ途中) : 僕は発展途上技術者


で書いています。


前回までで残されたタスクは


1. http://blog.champierre.com/archives/928 といった同じ URL のままで個別の記事にアクセスできるよう Lokka 側で URL を Rewrite する仕組みを用意する

2. 画像などのメディアファイルも移行する

3. WordPress では改行2つがpタグに自動的に変換されていたのが、Lokka では変換されないため、段落がまったくなくなってしまうのを何とかする


の3つ。このうち、2 と 3 を片付けました。


画像などのメディアファイルを移行


これはとても簡単。


Wordpress で使っていた画像は wp-content/uploads 以下にあったので、これをゴソッと Lokka の public 以下に移して難なく完了。


TextMate

WordPress の p タグ問題


WordPress では本文中に改行2つがあると p タグに、改行1つを br タグにそれぞれ自動的に変換して表示してくれます。


しかし、これに頼って書かれたエントリーのデータ自体に p タグや br タグが差し込まれるわけではないため、エクスポートしたデータを Lokka にインポートすると、WordPress では段落分けされて表示されていたデータは、ズラッと一行になって表示されてしまいます。


これを何とかしないといかん、ということで最初、rails の simple_format のソースを参考にして、改行2つを p タグに、改行1つを br タグに一気に変換したあとインポートしてみました。


一見うまくいきそうなのですが、これだと例えば pre の中の改行2つや改行1つまで変換されてしまいます。そんな感じで例外を考えていくときりがなくて途方に暮れてしまいました。


一緒に調べてくれた @komagata さんが WordPress のソースを見てくれて、じゃあ WordPress が行っている処理を Lokka に移植すればいいんじゃないかと、なったのですが、実際にみてみると、preg_replace (置換)の嵐でとても移植する気になれません。


p タグや br タグへの自動変換は wpautop という関数でおこなわれていることを @komagata さんが突き止めてくれて、そのソースを見ていたのですが、そこでひらめきました。WordPress のエクスポートの処理に wpautop をはさめば p タグへの変換をしたあとの結果が xml ファイルに吐き出されるんではないかと。


そこで、前回のように wp-admin/includes/export.php を開き、以下の 369 行目の部分を変更、$post->post_content を wpautop で処理した上で xml に吐き出すようにしたところ、うまくいきました。



前回、こんな感じで段落がなかったところが



この通りバッチリです。


lokka.dev

残るは、


1. http://blog.champierre.com/archives/928 といった同じ URL のままで個別の記事にアクセスできるよう Lokka 側で URL を Rewrite する仕組みを用意する


の Rewrite 問題、次回の Lokkathon で取り組みます。


» Lokkathon #10 : ATND

WordPress のブログを Lokka に移行しようとしています(まだ途中)

» Lokkathon #8 : ATND


に参加して、WordPress で書かれているこのブログを Lokka に移行するプロジェクトに取り組みました。


タイトル通り、まだ途中の段階での記録ですが、結構いいところまで行ってます。もうあと数歩といった段階。


Lokka に WordPress のデータをインポートするには、WordPress のエクスポート機能を使って吐き出す WordPress eXtended RSS と呼ばれる xml ファイルが必要です。


ところがこのブログが使っている WordPress ME2.0.5 は結構古いバージョンであるため、エクスポート機能がついていません。


そこで、まずは最新の WordPress 3.2.1 の環境を用意し、そこにこのブログのデータを流し込むという作業から始めました。


WordPress 3.2.1 を Mac で動かす


WordPress 3.2.1 の環境は、ローカルの Mac に用意することにしました。


最初の難関は PHP が動く環境を用意すること。


» Pow: Zero-configuration Rack server for Mac OS X


を使っているため、ローカルへのアクセスはすべて Pow に横取りされてしまい、Apache にアクセスがいかない。


そこで、IPv4 と IPv6 を使い分ける方法で Pow と Apache を共存させます。詳しくは以下の記事を御覧ください。


» Pow and Apache Side-by-Side - Jerod Santo


httpd.conf の



LoadModule php5_module libexec/apache2/libphp5.so

のコメントアウトを外し、http-vhosts.conf に以下を追加。



<VirtualHost *:80>
ServerName blog
DocumentRoot "[home dir]/php/blog"
ErrorLog [home dir]php/blog/log/error.log
CustomLog [home dir]/php/blog/log/access.log common
<Directory "[home dir]/php/blog">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

WordPress eXtended RSS を作成


サーバー側にログインし、ブログのデータを保存している mysql の DB をダンプ、ローカルの DB にリストアします。


WordPress のホームページより WordPress 3.2.1 をダウンロードし、ファイルを http-vhosts.conf で追加した DocumentRoot に置きます。


本当は、テーマファイルなどもコピーしないと完全な移行にはならないのですが、データをエクスポートさえできればいいので、データの移行だけで十分です。


wp-config-sample.php を wp-config.php にコピーし、データベースの情報を書き換えます。


ひとつはまったのは、MySQL のホスト名。


localhost に指定したらうまく接続できず、127.0.0.1 に変えたところ動くようになりました。



/** MySQL hostname */
define('DB_HOST', '127.0.0.1');

http://[wordpress に割り当てた ServerName]/wp-login.php で初めてログインすると、データベースのアップグレードを WordPress 側がよろしくやってくれます。


しばし待つと無事管理画面が開けました。


テーマファイルなどがないため、ブログの表示はまともにはできないですが、管理画面の Tools > Export さえ使えれば OK。


ただし、WordPress のエクスポート機能には


» #15203 (Export function does not properly escape ]]> (CDATA)) – WordPress Trac


でも報告されている をエスケープしてくれないというバグがあり、ソースコードを貼り付けていることが多い僕のブログも影響を受けてしまっていました。


Lokka へのインポートのときに を含むエントリーでインポートが止まってしまい、以降のエントリーがインポートされなくなっていました。


そこで、wordpress の wp-admin/includes/export.php を開き、126 行目の部分を追加。



エクスポートを実行し wordpress.2011-08-31.xml というファイルが吐き出されて一安心。


Export ‹ 僕は発展途上技術者 — WordPress

Lokka にインポート


ようやく Lokka 登場です。


インポート機能は最新バージョンの Lokka に実装されているので、まだ Lokka をインストールしていなければ、



git clone git://github.com/komagata/lokka.git

でインストールしましょう。すでにインストール済みの場合は git pull です。


Lokka の管理画面に入り、左メニューの一番下の方にインポートがあります。


僕は発展途上技術者 - Lokka

WordPress でエクスポートした xml ファイルを選んで、「WordPressからのインポート」を押すとインポートが始まります。


WordPress でドラフト状態の投稿を残したままインポートをおこなうと途中でエラーとなる問題がありましたが、


» Comparing 0fb46d0...718137e for komagata's lokka - GitHub


でコミットを push しておきました。


僕のブログの場合は、以上でインポート無事完了。


以下の感じで一応は Lokka にインポートされました。


lokka.dev

残されたタスク


残されたタスクは以下の通り。



  1. http://blog.champierre.com/archives/928 といった同じ URL のままで個別の記事にアクセスできるよう Lokka 側で URL を Rewrite する仕組みを用意する

  2. 画像などのメディアファイルも移行する

  3. WordPress では改行2つがpタグに自動的に変換されていたのが、Lokka では変換されないため、段落がまったくなくなってしまうのを何とかする


これらを次回の


» Lokkathon #9 : ATND


以降で解決していきます。


WordPress を Lokka に移行したいという方、一緒に参加しましょう。

プロフィール

アーカイブ ↑トップに戻る

最近のエントリー ↑トップに戻る