Momolog 데이터를 Momento로 옮기기
Momento는 일종의 일기장 프로그램이다. 이미 Momolog와 어썸노트를 가지고 있기 때문에 사실상 이 프로그램에 대한 필요를 느끼지 못했었는데 (둘 다 매우 훌륭한 프로그램이고 업데이트도 꾸준히 되고 있을 뿐만 아니라 모두 한국인 개발자의 작품이다), 이번에 2.0으로 업그레이드가 되면서 여기저기서 이야기가 되길래 좀 자세히 살펴봤다. 놀라운 것은, 이 프로그램이 트위터, 유튜브, 플리커, 페이스북 등 다양한 종류의 SNS들을 한군데 모아준다는 점이었다. 어느 방식으로 글을 쓰던 상관없이 나의 모든 온라인 기록들을 한 군데에서 관리할 수 있다는 것이다. 이 점은 Momolog나 어썸노트가 가지고 있지 못한 특징인데, 이 때문에 이 프로그램으로 옮겨갈 생각을 하게 되었다. 문제는, 이미 momolog에 많은 글을 올려두었는데, 이걸 어떻게 Momento로 옮기느냐 하는 것이다. Momento의 지원 페이지에도 바로 이 질문이 올라와 있는데, 제작자의 답변은 ‘현재 지원하지 않으며, 앞으로 지원할 수 있을지의 여부도 알 수 없다’는 것이었다. Momento가 백업/리스토어 기능을 지원한다는 점에 착안하여 일단 백업을 한 후, 백업 파일을 손 보는 방법이 가장 직관적인 방법이라고 생각되었다. 문제는 백업 파일의 형식을 알아낼 수 없다는 것. 이래서는 성공할 수가 없다. 깔끔하게 포기. 이런 경우에 보통 사용자라면 그냥 포기를 하거나 기존의 프로그램에 그대로 매여있을 수 밖에 없을 것이다. 그러나, 나는 이미 프로그래밍을 할 줄 아는 프로그래머가 아니던가. 누군가 만들어주지 않는다면 내 손으로 만드는 수 밖에! 일단 momolog의 모든 메모는 csv 파일 형태로 내보내기가 가능하다. 그러므로, 일단 모든 메모들을 text 형태의 파일로 다운로드를 받는다. 문제는 이 파일이 UTF16을 사용한 도스 형식의 파일인데다가, 파일 이름은 csv이지만 실제 column separator로는 tab을 사용했다는 것이다. 게다가 메모의 특성상 한 개의 메모가 여러 줄로 이루어질 수 있기 때문에 개념적으로 csv 파일이라고 볼 수는 없다. 우선 dos2unix를 이용해 CRLF를 LF로 바꾸어준 후, 인코딩을 UTF8으로 변환하였다. 이렇게 소스 파일이 준비되고 나면 이제는 간단한 ruby 파일을 사용하면 될 일.
require 'rss/maker'
data = File.read("data.txt")
chunks = data.split(/(d{4}-d{2}-d{2}s{1}d{2}:d{2}:.+00:00)/)
chunks.delete_at(0)
content = RSS::Maker.make("2.0") do |m|
m.channel.title = "Momolog"
m.channel.link = "http://lordmiss.com"
m.channel.description = "Momolog backup"
m.items.do_sort = true
(0..310).each do |n|
i = m.items.new_item
i.title = "momolog"
i.link = ""
i.description = chunks[2*n+1].split("t").delete_if{|x| x==""}[0]
i.date = Time.parse(chunks[2*n])
end
end
File.open("momo.xml", "w") do |f|
f.write(content)
end
Ruby의 rss/maker를 이용해서 저장한 momolog 백업 파일의 내용을 모두 rss로 전환하여 아무 웹 서버에나 올려놓으면 된다. 이 소스를 Momento에서 feed로 읽은 후에 disconnect해 주면 끝. 이 과정을 통해 배운 것은, 1) ruby의 Time 클래스 사용법 2) ruby에서 정규식으로 split할 때, 정규식 매칭 부분을 array에 유지하기 등이다. 주의) 혹시라도 이 소스를 사용하고자 하시는 분들은, 소스를 그대로 사용했을 때 생기는 문제에 대해 책임질 수 없습니다. 코드의 의미를 이해하시는 분만 사용하시기 바랍니다!