なーお'nWEB
Theme
Auto
Light
Dark
|
新規
一覧
検索
最新
ヘルプ
ページへ戻る
複製
履歴
印刷
Movable Type形式の d3blogインポート-ver0.5
のソース
xpwiki
:
inc
/
import_mt2d3blog
のソース
差分
を表示
inc/import_mt2d3blog
へ行く。
« Prev
* Movable Type形式の d3blogインポート-ver0.5 [#c0ca336c] Movable Type 形式のブログデータを、d3blogにインポートしようと考えました。 私の場合は、niftyの「ココログ」でエクスポートしたMT形式データのインポートになります。 &font(Red){いきなり本番環境で実行せず、必ずテスト環境で試してから実行してください};。 ** 1、参考:[[ MovableTypeのデータをWordPressに移行したい。>http://www.kowa.org/modules/pukiwiki/306.html]](のぶのぶXOOPS) [#q7bae4ba] xoopsモジュールでこの手のインポートが出来るブログモジュールとしてはwordpressMEがありまして、上記参考サイトからphpソースをダウンロードしてテストサイトでインポートまで行ってみたところ、これは見事にできました。 また、既にインポート済みのデータは上書きしないようになっているなど、運用中のwordpressMEへの追加インポートを考慮しているのが、ユーザーに優しいところですね。 なお、今回のphpソースは上記参考サイトのソースを元に、d3blogのソースを参考に手を入れて書いたものです。インポート済み記事やコメント、ト ラックバックなどは同様にスキップするようにしています。 ただ、コードの中身は使用メソッドがSQL文だったり、xoops_objectだったり一環 性がありませんがご容赦を。 ** 2、d3blogインポートの制約 [#hbbf3038] 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:」 と追加する安直な方法にしました。 + d3blogで記事カテゴリを複数選択できない制約 ちょっと困ったことに、d3blogでは記事カテゴリを複数選択できません。 つまり、Movable Type形式の記事ではいくつか列挙されているカテゴリの一つしか保持できないことになります。 今回は、これまた安直に、成り行きで一つだけを生かす方式にしました。 多分、MT形式データの各記事の一番最後に書かれているカテゴリが有効になると思いますが、もしかしたらそうならないかも知れません。 ** 3、インポートの準備 [#v451ce5a] *** (1)xoops_trust_path/modules/d3blog/main/import-mt.php [#y3555236] |&ref(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」で&font(#ff0000){trust側の};d3blog/mainフォルダに保存します。(本ファイルはEUC-JPで保存されていますが、運用サイトの文字コードに合せて変換保存して下さい。) なお、セキュリティの関係上、ファイル名は変更することをお勧めします。 (2010/05/02変更) 元のブログやMT形式データによっては、改行がHTMLの場合やただの改行の場合など、様々なようです。 この場合、元のMT形式ファイルから設定を読み込みますが、万一うまくいかない場合は、スクリプト475行目付近に設定がありますので、必要に応じて編集します。 自動改行を有効にする場合はこの「dobr」オプションを「1」にします。 #code(php,472-){{ $entry->setVar('cid', 1); $entry->setVar('dohtml', 1); $entry->setVar('dobr', 1); $entry->setVar('doxcode', 1); $entry->setVar('doimage', 1); $entry->setVar('groups', '|0|'); }} にしてやってみてください。 なお、HTMLを無効にする場合は、上記 'dohtml' を「0」に変更します。 *** (2)xoops_trust_path/modules/d3blog/xxxx.txt [#bc1adae7] MT形式のテキストデータを、d3blog フォルダに置きます。 テキストデータ内の記事の投稿者名と、インポートするxoopsのユーザー名が合致する場合のみ、インポートされます。 もし、 ユーザー名が変わる場合は、テキストデータの投稿者名部分(AUTHOR: ○○)を予めすべて置き換えておく必要があります。 &font(Red){既知の不具合として、ファイル最初の1件目のデータを読み取れません。 お手数ですが、テキストファイルの1件目のデータをコピーし、2件目に挿入したテキストファイルを作ってください};。 記事選択の際には、2件目のほうを選択してください。 *** (3)テンプレート _custom_mt2_d3blog.html [#e2c481e9] Altsysの「テンプレート管理」-「カスタムテンプレート」で、以下のコードを「_custom_mt2_d3blog.html」として作成します。 #code(html,1-){{ <h2>mt形式ログ > d3blogインポート</h2> <h3>STEP:<{$mt2d3b_step}></h3> あなたのuid=<{$mt2d3b_uid}> <{if $mt2d3b_isadmin}>実行権限:OK <form name="MainForm" action="./index.php?page=<{$mt2d3b_actionname}>" method="post"> <{if $mt2d3b_step==0}> <{if $mt2d3b_mtfile != ""}> <p>こんにちは! あなたの Movable Type 記事を d3blogへインポートします。 <br> (カテゴリは、1つしか読み込まれません。) インポート作業は、少々時間がかかる場合があります。</p> <p>また、インポートする記事毎に、ユーザー名が一致するかチェックを行い、該当ユーザー名がDBに無い時はインポートを行いませんので、ご注意を。 一旦取り込んだ記事やコメント・トラックバックと重複データの場合は、インポートをスキップして次の記事のインポートを継続します。</p> <p>一度にインポートする記事件数: <select name="d3b_once"> <option value="20" <{if $mt2d3b_once ==20}>selected=true<{/if}>>20件</option> <option value="50" <{if $mt2d3b_once ==50}>selected=true<{/if}>>50件</option> <option value="100" <{if $mt2d3b_once ==100}>selected=true<{/if}>>100件</option> <option value="200" <{if $mt2d3b_once ==200}>selected=true<{/if}>>200件</option> <option value="500" <{if $mt2d3b_once ==500}>selected=true<{/if}>>500件</option> </select></p> <{if ( $mt2d3b_use_d3comment ) }> <font color=red>コメントのインポート先に、d3forumコメント統合が選択されています。</font><br /> d3forumのdirectoy名称 = <{$mt2d3b_d3com_agent}><br /> d3forumの名称 (forumid) = <{$mt2d3b_d3com_forum_title}> (<{$mt2d3b_d3com_forumid}>)<br /> 間違えなければ、「実行」。 変更したい場合はd3blogの一般設定と、このスクリプトファイルの設定を変更して下さい。<br /> <{/if}> <{else}> <p><font color="red">MT形式ファイルのパスが正しく設定されていません。</font></p> (<code><{$mt2d3b_actionname}></code>) を開いて、どのファイルから読み込むか1行編集してください。</p> <p><code>define('MTEXPORT', '');</code></p> <p>これを、下のように(但し実際のファイルのフルパスに)編集します。</p> <p><code>define('MTEXPORT', '/full/path/to/your/import.txt');</code></p> <p>この作業は、セキュリティの観点から手動で行う必要があります。</p> <{/if}> <{elseif $mt2d3b_step==1}> 全<{$posts_total}>件から、<{$mt2d3b_once}>件づつインポートします。<br /> 以下の中から選択した記事・コメント・トラックバックをインポートします。<br /> <table class="outer"> <tbody border="1"><tr><th align="center">選択<br /><input type='checkbox' title='この縦一列のチェックボックスすべてをON/OFFします' onclick="with(document.MainForm){for(i=0;i<length;i++){if(elements[i].type=='checkbox'&&elements[i].name.indexOf('mt2d3b_thread')>=0){elements[i].checked=this.checked;}}}" />全選択/解除</th> <th align="center">No</th><th align="center">タイトル</th><th align="center">投稿日時</th></tr> <{foreach key=num item=thread from=$mt2d3b_threads}> <tr class="<{cycle values='odd,even'}>"><td align="center"><input type="checkbox" name="mt2d3b_thread[<{$num}>]" value="<{$thread.thread_id}>" /></td><td align="right"><{$thread.thread_id}></td><td><{$thread.title}></td><td align="center"><{$thread.post_time|date_format:"%Y年%m月%d日 %H時%M分"}></td></tr> <{/foreach}> </table> よろしければ「送信」してください。<br /> <input type=hidden name="forum_title" value=<{$mt2d3b_forum_title}> /> <input type=hidden name="forum_id" value=<{$mt2d3b_forum_id}> /> <input type=hidden name="wf_topic_id" value=<{$mt2d3b_wf_topic_id}> /> <input type=hidden name="wf_fileid" value=<{$mt2d3b_file_id}> /> <input type=hidden name="d3b_once" value=<{$mt2d3b_once}> /><br /> <{elseif $mt2d3b_step==2}> <{foreach key=num item=echo_log from=$mt2d3b_echo_log}> <{$echo_log}><br /> <{/foreach}> インポートが完了しました。<br /> 最初のページに戻るには下のボタンで送信してください。<br /> <input type=hidden name="d3b_once" value=<{$mt2d3b_once}> /><br /> <{/if}> <input type=hidden name="page" value="<{$mt2d3b_actionname}>" /> <input type=hidden name="step" value="<{$mt2d3b_step_next}>" /> <input type=hidden name="d3b_start" value=<{$mt2d3b_start}> /><br /> <input type=submit value="送信" /> </form> <br /> <{else}> 実行権限:NG 権限がありません。 <{/if}> }} ** 4、インポートの実行 [#y38a8c01] + 管理者でログインする + STEP0:xoops_root_path/modules/(d3blog)/index.php?page=import-mtにアクセスする。 (d3blog)の部分はインストールフォルダ名に変更します。 -- 「一度にインポートする記事件数」を選択します。 大量の記事を一度にインポートすると、メモリ不足になったりサーバーに負荷をかけてしまいます。通常は50~100件程度に抑えて実行してゆくことをお勧めします。 -- コメントにd3forumコメント統合が選択されている場合は、フォーラム名称とforum_idを確認します。 -- 「送信」ボタンを押します。 |&ref(step0.gif,mw:240,mh:240);| + STEP1:取り込む記事にチェックを入れて「送信」ボタンを押す。 -- 全記事一度に取り込む場合は、全選択/解除チェックを活用してください。 記事数にもよりますが、かなりの時間がかかる場合があります。 |&ref(step1.gif,mw:240,mh:240);| + STEP2:結果を確認する。 -- インポートした記事群のbid値、タイトルが表示されます。 -- 「送信」を押すと、STEP0に戻り、選択した記事数の次回分のインポートに進みます。 -- 別ウインドウを開くなどして、インポート状態を確認します。 d3blogの各記事のカテゴリーは1つしか選べないため、後で記事毎にカテゴリを選択しなおす必要があります。 |&ref(step2.gif,mw:240,mh:240);| + ファイルを削除する ** 5、開発環境 [#o0aba4ab] 以下の環境で確認しました。 他の環境では動作しない場合もあるかもしれません、ご容赦下さい。 - 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(ウエブリブログ) ** 6、改変履歴 [#n780257d] - 10年5月 2日 ver0.5 カスタムテンプレート方式に変更し記事単位で取り込み指定が可能に。 また、html側ファイル不要とした。 - 09年5月 4日 スクリプトの配布を、zip形式に変更。 - 09年4月13日 ver0.4 コメントのd3forum統合コメントへの直接インポートに対応。 - 08年7月13日 ver0.3 文字コード指定部分が間違っていたので、修正した。 - 08年7月 5日 ver0.2 インポートファイルの文字コード指定部分を冒頭に変更した。 - 08年6月29日 ver0.1 公開 ** 7、ライセンス [#d590ffde] ライセンス:GPL ** 8、バグレポート [#b237326b] バグを発見した方は、コメントでお知らせください。 また、自分でも目をそむけたくなるくらいの汚いソースです。 セキュリティーホールなど、発見された方もどうぞお知らせいただくか、改善案をご教示いただければ幸いです。
« Prev
inc/import_mt2d3blog のバックアップソース(No. All)
現: 2026-08-13 (木) 08:56:06
なーお
ぺージ情報
ぺージ名 :
inc/import_mt2d3blog
ページ別名 :
未設定
ページ作成 :
なーお
閲覧可
グループ :
すべての訪問者
ユーザー :
すべての訪問者
編集可
グループ :
なし
ユーザー :
なし
Counter: 55, today: 1, yesterday: 0