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インポート
(風鈴♪, 2008/7/13 2:03)
-
Re: Re: 習作:MT形式のd3blogインポート
(なーお, 2008/7/13 8:09)
-
Re: 習作:MT形式のd3blogインポート
(風鈴♪, 2008/7/13 9:45)
-
Re: 習作:MT形式のd3blogインポート
(なーお, 2008/7/13 9:56)
-
Re: 習作:MT形式のd3blogインポート
(風鈴♪, 2008/7/13 11:11)
-
Re: 習作:MT形式のd3blogインポート
(なーお, 2008/7/13 11:22)
-
Re: 習作:MT形式のd3blogインポート
(風鈴♪, 2008/7/13 12:03)
-
Re: 習作:MT形式のd3blogインポート
(なーお, 2008/7/13 12:56)
-
Re: 習作:MT形式のd3blogインポート
(風鈴♪, 2008/7/13 14:16)
-
Re: 習作:MT形式のd3blogインポート
(なーお, 2008/7/13 16:29)
トピック
-
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)
こんな時間まで悩んでいます。
mysqlが4.×だと使えないのでしょうか?
何度やっても0:記事執筆者名がDB未登録
となってしまいます。
一応d3blogでは二つ程記事をエントリーさせたのですが…困りました?
アドバイスをよろしくお願いいたします。
- こんな感じです
Importing post... 0:記事執筆者名がDB未登録:スキップsql=SELECT * from ××××_d3blog_entry WHERE title = '' AND created = DB ERROR: Failed to select from ××××_d3blog_entry
風鈴♪ さん、こんにちは。
拙作をご試用いただきましてありがとうございます。
こちらにはmysql4.xの環境が無いので確認できませんが、記事編集者名と同一名称のユーザーがxoopsに登録されていない、と出ていますので、そのへんをチェックしてみましょう。
このスクリプトでは、記事に合せてxoopsユーザーを生成するようなことはしていません。 既存ユーザーが存在した場合に、インポートされます。
- 記事と同一のユーザー名がxoopsサイトに存在するか。
- そのユーザー名が日本語名の場合は、文字コードの関係がありそうです。 試しに、記事のユーザー名を英数字だけのユーザー名に合せて一括変更し、同一ユーザー名をxoopsサイトのほうにも作ってみて、試してみて下さい。
こちらの環境では、日本語ユーザー名でもOKでしたけど、これはあくまでDB上の文字コードが日本語(EUC)で合致していたからですね。 DB文字コードがUTF-8の場合は、「6行目のMT形式ファイルの文字コードがEUC-JP以外なら変更して」 をUTF-8 に変更してみて下さい。
それでもだめな場合は、
$importdata = mb_convert_encoding($importdata, MTFILECODE, $mt_enc);
の最後の引数、 $mt_enc を、 → "EUC-JP とか、 "UTF-8" と生書きして変更してみてください。
いかがでしょうか。
早速のお返事有り難うございます!
日本語(風鈴でした!)名でしたので、一応それを半角英数字のハンドルにブログデータもxoopsの管理者も変更。
でも今度は違うエラーが出てしまいました?。
なんででしょう。
Importing post... 3:furinsql=SELECT * from ××××_d3blog_entry WHERE title = '' AND created = DB ERROR: Failed to select from ××××_d3blog_entryWarning [PHP]: mb_convert_encoding() [function.mb-convert-encoding]: Illegal character encoding specified in file /home/○○○/xoops_trust_path/modules/d3blog/import.php line 129
なお文字コードはxoops本体も含めて全てeuc-jpで統一してあります。
お忙しい所恐縮ですが、ヒントを戴けると嬉しいです!
風鈴♪さん
すみません、問題の129行目の文字コード変換の部分、私の勘違いが発覚しましたので、ver0.3をアップしましたから、そちらに変更して下さい。
その上で、MT形式ファイルの文字コードの認識でバグっているようですから、
1 2 |
|
↓ これを下のように変更
1 2 |
|
あるいは、全てEUC-JPということですから、
1 2 |
|
で試してみていただけますか。
お手数をおかけします。
以下、メモ。
http://phpspot.net/php/man/php/function.mb-convert-encoding.html
大変ご迷惑ばかりおかけしています。
申し訳ない気持ちでいっぱいです!
ver0.3を使用し、なーおさんのおっしゃる通りに
1行だけコメントアウト、
2行ともコメントアウト
コメントアウトなし
の3パターンで試してみました。
いずれも同じ表示が出ました。
- 以下、こんな感じです。
You must edit the MTEXPORT line as described on the previous page to continue.
- 以下、こんな感じです。
previous pageには
modules/d3blog/import.php
のリンクが貼られた状態になっています?
もしお時間ありましたら引き続き宜しくお願いいたします。
本当にすみませんです???(>.<)
風鈴♪さん
落ち着いて、落ち着いて。。
ver0.3をダウンロードしていただいたのですから、5行目を編集してご自身のMT形式データファイル名をフルパスで指定しなおさないといけません。
よろしくです。
でーーきーーたーーーー!!!!
感動ですっ。
有り難うございます。
いや?お恥ずかしい。
確かにフルパスの指定しないで呼び出してました(爆)
あ?嬉しいです?????
昨日からずーっと悩んでいたのですが、思い切ってご相談して良かったです。
これでD3BLOGの導入が決定です。
なーおさん、朝から本当に本当にお世話になりました。
私のエントリーは600くらいでしたが、昨日の夜(って言うか殆ど朝)には、コピペで手作業ってコースで頑張るかね…と諦めモードでした。
本当に嬉しい!
多少、カテゴリの整理など編集作業が残っていますが、ぐっとぐっと楽になりました。
心より御礼申し上げます。
本当に有り難うございましたm(_ _)m!!
風鈴♪さん
できましたか! 良かったです。
私もお役に立てて、とても嬉しいです。
今回の問題は、「mb_convert_encoding」が原因だと思いますが、 上記参考サイトでは、 PHP 4.0.6以上、または PHP 5 で動作可能とあります。
参考までに、風鈴♪さんのPHPの正確なバージョンをお知らせいただけますか? よろしくお願いします。
ご報告です。
私のサーバのphpのバージョンは
5.2.6
となっています。
幸せな気持ちでXOOPSサイトの構築作業をしています
ところで先程はコーフンしてて正確な事をお伝えしなかったのですが、私の方はカテゴリは全部ちゃんと追加されてました♪
風鈴♪ さん、お返事ありがとうございます。
php5ですか。。 「mb-convert-encoding」がなぜうまく行かなかったのか、よくわかりませんね。。なぜだろう??
まあ、インポートはうまく行ったから良しとしますか。