언젠가는 마추피추를..

badsaarow.egloos.com

포토로그 방명록



위키로 일기장 통합 내 일상

고1때부터 컴퓨터로 쓴 일기.
무려 20년동안이나 일기를 써 왔군.

원래 쓰기 시작한 때는 중학생때부터 였는데, 고등학생되면서 이전 일기장을 불태워버렸다.  
너무 손발이 오그라드는 내용이라, 혹시나 다른 사람이 읽을까 부담스러웠었던 것 같다.

고1때 컴퓨터를 처음 갖게 되어, 그 때부터 컴퓨터로 일기를 썼었다.  
그러다 2004년부터 wiki 에 일기를 썼다.

- 1990년11월부터 2004년 10월까지의 일기

텍스트파일로 된 일기장을 wiki로 쓰는 일기장에 통합하기로 했다.
이전부터 통합해야겠다라고 생각만 하다가, 요즘 한가하여 통합 스크립트를 짜 이전하기로 했다.

이전 프로그램을 파이썬으로 짜볼까 하고 도서관에 파이써 책까지 빌렸는데, 파이썬 문법에서부터 막혀 그냥 쓰던 언어 C#으로 짰다.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace wikiDiary {
    class Program {
        static void Main(string[] args) {
            string folderName = args[0];
            if (!Directory.Exists(folderName)) {
                Console.WriteLine(folderName + " is not exist!");
                return;
            }

            string[] drFiles = Directory.GetFiles(folderName);
            foreach (string drFile in drFiles) {
                ParseMonthDairy(drFile);
            }
        }

        static void ParseMonthDairy(string drFile) {
            string contents = File.ReadAllText(drFile, Encoding.Default);
            MatchCollection days = Regex.Matches(contents, @"^\s+\d+월\s+\d+일\s.*", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            int idxStart = 0;
            int dayLength = 0;
            foreach (Match day in days) {
                idxStart = day.Index;
                Match match = day.NextMatch();
                if (match.Success) {
                    dayLength = match.Index - idxStart;
                } else {
                    dayLength = contents.Length - idxStart;
                }

                string dayContent = contents.Substring(idxStart, dayLength);
                //post to wiki
                PostToWiki(ConvertToTitle(drFile, day.ToString()), dayContent.Replace("\n", "\n\n"));
            }
        }

        //Data/199003.h15, 3월 14일 -> Diary/2010-05-03
        static string ConvertToTitle(string fileName, string title) {
            string result = null;

            Match match = Regex.Match(fileName, @"[\d]{6}");
            string matched = match.ToString();
            result = "Diary/" + matched.Substring(0, 4) + "-" + matched.Substring(4, 2) + "-" ;

            match = Regex.Match(title, @"월[\s]*([\d]+)일");
            int date = int.Parse(match.Groups[1].ToString());  // [0]은 match 전체
            result += date.ToString("00");
            return result;
        }

        static void PostToWiki(string title, string content) {
            //curl로 보낸다.
            string curlPath = @"c:\tools\curl-7.19.5\curl.exe";
            string wikiPage = "<noinclude>\n" +
                            "<include(/Header)>\n"+
                            "</noinclude>\n"+
                            "<div class=\"diary\">\n"+
                            "== [[" + title.Substring("Diary".Length) + "]] ==\n" +
                            content +
                            "</div>\n"+
                            "<noinclude>\n"+
                            "<include(/Footer)>\n"+
                            "----\n"+
                            "</noinclude>";

            File.WriteAllText("temp.txt", wikiPage, Encoding.Default);

            string parameter = "\"http://127.0.0.1/wiki/wiki.cgi\" --data-urlencode \"title=" +
                title + "\" " +
                //"--data-urlencode \"text=" + wikiPage + "\"" +
                "--data-urlencode \"text@temp.txt\" " +
                "-d \"oldtime=12345678\"   -d \"oldconflict=0\"  -d \"summary=*\"   " +
                "-e \"http://127.0.0.1/wiki/wiki.cgi?action=edit&id=" + title + "\" ";

            System.Diagnostics.Process.Start(curlPath, parameter);
            System.Threading.Thread.Sleep(10000); //wait 10s
        }
    }
}


개발로 밥 먹고 사는데도, 내가 필요한 것에는 대충하게 되는군.
다 옮기고 나니, 2300개였던 위키페이지수가 3900개로 되었군.   
페이지수가 많아지니 위키도 좀 버벅거리는군.

덧글

댓글 입력 영역



구글검색


통계 위젯 (화이트)

2425
253
850301