私は5月の待つ頃からなんとなく1日のTweetをtwieve(ツイエバ)というサービスを経由してEvernoteに保存しています。
仕事ネタとかつぶやいたときに後で読み返して違う案件に組み込んだりするためという側面もあり。
で、このまとめなんですがEvernoteで見る分にはまあまあ見やすいのですが、これを他に転用するにはHTMLやXMLに書き出したあげる必要があります。
もしくはコピペ。
でも1ヶ月分のTweetをひたすらコピペして必要な部分だけ抽出するなんて作業、考えただけでやる気が起きません。
そこで私考えました。
「Rubyでどうにかすればいいんじゃね?」
別にRubyじゃなくてもgrepでテキスト整形できる言語ならなんでもいいと思いますけど、唯一友達になれそうなのがRubyくんしかいない私はRubyを選びました。
僕は友達が少な(ry
さてざっとフローの説明します。
一応画面収録もアップしているのでそちらも見てください。
1.XMLをエクスポート
まずEvernoteからノートをエクスポートします。
形式はXML形式で。
ノートの数はいくつでも大丈夫です。
2.書き出したXMLをRubyで整形
Rubyに先ほどの書き出したXMLを渡してあげます。
テキストに保存するのは手を抜いてシェルスクリプトから。
やるのはこれだけです。
Rubyの仕様は以下の通り。
・レノ、王子を含むtweetを抽出
・時間を抽出
・時間の前に投稿日を入れたい
・@を含むtweetは除外
・ブログの告知Tweetは除外
・EvernoteのTweetまとめは最新の投稿日が上に来るので、古い順にソートする
・URLにタグをつける
最初に書いたようにRubyでどうこうというよりgrepでテキストをちょこちょこ整形しています。
昨年までは書けなかったものが、なんとか書けるようになったのは嬉しいもんだね。
コードは以下の通り。
あと<>はエスケープしています。
#! ruby -Ku
#仕様
=begin
EvernoteからTweetまとめをxmlで書き出して、そこから特定のTweetを抽出するRuby
[要件]
・レノ、王子を含むtweetを抽出
・時間を抽出
・時間の前に投稿日を入れたい
・@を含むtweetは除外
・ブログの告知Tweetは除外
・EvernoteのTweetまとめは最新の投稿日が上に来るので、古い順にソートする
・URLにタグをつける
[メモ]
・tweet内容はtableの後
・時間はspan styleの後
・日付はtitleのあと
=end
#rubyのバージョン確認
if RUBY_VERSION <= "1.8.1" then
print 'Error! -> This Script Running Version over Ruby 1.8.2'
exit
end
tmp = ""
put_file = ""
tweetday = ""
tweettime = ""
flag = ""
file = File.open(ARGV[0])
file.each do |line| #ターミナルで指定されたファイルの内容を一行ずつ取得
line.chomp! #破壊的に改行を削除
if /<title>/ =~ line then #日付を取り出す
tweetday = line.gsub(/<[^>]+>/,"") #HTMLタグの削除
tweetday = tweetday.gsub(/(^.+?\))(.+$)/){$1}
elsif /^<table.+?>$/ =~ line then #tweetを取り出す
tweet = line.gsub(/<[^>]+>/,"")
if /^[^@][^こうちゃん犬猫まみれ][^@]+?+?$/ =~ tweet then
if /レノ|王子/ =~ tweet then
#URLにタグをつける
tweet.gsub!(/(.+?)(https?:\/\/[\(\)%#!\/0-90-9a-zA-Z_$@.&+-,'"*=;?:~-]+)/) {$1 + "<a href=\"#{$2}\" target=\"_blank\" title=\"#{$2}\">#{$2}<\/a>"}
tmp = ""
tmp = tmp + tweet + "\n"
flag = 1
end
end
elsif /^<span.+?>$/ =~ line then #時間を取り出す
if flag == 1 then
tweettime = line.gsub(/<[^>]+>/,"")
tweettime = tweettime.gsub(/([0-9][0-9]時[0-9][0-9]分)/){$1} #時間抽出
tweettime.gsub!(/\s+?$/,"") #行末のスペース削除
tmp = tmp + tweetday + " " + tweettime + "\n"
put_file = tmp + "\n" + put_file #tmpに入れたものを上に追加する
flag = 0
end
end
end
print put_file