Movable Type形式の d3blogインポート-ver0.5
Movable Type 形式のブログデータを、d3blogにインポートしようと考えました。 私の場合は、niftyの「ココログ」でエクスポートしたMT形式データのインポートになります。
いきなり本番環境で実行せず、必ずテスト環境で試してから実行してください。
1、参考: MovableTypeのデータをWordPressに移行したい。(のぶのぶXOOPS)
xoopsモジュールでこの手のインポートが出来るブログモジュールとしてはwordpressMEがありまして、上記参考サイトからphpソースをダウンロードしてテストサイトでインポートまで行ってみたところ、これは見事にできました。
また、既にインポート済みのデータは上書きしないようになっているなど、運用中のwordpressMEへの追加インポートを考慮しているのが、ユーザーに優しいところですね。
なお、今回のphpソースは上記参考サイトのソースを元に、d3blogのソースを参考に手を入れて書いたものです。インポート済み記事やコメント、ト ラックバックなどは同様にスキップするようにしています。 ただ、コードの中身は使用メソッドがSQL文だったり、xoops_objectだったり一環 性がありませんがご容赦を。
2、d3blogインポートの制約
MT形式(ver3)データをd3blogに取り込む場合、以下の制約があります。
- MT形式(ver3)のコメントがタイトル無くスレッド構造でない制約 元々のMT形式テキストデータが、タイトルもスレッド構造を持ちません。 xoopsコメントにインポートする際には、最初のコメントのタイトルを (Re:投稿タイトル)として親コメントと扱い、以降のコメントをその親コメントへ繋げ、(Re^2)、(Re^3)・・ とすることとしています。
- xoopsコメントを使う制約 d3blogでは、標準コメントシステムの「xoopsコメント」を使っています。 それ自体はOKなのですが、このコメントシステムにはゲスト投稿者の 「名前」入力欄が無く、元を辿るとDBに「cname」などというフィールドさえ無い、という最大の問題を抱えています。
WordPressMEの場合は、モジュール側でコメント用のDBテーブルを持っていたため、問題ありませんでした。
この問題をクリアする方法として、以下の2つの方法が考えられます。- d3forumのコメント統合を使う
スクリプト中の以下の部分を編集し、d3blogのコメント統合設定を正しく行います。$use_d3forum_comment = false; // コメントをd3forumに直接取り込む場合、true
- xoopsコメントのままで、何とかする
要は、MTデータの投稿者名を何とか表示すればよいのです。 今回は、本文の冒頭に、「名前 wrote:」 と追加する安直な方法にしました。
- d3forumのコメント統合を使う
- d3blogで記事カテゴリを複数選択できない制約
ちょっと困ったことに、d3blogでは記事カテゴリを複数選択できません。 つまり、Movable Type形式の記事ではいくつか列挙されているカテゴリの一つしか保持できないことになります。
今回は、これまた安直に、成り行きで一つだけを生かす方式にしました。 多分、MT形式データの各記事の一番最後に書かれているカテゴリが有効になると思いますが、もしかしたらそうならないかも知れません。
(1)xoops_trust_path/modules/d3blog/main/import-mt.php
import_0.5.zip ver 0.5(EUC-JP) |
解凍したファイルの
- 3行目にMT形式ファイルのフルパスを加筆し、
- 4行目にMT形式ファイルの文字コードを(2008-7-13修正)。
- 5行目にxoopsのデータベースの文字コードを記載。
- Biglobeの場合は、7行目を$biglobemode = true;に変更。
ファイル名「import-mt.php」でtrust側のd3blog/mainフォルダに保存します。(本ファイルはEUC-JPで保存されていますが、運用サイトの文字コードに合せて変換保存して下さい。)
なお、セキュリティの関係上、ファイル名は変更することをお勧めします。
(2010/05/02変更)
元のブログやMT形式データによっては、改行がHTMLの場合やただの改行の場合など、様々なようです。
この場合、元のMT形式ファイルから設定を読み込みますが、万一うまくいかない場合は、スクリプト475行目付近に設定がありますので、必要に応じて編集します。
自動改行を有効にする場合はこの「dobr」オプションを「1」にします。
472 473 474 475 476 477 |
|
にしてやってみてください。
なお、HTMLを無効にする場合は、上記 'dohtml' を「0」に変更します。
(2)xoops_trust_path/modules/d3blog/xxxx.txt
MT形式のテキストデータを、d3blog フォルダに置きます。 テキストデータ内の記事の投稿者名と、インポートするxoopsのユーザー名が合致する場合のみ、インポートされます。 もし、 ユーザー名が変わる場合は、テキストデータの投稿者名部分(AUTHOR: ○○)を予めすべて置き換えておく必要があります。
既知の不具合として、ファイル最初の1件目のデータを読み取れません。 お手数ですが、テキストファイルの1件目のデータをコピーし、2件目に挿入したテキストファイルを作ってください。 記事選択の際には、2件目のほうを選択してください。
(3)テンプレート _custom_mt2_d3blog.html
Altsysの「テンプレート管理」-「カスタムテンプレート」で、以下のコードを「_custom_mt2_d3blog.html」として作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
|
4、インポートの実行
- 管理者でログインする
- STEP0:xoops_root_path/modules/(d3blog)/index.php?page=import-mtにアクセスする。
(d3blog)の部分はインストールフォルダ名に変更します。- 「一度にインポートする記事件数」を選択します。
大量の記事を一度にインポートすると、メモリ不足になったりサーバーに負荷をかけてしまいます。通常は50~100件程度に抑えて実行してゆくことをお勧めします。 - コメントにd3forumコメント統合が選択されている場合は、フォーラム名称とforum_idを確認します。
- 「送信」ボタンを押します。
- 「一度にインポートする記事件数」を選択します。
- STEP1:取り込む記事にチェックを入れて「送信」ボタンを押す。
- 全記事一度に取り込む場合は、全選択/解除チェックを活用してください。
記事数にもよりますが、かなりの時間がかかる場合があります。
- 全記事一度に取り込む場合は、全選択/解除チェックを活用してください。
- STEP2:結果を確認する。
- インポートした記事群のbid値、タイトルが表示されます。
- 「送信」を押すと、STEP0に戻り、選択した記事数の次回分のインポートに進みます。
- 別ウインドウを開くなどして、インポート状態を確認します。
d3blogの各記事のカテゴリーは1つしか選べないため、後で記事毎にカテゴリを選択しなおす必要があります。
- ファイルを削除する
5、開発環境
以下の環境で確認しました。 他の環境では動作しない場合もあるかもしれません、ご容赦下さい。
- CentOS-5.4 + Apache-2.2.3
- php 5.1.6
- mysql 5.0.77
- Xoops Cube Legacy 2.1.6 および HD1.0.3
- d3blog 1.03
- エクスポート元ブログ:ココログ、Biglobe(ウエブリブログ)
実体ページ:inc/import_mt2d3blog
インポートScript |
習作:MT形式のd3diaryインポート |
コメント一覧
投稿ツリー
-
Re: 習作:MT形式のd3blogインポート
(nonn50, 2009/4/25 10:12)
-
Re: 習作:MT形式のd3blogインポート
(なーお, 2009/4/25 21:15)
-
Re: 習作:MT形式のd3blogインポート
(nonn50, 2009/4/26 8:02)
-
Re: 習作:MT形式のd3blogインポート
(なーお, 2009/4/26 8:32)
-
Re: 習作:MT形式のd3blogインポート
(nonn50, 2009/4/26 10:10)
-
すばらしいです!
(aachan, 2009/4/29 15:24)
-
Re: すばらしいです!
(なーお, 2009/4/29 16:51)
-
Re: 習作:MT形式のd3blogインポート
(なーお, 2009/4/30 15:25)
-
Re: 習作:MT形式のd3blogインポート
(八郎, 2009/5/2 5:04)
-
Re: 習作:MT形式のd3blogインポート
(なーお, 2009/5/2 8:26)
トピック
-
Re: 習作:MT形式のd3blogインポート
(なーお, 2008/7/13 2:03)
-
Re: 習作:MT形式のd3blogインポート
(なーお, 2009/2/4 16:22)
-
バージョンアップ: 習作:MT形式のd3blogインポート
(, 2009/4/14 14:27)
-
すばらしいです!
(なーお, 2009/4/29 15:24)
-
Re: 習作:MT形式のd3blogインポート
(nonn50, 2009/4/21 19:54)
-
習作:MT形式のd3blogインポート
(SHIGE, 2009/5/17 1:57)
おはようございます。
FC2ブログ形式のデータ(400件以下)インポートしようとしましたが、http://hogehoge/modules/d3blog(hogehoge)/import.phpにて、以下のエラーが発生し、できません。
The file you specified does not seem to exist. Please check the path you've given.
対応策を御教授いただきたく、よろしく御願いします。
実施したこと
- (1)xoops_trust_path/modules/d3blog/import.php
ダウンロードして使用する ver 0.4(EUC-JP)
から、DLLしたファイルの↑のコードの5行目にMT形式ファイルのフルパスを、以下により加筆し、trust側のd3blogフォルダに保存しました。
1 2 3 4 5 6 |
|
- なお、当方のXOOPSの環境及びFC2ブログ形式のデータは、両方とも EUC-JP の文字コードのため、他については特にさわっていません。
- (2)xoops_trust_path/modules/d3blog/xxxx.txt
- FC2ブログのテキストデータを、trust側のd3blogフォルダに置きました。
- この際、FC2ブログのテキストデータの投稿者名部分(AUTHOR: ○○)を、xoops上の小生のユーザー名に置き換え澄みです。
- (3)xoops_root_path/modules/d3blog/import.php
- こちらで説明されているものを何もしない状態で、ファイル名「import.php」でhtml側のd3blogフォルダに保存しました。
以降は
1.管理者でログインする
2.http://hogehoge/modules/d3blog(hogehoge)/import.phpにアクセスする
3.「実行」ボタンを押して、処理を行うと、前記のエラーが出現します。
The file you specified does not seem to exist. Please check the path you've given.
この際、PHPディバッグエラーは何もありません。
nonn50さん
「ファイルのフルパス」ですので、URLではありません。
あくまで「ファイルのフルパス」を指定してください。
おはようございます。
おかげさまをもち、FC2ブログからインポートすることができました
カティゴリーを含め、完璧です。
ありがとうございました。
nonn50さん
インポート成功、おめでとうございます。
拝見させていただきました。 問題点が2点ほどありそうな。
- 改行が効いていない? ・・ 元のHTMLのエクスポートで改行を取り去る設定などになっていなかったでしょうか。 FC2使ってないのでわかりませんが。 d3blogインポート済み記事ごとに「改行を自動で挿入」設定を入れて解決するかな?
- コメントの取り込み ・・ d3forumコメント統合への直接取り込みを試していただきましたか? XOOPSコメントからd3forumへの取り込みを行うと、
過去のd3forum記事が(たぶん)統合設定された当該forum内の記事が全て飛びますので要注意、直接取り込みをお勧めします。 blog記事は消さずにスクリプト内のコメント統合設定部分を変更して、再度実行すればコメント部分だけ追加でd3forumに取り込まれるはずです。
1.改行が効いていない?
2.コメントの取り込み
いずれも、手作業で実行する所存です。
インポート作業が、こんなに簡単に実現するとは思っていなかったので
今までは引っ越しのたびに手作業で書き写していたのですが。。。
今回サイトの再構築にあたり、こちらを見つけてso-net blogからホダ塾版のHD内のd3blogにインポートを試してみました。
先に一応同じ名前のカテゴリー枠は作ってあったのですが、インポートしたらきちんとその各カテゴリーに割り振られたのでびっくりしました。
blogのエディタ設定がFCKeditorになっていると、改行されませんが、デフォルトに設定しなおすときちんと改行も含まれた形で表示されるので、
そのまま「編集」を開いて「改行を自動挿入する」にチェックいれてポンと送信するだけで、あれよあれよと言う間にきちんと表示されていきます。
以下は私の何か設定ミスかもしれませんが。
d3forumコメント統合への直接取り込みで、内容を書き換えてインポートしたところ、ブロックの最近のコメントにも表示されて、コメントカウントも入っているのに表示されませんでした。
リンクはあるのに、クリックしてもでてこない。。。どこに行ってしまったのだろうか??
と思って、d3forumの方の設定を覗いてみたら「XOOPSコメントのインポート」に数値が入っているのを発見!
インポートでそのままきれいにおさまりました(^^)
forumもblogもディレクトリ名をかえているので、そのへんで何か通らないところがあったのかもしれませんね。
とにかく順調に無事取り込みがさっくりとできて非常に感謝しております。サイトの方はまだまだ組み立て途中で見苦しいですが(^^;)
本当にすばらしいソースをありがとうございました。
aachanさん
お役に立てたようで、嬉しいです。
d3forumへの直接インポートは、8行目の
$use_d3forum_comment = false; // コメントをd3forumに直接取り込む場合、true
を = true; に編集する必要があるのですが、そうされましたか?
もししていないようでしたら、上記変更して、
$update_d3com_post = false ;
も = true; にした上で、新たなforumに対してもう一度インポートをすれば、ゲスト名もインポートされるはずです。
(もちろん、そのフォーラムに対してd3blog側のコメント統合設定を行ってから実行です。)
追伸:今きづきましたが、この返信用フォームでは、右下に「リッチエディタ」、左上に「FCKediter」のボタンがでるんですね。面白?い
これに関しては、以下に記事を書いていますので、よろしければどうぞ。
ご返信遅れまして申し訳ございません。
あれから色々と試してみたのですが、なかなか実行ボタンの表示までこぎつけません。
これだけ手間取って単なるファイルの配置場所ミスとかでしたらお恥ずかしい限りです…(^_^;)
なーおさま、ご回答ありがとうございます(^_^)
以下、試してみたことなどを少々書かせて頂きます。
1、「デバックモード、常時オン」です。import.phpアクセスで何も表示されません(^_^;)
2、「trust側import.phpのパスの記述を間違えている可能性」も考えたのですが、当該部位にURLを記述した上で実行してエラーになったとの書き込みがこのスレッドに報告されておりましたので、フルパスの記述ミスというのは”import.phpにアクセスで真っ白”には関係無いように思います。
3、「/d3blog/を/hoge/に変更している」ので、ソース内のd3blogという文字列の書き換えが必要なのかも…。と、import.phpのソースと散々にらめっこしたのですが、素人目にも変更が必要とは思えませんでした(-_-;)
4、「URL(/modules/)短縮ハック」。これも、当該ブログのURLには適用していないので関係ないように思うのですが…。mainfile.phpの短縮ハックの記述を完全コメントアウトした状態でアクセスを試したわけではないので、実際どうなるかはわかりません。
5、「c_templateも何度か全消し」してアクセスしてみましたが、関係ないようでした(-_-;)
6、「xoops_trust_path/../../hoge.txtは1200記事以上あるファイル」なのでmainfile.phpにアクセスした瞬間から当該ファイルを裏で読み込むような動作をするとしたら、もしかしたらメモリ不足に?これはもう空想ですw
7、「バージョン0.4でも変化なし」でした。
8、単なる誤読の可能性(;・∀・)
今のところ、上記4を実際に試してダメなようでしたらPHPのバージョンの問題と思い、諦めるしか無いように思っています。
それと、悪戯心で(1)と(3)のimport.phpのファイル配置場所を逆にしてアクセスしてみたくて仕方ありません。なぜ、フォームの記述がある方がtrust側になって、フォームの記述がないほうがroot側の直接アクセス先になるんだろうという疑問が…。ただ、余計なことをして、もしも障害がでてしまったら自己解決できるレベルの物ではないので出来ませんが(^_^;)
試したら、また書き込ませて頂きますね。
八郎さん、こんにちは。
- どうも4、の「URL短縮ハック」は気になりますが、いずれにしても問題を切り分けたいので、現状のtrust側のスクリプトを、試しに以下のように単純化したメッセージのみに書き換えてみていただけますか。
これでこの文字が表示されれば、trust側のスクリプト内の問題を探せばよいことになります。
1 2 3
<?php echo("trust_path is OK"); ?>
- また、「URL短縮ハック」の中身を開示いただけませんでしょうか。
- 6、の件は、アクセスした段階ではファイルは読み込みませんので、これは違いますね。。
引用:なぜ、フォームの記述がある方がtrust側になって、フォームの記述がないほうがroot側の直接アクセス先になるんだろうという疑問が…。
という件については、trust側のスクリプトはroot側のスクリプトでrequireされているため、root側で実行されているのと同じ扱いになります。 (スクリプト内には潜在的な問題は潜んでいるかもしれません。)
- ひとつ可能性を見つけました。
trust側のスクリプトの、最初のこの行はroot側で読み込まれていますので、だぶってFATALエラーになっている可能性があります。 この行をコメントアウトしてみていただけますか。1
require '../../mainfile.php' ;