dokuwiki

DokuWikiメモ

html2wikiを利用するとHTMLファイルを各種Wiki記法フォーマットのテキストに変換できます。

Debianでhtml2wiki利用する場合は、libhtml-wikiconverter-perlパッケージの他にWiki記法ごとに分かれたパッケージもインストールする必要があります。

sudo apt-get install libhtml-wikiconverter-perl libhtml-wikiconverter-dokuwiki-perl

wgetで取得したHTMLの文字コードをUTF-8に変換し、DokuWiki記法のテキストにコンバートするには以下のようにします。

lv -Ou8 index.html | html2wiki --dialect DokuWiki --base-uri http://www.example.com/ --wiki-uri http://www.example.com/wiki/ --encoding utf-8 > index.txt

変換後のテキストはDokuWikiのdata/pages/ディレクトリにコピーすればDokuWikiページとして利用できます。

HikiからDokuWikiに移行の際、Hiki記法テキストからDokuwiki記法テキストに変換するより、HTMLページとして全ページをダウンロードしてスクリプトで成形する方が手っ取り早かったので、その作業の記録です。

Wgetを使って全ページを取得しましたが、ところによっては-wオプションを使ってウェイトをかけたほうがいいかもしれません。 mod_evasiveで過剰なアクセスを禁止していたことをすっかり忘れていてハマってしまったので。

wget -m -w3 -X /diary http://www.nofuture.tv/

HTMLからDokuWiki記法テキストへの変換は「静的なHTMLページをDokuWikiページに変換 」に書いた、html2wikiを使いました。

スクリプトはややこしいことをしているように見えますが、Hikiのページを取得したときファイル名が「index.rb?Hoge」のようになっていたので、ファイル名のクエスチョンマーク以降を切り出してファイル名にして、html2wikiで出力しているだけです。

#!/bin/bash
for i in ./index.rb*; do \
  echo "${i}"; \
  f=$(echo "${i}" | cut -f2- -d'?' | tr "[A-Z]" "[a-z]"); \
  html2wiki --dialect DokuWiki --encoding euc-jp \
  --base-uri http://www.nofuture.tv/ \
  --wiki-uri http://www.nofuture.tv/ \
  "${i}" | lv -Ou8 > "tmp/${f}.txt"; \
done

変換は終りましたが元のHTMLにはコンテンツ以外にサイドバーなどもあり、それも一緒に変換されています。sedを使ってDokuWikiに不要な部分を除去します。

# 行頭4行削除
1,4d
# Last Modified以降行末まで削除
/^\ Last/,$d
# 空のリンク「[[nofuture:dokuwiki| ]]」を削除
s/\[\[|\ \]\]//g
# index.rb?を削除
s/index.rb?//g
for i in ./*txt; do sed -f cleanup.sed "$i"; done

クリーンナップが終了したページは、DokuWikiのdata/pages/ディレクトリにコピーして移行は終了です。

設定のあるconfディレクトリとページデータのあるdataディレクトリは、公開ディレクトリに置きたくなかったので分けて置きました。

分けるとき、dataディレクトリは設定で変更できますが、confディレクトリについてはinc/init.phpを変更しないと読めないので変更します。

inc/init.php
// define config path (packagers may want to change this to /etc/dokuwiki/)
// if(!defined('DOKU_CONF')) define('DOKU_CONF',DOKU_INC.'conf/');
if(!defined('DOKU_CONF')) define('DOKU_CONF','/etc/dokuwiki/conf/'); // 'conf/'を'/etc/dokuwiki/conf/'に変更

apacheのmod_rewriteでアドレスを書き換えるとき、DokuWiki付属の .htaccess.dist にリライトルールが書いてあるのでそのまま使えます。 ですがDocumentRoot直下にDokuwikiを設置するときには、付属のリライトルールの行頭に「/(スラッシュ)」を置く必要があります。

RewriteRule ^_media/(.*)              /lib/exe/fetch.php?media=$1  [QSA,L]
RewriteRule ^_detail/(.*)             /lib/exe/detail.php?media=$1  [QSA,L]
RewriteRule ^_export/([^/]+)/(.*)     /doku.php?do=export_$1&id=$2  [QSA,L]
RewriteRule ^$                        /doku.php  [L]
RewriteCond %{REQUEST_FILENAME}       !-f
RewriteCond %{REQUEST_FILENAME}       !-d
RewriteRule (.*)                      /doku.php?id=$1  [QSA,L]
RewriteRule ^index.php$               /doku.php

定義型リストをフロートさせたくないのと、h1とh2にアンダーラインを引きたかったので、 mnml-blog/user/screen.css にCSSを追加。

h1 {
        border-bottom: solid 1px black;
}
 
h2 {
        font-weight: bold;
        border-bottom: dashed 1px #e0e0e0;
}
 
h3 {
        font-weight: bold;
}
 
dt, dt span.term {
        float: none;
}
 
dd {
        background-image: none;
}

Tips

定型化したページを作成するには _template.txt もしくは __template.txt という名前のテキストを用意する。 前者はそのテキストがある名前空間のみのテンプレート、後者はシステムワイドで利用するテンプレート。

詳しくは ja:namespace_templates [DokuWiki] を参照。

アップロードできるファイル種別を変更するには、 conf/mime.conf を編集する。

  • dokuwiki.txt
  • 最終更新: 2012/03/11 15:19
  • by nogajun