2005/04/01 金
HTML から weblog を復旧する方法
まったく需要なさそうですが、自分のためにメモしておきます。
■ 目的
- DB のデータが飛んでしまい HTML ファイルだけ残った weblog からデータを復活させる
- 新しく生成される HTML の permalink (飛び飛びのエントリー ID に依存) は以前のままにしたい
- エントリーの日付はもちろん、コメントやトラックバックの日付も以前のままにしたい
■ 検討している手段
- HTML ファイルから Movable Type のエントリーデータを逆生成する html2mt.pl を作る
- HTML ファイル群を引数に渡すとエントリー、コメント、トラックバックの各データを吸い上げ、エントリー ID を維持したまま DB に格納するようにする
- DB は直接触らず Movable Type の Perl API を使う
- エントリー ID はファイル名から、その他は HTML 内から抽出する
- カテゴリーはある時期から方針を変えたので、この機会に振り直す
- convert_break で付いた p タグや br タグは消す (めんどくさい場合はあきらめ)
- mt-link-number や自動リンクで付いたタグは削除する
- mt-replace-empty でついた「ななし」は空白にする
- email と url を両方書いてくれている人は email が残ってないので、泣く泣く復活をあきらめる
- いい機会なので Template::Extract とか使おうかなーと思いつつも、正規表現で十分だろと作業速度を優先(笑)
■ 確認事項
- 飛び飛びの ID でエントリーデータを作れるか → MT::Entry->id() で ID 指定すれば OK
- 任意の日付のコメントデータが作れるか → MT::Comment->created_on() で指定すれば OK
- 任意の日付のトラックバックデータが作れるか → MT::TBPing->created_on() で指定すれば OK
- 飛び飛びの ID が振られているところに新規エントリーを投稿するとどうなるか →
ID の最大値+1 が振られる→ 勘違いっぽい。ID 指定なしで new した Entry に 1 から連番が振られるため、ID 指定で new した Entry と ID がかぶる現象が発生中(泣) 対策検討中。→ MySQL だと大丈夫? - エントリー ID から トラックバック ID を引くには? → MT::Trackback->load({ entry_id => 'エントリー ID' })->id
■ 注意事項
- エントリー保存時に何も指定しないとコメント受け付けなどの設定が反映されないので(デフォルト値)、MT::Entry の convert_breaks, allow_comments, allow_pings などは指定する
- MT::Entry->status は設定必須 (最初から全部公開でいいので MT::Entry::RELEASE() を指定)
- MT3 系ではコメント保存時に何も指定しないと承認待ちになるので、MT::Comment->visible(1) で承認済みにする
ここまでまとめておけばあとはそのままプログラム書くだけでしょう、きっと。日曜日にチャレンジ予定です。無事復旧できるかなぁ・・・。
■ 追記
Berkeley DB 利用時には上記のような新規エントリーIDの不具合がありますが、とりあえず公開しておきます。MySQL とかだと、ID 抽出を変えればちゃんと動くかもしれません。パース部分が当サイトのテンプレートに依存しているため、使うには改造が必要です。
Berkeley DB の場合、ids.db で ID を管理しているそうなので(平田さん、情報 thanx です!)、上記を走らせたあと直接いじればちゃんと動くかもしれません(僕はまだチャレンジしていません)。
きちんとやるなら、最初に必要な分 Entry を new してあげて、あとで ID 指定で load し、内容を書き換えて save し直し、という形になると思います。
ID の引継ぎにこだわらないのであれば、ID の設定部分を連番にしてあげて、entry_id 指定をやめれば問題ないと思います。
Excerpt: 読者の皆さん、お久しぶりです。 ビューティー インフォ 管理人 beautyotti(美容情報)です。 今回は新着記事のお知らせです。まとまった新...
Weblog: ビューティー インフォ
Tracked: 2007年8月17日 10:04
Excerpt: 記事の削除で使われなくなったエントリーIDを復活させて記事を投稿する。...
Weblog: nlog(n)
Tracked: 2007年11月19日 21:58
Excerpt: Adderall without prescription. Adderall side effects. Adderall without a pres...
Weblog: Average adult dose of adderall xr.
Tracked: 2007年11月21日 13:50
Excerpt: Amoxicillin. Amoxicillin effects on a fetus. Amoxicillin no prior prescriptio...
Weblog: Amoxicillin.
Tracked: 2007年11月22日 14:45
Excerpt: Lexapro forum. Lexapro when does it work. Lexapro. When do you feel better wi...
Weblog: Lexapro.
Tracked: 2007年12月12日 01:04
Excerpt: Adderall without prescription. Adderall tweaked. Adderall. Snort adderall xr.
Weblog: Adderall.
Tracked: 2007年12月27日 18:46
はじめまして。
昨夜、サーバーエラーになり、その上ログインできなくなりました。ログインはなんとか出来るようになってもサーバーエラーが直らず、仕方なく再インストールしたもののエントリーが戻せないのでどうしたものかと検索しておりました。
出来上がっていたら大変嬉しいと他力本願でございます。
>>1 mueru さん
上にも書いてありますが、復旧したプログラムには不備があって、新規投稿時のIDがおかしくなってしまう現象に見舞われています。
その辺を含めて近日中に公開しようと思っていますので、もうしばらくお待ち下さい・・・。
ちなみに再インストール時はDBなどをバックアップしなかったのでしょうか。
DBのデータさえ取ってあれば元通り戻せると思うのですが。
oobaさん、はじめまして。
先日、間違ってサーバー上からMTのプログラムと、データ保存用ディレクトリを消失してしまい途方に暮れていたところ、この記事を見つけました。
残されたhtmlから復旧する事ができるのでしょうか?
再びMTをインストールし直し、これからコピペでシコシコとすべての記事を再現しようと思っていました。
プログラムの公開を楽しみにしております!
>>3 しげる さん
あらら、まったく同じ状況ですね(^^;
がんばって復旧させましょう!
ID生成に不具合がありますが、とりあえず僕が使ったものを公開しておきますので、追記をご参照下さい。
これを使えば、HTML上に必要な情報が残っていればココのように復活できると思いますが、自分のテンプレートに合わせて改造が必要になります。
oobaさん、はじめてコメント入れさせていただきます。
実はお伺いしたいことがあります。
当方も同じような現象に困っております。それでoobaさんのこのサイトにを参考に復旧しようとしているのですが、2005/05/10 のコメントの追記を探しても見つけることができず、どこにあるか教えていただけないでしょうか?
当方もhtmlは残っているのですが、どうやってここから復旧すればよいか困り果てている状況です。
藁をも掴む思いですので、何卒宜しくお願いいたします
ちなみに現在、MovableType3.31jaを使用しています。
>>5 tomite さん
追記がわかりづらかったようですが、エントリー内にスクリプトへのリンクがあります。
.txtですが、perlのスクリプトです。
http://www.bricklife.com/library/html2mt.txt
これをmtディレクトリ以下に保存して実行すればよいのですが、
1.html構成に合わせて正規表現などを変更する必要がある
2.サーバにシェルログインする必要がある(CGI化すればOK)
という条件がありますので、少しスキルがないと難しいかもです。
もしわからない点があったら、URLなどをメール頂ければお手伝いはできるかもです。
無事復旧できることをお祈りしています。
oobaさん、早速のご回答、心より感謝いたします。
私自身にはスキルはないので、わかる友人と共に、oobaさんの情報を元に復旧作業にチャレンジしてみます。
わからないことが出ましたらば、またご質問させていただきたいと思います。
本当に、有難う御座いました。
はじめまして。Krinと申します。
質問なのですが、シェルログインした後には
どんなコマンドを打つ必要があるのでしょうか。
もしよろしければ教えていただけないでしょうか。
宜しくお願いいたします。
>>8 Krin さん
上記はPerlのスクリプトなので
$ perl html2mt.txt
などとやってperlで実行してください。
ただ、データを抜き出す部分が当サイト専用の記述になっているため、
そのままだとほぼ100%うまく動きません。
必ず復旧したいサイトのHTMLにあわせて変更してください。
# Perlの知識はおありでしょうか?
レスありがとうございます。
Perlの知識は正直なところ皆無なので少し不安です。
シェルログインすることはできます。
>>10 Krin さん
皆無だとちょっと厳しいと思います。(^^;
もしURLや状況などの具体的な情報を頂けたら
お手伝いできるかも知れませんが、いかがでしょうか。
(メールでもかまいません)
初めまして。
MTのドメインの設定をいじっていたら、初期化されてしまったようで、
HTMLは残っているけどMT管理画面からなくなって
トップページがまっさらになってしまって、
どうしようかと途方に暮れていました。
同じ状況から復旧されたというこの記事を見つけて
大変喜んでいます!
ただ、全くPerlの知識がなく、時間がかかりそうです…。
でも100件以上のエントリーをひとつひとつ手作業で
復旧するのは途方も無い作業なので、ちょっと頑張ってみます。
しかし知識が足りないって怖いですね・・・。
でもこうやっておぼえていくものでもありますが(^^;








