2010年05月25日

RubyでEvernoteを検索する  その2

Evernoteから簡単にノートを取り出すスクリプトをバージョンアップした。
動作環境の準備については、前のエントリを参照していただくとして。

使い方は、以下のとおり。
キーワードを1つ引数で指定し、そのキーワードにマッチするノートのリストを得る。 そして、最初にヒットしたノートの本文を表示する。
キーワードと工夫し、よく参照するノート固有のキーワードをタグなどでつけておけば、webやクライアントを起動することなくノートの内容を簡単に参照できる。

$ ruby note.rb KEYWORD

以下のオプションを追加した。

-gノートの識別子GUIDを直接してしてノートを取り出す。GUIDは、キーワードサーチしたときのノートリストにタイトルと共に表示している。
-rノートを表示するときに、
タグを外したり、アンパサンドや不等号マークなどを変換して表示しているが、このオプションを付けると、そうした変換をせず、そのまま表示する。

-gオプションをつけて、GUIDを直接指定する場合は、以下のようになる。

$ ruby note.rb -g aaaaa-bbbbb-cccccc-ddddd-eeeeeeeee

ソースコード

note.rb
#!/usr/bin/ruby
#
# Evernote Simple note searcher
# ver.1.4 2010-05-25 Yasuki
#
require 'rubygems'
require 'optparse'
require 'pp'
require "thrift"
require "Evernote/EDAM/user_store"
require "Evernote/EDAM/user_store_constants.rb"
require "Evernote/EDAM/note_store"
require "Evernote/EDAM/limits_constants.rb"

#
# 引数チェック
if (ARGV.size==0)
puts "Usase: note.rb <SearchWord>"
puts "Usase: note.rb -g <GUID>"
exit 1
end

#
# 初期値
guid=""
raw=0
username="LOGINNAME"
password="LOGINPASSWORD"
consumerKey = "CONSUMERKEY"
consumerSecret = "CONSUMERSECRETKEY"
userStoreUrl = "https://sandbox.evernote.com/edam/user"
noteStoreUrlBase = "http://sandbox.evernote.com/edam/note/"
#userStoreUrl = "https://www.evernote.com/edam/user"
#noteStoreUrlBase = "http://www.evernote.com/edam/note/"

userStoreTransport = Thrift::HTTPClientTransport.new(userStoreUrl)
userStoreProtocol = Thrift::BinaryProtocol.new(userStoreTransport)
userStore = Evernote::EDAM::UserStore::UserStore::Client.new(userStoreProtocol)

#
# 認証
authResult = userStore.authenticate(username, password,
consumerKey, consumerSecret)
user = authResult.user
authToken = authResult.authenticationToken
puts "Authentication was successful for #{user.username}"

#
# ノート取得準備
noteStoreUrl = noteStoreUrlBase + user.shardId
noteStoreTransport = Thrift::HTTPClientTransport.new(noteStoreUrl)
noteStoreProtocol = Thrift::BinaryProtocol.new(noteStoreTransport)
noteStore = Evernote::EDAM::NoteStore::NoteStore::Client.new(noteStoreProtocol)

#
# オプション解析
opt=OptionParser.new
opt.banner="This program is easy evernote searcher."
opt.version="1.4"

opt.on("-g GUID","--guid", "note id.") { |v|
guid = v.to_s
}
opt.on("-r","--raw", "Don't replace specific charactors") { |v|
raw = 1
}
opt.on_tail("-h", "--help", "Show this message.") { |v|
puts opt
exit 1
}
opt.on_tail("-v", "--version", "Show version.") { |v|
puts opt.version
exit 1
}
searchword=opt.parse!(ARGV).to_s

# ノートの検索
if searchword.size >= 1 then
search = Evernote::EDAM::NoteStore::NoteFilter.new
search.words = searchword
res = noteStore.findNotes(authToken, search, 0, 100)
# 検索リストの表示
puts "------------------------"
puts "Find note: " + searchword
puts "------------------------"
res.notes.each do |note|
printf("%s %s\n", note.title, note.guid)
end
guid=res.notes[0].guid
end

# ノート本文の取得
noteEdam=noteStore.getNote(authToken, guid, 1,0,0,0)

#
# ノートの表示
puts "------------------------"
puts noteEdam.title
puts "------------------------"
c=noteEdam.content
bodyHead="<en-note>"
bodyEnd="</en-note>"
body=c[ c.index(bodyHead)+bodyHead.length .. c.index(bodyEnd)-1 ]
if raw==0 then
brTag='<br clear="none"/>'
body.gsub!(brTag,"\n")
body.gsub!("<div>","")
body.gsub!("</div>","")
body.gsub!("&quot;",'"')
body.gsub!("&lt;","<")
body.gsub!("&gt;",">")
end
puts body


sylphide_ffr31mr at 21:48コメント(0)トラックバック(0)programing  

トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
プロフィール

やすき

月別アーカイブ
  • ライブドアブログ