tDiaryのデータをtDiary+BlogKitに変換するPHPスクリプト

投稿日: 2011年06月11日 更新日: 2017年07月22日

昼休み中にでっちあげた。

<?php

// tDiaryのデータ(*.td2)をtDiary+BlogKitに変換します
// Wikiスタイルにしか対応してません。

// 入力ディレクトリと出力ディレクトリ。環境によって書き換えて使ってください。
// 出力ディレクトリは空のディレクトリ作っておいてください。
$input_dir = dirname(__FILE__) . 'data/'; 
$output_dir = dirname(__FILE__) . 'output/';

ini_set('pcre.backtrack_limit', '9999999');
ini_set('pcre_recursion_limit', '9999999');

function convert($file, $dir)
{
    $td2 = file_get_contents($file);

    $days = preg_split('/\n\n\./s', $td2);

    array_pop($days);

    $output = '';

    foreach($days as $day){
        list($head, $body) = preg_split('/\n\n/', $day, 2);

        preg_match_all('/^![^!].*$/m', $body, $titles);

        for($i = 0; $i < count($titles[0]); $i++){
            $titles[0][$i] = trim(substr($titles[0][$i], 1));
        }

        $title = implode(' / ', $titles[0]) . "\n";

        $head = preg_replace('/^title:.*\n/mi', 'Title: ' . $title, $head . "\n");

        if(count($titles[0]) === 1){
            $body = preg_replace('/^![^!].*$/m', '', $body);
        }

        $output .= $head . "\n" . $body . "\n\n.";
    }

    $yyyy = substr(basename($file), 0, 4);

    if(!file_exists($dir . '/' . $yyyy)){
        mkdir($dir . '/' . $yyyy);
        echo ($dir . '/' . $yyyy) . "\n";
    }

    file_put_contents($dir . '/' . $yyyy . '/' . substr(basename($file), 0, 6) . '.td2', $output); 
}

foreach(glob($input_dir . '/*') as $file){
    $file = realpath($file);

    if(!is_dir($file)){
        continue;
    }

    if(preg_match('/^[0-9]{4}$/', basename($file)) === 0){
        continue;
    }

    foreach(glob($file . '/*.td2') as $td2_file){
        convert($td2_file, $output_dir);
    }
}

名前:宮内 はじめ

Code for Nagoya名誉代表

E2D3名古屋支部長

プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。

プロフィール

お問い合わせ