読者です 読者をやめる 読者になる 読者になる

ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

twieve経由でEvernoteに保存したTweetまとめから特定の語句の含まれたTweetを抽出

私は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