Momolog 데이터를 Momento로 옮기기

20120228-165648.jpg

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에 유지하기 등이다.

주의) 혹시라도 이 소스를 사용하고자 하시는 분들은, 소스를 그대로 사용했을 때 생기는 문제에 대해 책임질 수 없습니다. 코드의 의미를 이해하시는 분만 사용하시기 바랍니다!

피드버너를 중지합니다.

피드버너를 쓰면서 동기화의 문제를 포함한 여러 가지 문제를 겪어왔습니다. 특히 서버들이 모두 해외에서 호스팅을 받고 있는 터라 속도 면에서도 만족스럽지 못했었습니다. 게다가 이 블로그는 정기적으로 구독하시는 분들이 별로 없기 때문에 rss 배포에서 생기는 트래픽 문제에서도 자유롭습니다.

이제부터 이 블로그의 rss 주소는 http://lordmiss.com/journal/feed 로 고정합니다. 혹시 rss 구독을 원하시는 분들은 이 주소를 그대로 사용해 주십시오. 피드버너의 피드는 당분간은 그대로 유지합니다만, 예고없이 삭제될 수 있습니다.