2010年10月9日土曜日

Evernoteで研究日誌

うちの学科では卒論と一緒に研究記録(何日に何時間なにをしたかのリスト)を提出しないといけないというめんどうな決まりがある。そこで各研究室とも研究日誌をつけておいて、それを見つつ書くことにしてるんだが、、、正直めんどい。。。

なにがめんどいって日誌を見つつリストを作るのがめんどい。日誌つけてるんだから自動で生成してくれてもいいと思う。だが我が研究室の研究日誌(ブログ形式)の場合書き出しはできないは内部向けなおかげでRSSも見れないはでめんどくさい。

そこで考えた、
Evernoteで書いて本家の日誌にはコピペすればいいんじゃね?
EvernoteはXMLで書き出せるからRubyかなんかで「いつ、どんな作業をしたか」くらい抽出できるんじゃね?

というわけでやってみた


Rubyを使ってEvernoteのバックアップファイル(.enex)を読み込み、連想配列に格納するスクリプト。
#Evernoteのバックアップファイル(.enex)をHashに格納するスクリプト
require 'kconv'
require "rexml/document"
doc = nil
File.open("mynote.enex") {|fp|
doc = REXML::Document.new fp
}
book = Array.new
doc.elements.each("en-export/note") { |note|
page = Hash.new
#タイトル
title = note.elements["title"].text
page['title'] = title
#タグ
tags = Array.new
note.elements.each("tag") { |tag| tags << tag.text}
page['tags'] = tags
#筆者
author_temp = note.elements["note-attributes"].elements["author"]
author = author_temp.text if author_temp!=nil
page['author'] = author
#関連URL
sourceUrl = note.elements["note-attributes"].elements["source-url"]
url = sourceUrl.text if sourceUrl != nil
page['url'] = url
#作成日と更新日
created_unix = note.elements["created"].text
created = Time.at(created_unix.to_i)
updated_unix = note.elements["updated"].text
updated = Time.at(updated_unix.to_i)
page['create'] = created.to_s
page['update'] = updated.to_s
#内容をplain text形式で
content = note.elements["content"].text.toutf8
content.gsub!(/\n/,"");
content.gsub!(/<br\/>/,"\n");
content.gsub!(/<\/?[^>]*>/,"");
page['content'] = content
book << page
}
p book

ただXMLを読み込んで連想配列に格納してるだけなんだけどね。
あとはノートを書くときのタイトルで「文献調査[5時間]」とかしておけば、楽勝で作業記録を作成できるという訳ですよ。

まぁそれだけなんだけどね。

0 comments:

コメントを投稿