前回 pc.casey.jp » geeklog から WordPress へ記事移動3(.htaccess編) を書いた。
Movable Typeへのエクスポートが出来ればWordPressへのインポートに当てることができる。残念ながらMovable Typeを使ったことはないのだけれど、人気があるらしいし、データフォーマットもわかったことだし、nicky.cgiからのデータエクスポートもやらなければなと思っていたところだし、最近はphpでCUI/GUIのexeを作って遊んでいる。となれば・・・ということである。
スポンサードリンク
概要
- コマンドラインから実行する単体exeです。
- 本プログラムはオープンソース(OSS)でライセンスはGPLです。自由に勝手に使ってください。そのかわり補償などはありません。
- ソースを公開しますのでWindows以外でも簡単に移植できるでしょう。
- 上記にもありますがMovable Typeは使ったことがありません。が、geeklogからWordPressへの記事移動の手段としてMovable Type形式のデータを目撃し、nicky.cgiからのエクスポートが自分に必要だったのでサラっと作っただけです。
- プログラムはmain.phpとnicky_conv.phpの2つのソースからなっています。
- 以下にそれを公開します。通常はexe版はこちらです→ nicky_conv_cui (1116 ダウンロード ) 。WordPress版は別のページに置いておきます。
- WordPress版では画像のインポートもサポートします。
main.php
<?php /* ---------------------------------------------------- * nicky.cgi data convert script for Movable Type * ( php for win32 command user interface ) * ---------------------------------------------------- * Usage: * nicky_conv_cui.exe "c:\nicky\2009" "http://new.yourdomain.jp/wp/blogname/files/" * * History: * - 2010.09.03 Ver.0.01a first * * Script=Shift-JIS, Import=EUC, Output=UTF-8 * Copyright 2010 CASEY, GPL */ require_once("nicky_conv.php"); $n = new nicky_conv(); $filetype = "nky"; $outputFileName = "data.txt"; // get data path -------------------------------------- if(empty($argv[1])){ print 'Ex. nicky_conv_cui.exe "path" ["image_url_path"]'; exit(0); } $baseDir = $argv[1] . '\\'; print "Target:" .$baseDir . PHP_EOL; // get replace url ------------------------------------ if(!empty($argv[2])){ print "imgPath:" .$argv[2] . PHP_EOL; $n->setImagePath($argv[2]); }else{ print "imgPath: Nothing" . PHP_EOL; } // get script path ------------------------------------ $thisPath = getcwd(); print "pgPath:" . $thisPath . PHP_EOL; $outputFileName = $thisPath . '\\' . $outputFileName; if(file_exists($outputFileName)){ unlink($outputFileName); } // start conv ----------------------------------------- $fp = fopen($outputFileName, "a"); $dir = opendir($baseDir); while($file = readdir($dir)) { if(is_file($baseDir.$file)) { if (preg_match("/\.$filetype/i", $file)) { $n->reset(); $n->readData($baseDir.$file); $data = $n->makeData(); print $data; $data = mb_convert_encoding($data, "UTF-8", "SJIS"); fwrite($fp, $data); } } } closedir($dir); fclose($fp); // end proc ------------------------------------------ print 'End'; exit(0); ?>
nicky_conv.php
<?php /* ---------------------------------------------------- * nicky.cgi data convert script for Movable Type * ( php for win32 command user interface ) * ---------------------------------------------------- * History: * - 2010.09.03 Ver.0.01a first * * Script=Shift-JIS, Import=EUC, Output=UTF-8 * Copyright 2010 CASEY, GPL */ class nicky_conv{ // init function nicky_conv(){ $this->reset(); } // init for next data function reset(){ // init, set default $this->Author = 'admin'; $this->Title = 'no title'; $this->Category = 'nicky'; $this->PrimaryCategory = 'nicky'; $this->Status = 'publish'; $this->AllowComments = 0; $this->AllowPings = 1; $this->ConvertBreaks = 0; $this->Body = null; $this->SeparateBig = '--------'; $this->SeparateSmall = '-----'; $this->Date = '01/01/1970 00:00:00'; $this->Output = array(); } // set image path function setImagePath($url){ $this->ImagePath = $url; } // read data (*.nky, EUC) function readData($file){ $output = null; // read $data = @file_get_contents($file); $arr = split("\x01", $data); // convert $a = array(); foreach($arr as $k => $v){ $a[$k] = mb_convert_encoding($v, "SJIS", "EUC"); } $this->Title = $a[1] ? $a[1] : $this->Title; $this->Body = $a[2] ? $a[2] : $this->Body; // image? if($a[3]){ $tag = sprintf('<img title="%s" src="%s" /><br /><br />', $a[3], $this->ImagePath . $a[3]); $this->Body = $tag . $this->Body; } // arr[0] = date or date time // 11/17/2009 03:02:26 mb_ereg('(\d+)[^\d.+](\d+)[^\d.+](\d+)', $arr[0], $dt_arr); $dt = sprintf("%s/%s/%s", $dt_arr[2], $dt_arr[3], $dt_arr[1]); if(mb_ereg('(\d+):(\d+)', $a[0], $dt_arr)){ $dt .= sprintf(" %s:%s:%s", $dt_arr[1], $dt_arr[2], '00'); }else{ $dt . '00:00:00'; } $this->Date = $dt; return true; } // make output data (utf-8) function makeData(){ $data = "AUTHOR: " . $this->Author; $data .= PHP_EOL . "TITLE: " . $this->Title; $data .= PHP_EOL . "DATE: " . $this->Date; $data .= PHP_EOL . "PRIMARY CATEGORY: " . $this->PrimaryCategory; $data .= PHP_EOL . "CATEGORY ID: " . $this->Category; $data .= PHP_EOL . "STATUS: " . $this->Status; $data .= PHP_EOL . "ALLOW COMMENTS: " . $this->AllowComments; $data .= PHP_EOL . "ALLOW PINGS: " . $this->AllowPings; $data .= PHP_EOL . "CONVERT BREAKS: " . $this->ConvertBreaks; $data .= PHP_EOL . $this->SeparateSmall; $data .= PHP_EOL . "BODY: "; $data .= PHP_EOL . $this->Body; $data .= PHP_EOL . $this->SeparateSmall; $data .= PHP_EOL . $this->SeparateBig . PHP_EOL; return $data; } } ?>
※汚いコードですいません。その場しのぎなので、と言い訳しておきます・・・。
2011.10.18追記
nicky.cgi 開発元(公式サイト)からエクスポートに関して本記事へリンクされているようです。
nicky!の記事をエクスポートしたい。
nicky!製作者は試しておりませんが、pc.casey.jp様よりMovable Type / WordPressへ記事を移動させる記事が提供されております。
(「日記CGI[nicky!]取り扱い説明書」より引用)
コメント