前回 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 (1732 ダウンロード ) 。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!]取り扱い説明書」より引用)


コメント