EvernoteAPIを利用したEvernoteのノート検索
evernote_oauthパッケージを用いたEvernoteAPIの初歩的な利用について紹介します。
EvernoteAPIではNoteStoreを取得し、
そのNoteStoreに実装されているメソッドを利用することで
対象とするEverenoteアカウントの情報(ノートブック、ノート、ノート本文など)
を取得することができます。
さらに、検索フィルターを設定することで
条件に合致する情報に絞って取得することも可能です。
なお、EvernoteAPIの仕様はこちらのWebページにまとめられています。
下記のサンプルコードは
1:対象とするノートブック名を入力し、
2:そのノートブック内のノートの一覧から任意のノート名(またはその一部)を入力し、
3:そのノートの本文を取得する
というものです。
なお、トークン取得はこちらのblogを参考にさせていただきました。
# -*- coding: utf-8 -*- require "evernote_oauth" #NoteStore取得 クライアントはsandboxアカウントを利用 token = "ここはトークンIDを記述する" client = EvernoteOAuth::Client.new(:token => token, :sandbox => true) note_store = client.note_store #ノートブック取得 notebooks = note_store.listNotebooks(token) puts "ノートブック一覧" notebooks.each { |notebook| puts " * #{notebook.name}"} notebooksguid = 0 begin print "利用するノートブックの名前を入力してください:" notebook_name = gets.chomp # GUIDをとりたいノートブックの名前 note_store.listNotebooks.select do |notebook| if notebook.name == notebook_name then notebooksguid = notebook.guid end end rescue Exception => e puts e.message print notebook_name + "を含むノートは見つかりませんでした\n" retry end # 検索条件として、検索語なし、指定したノートブック、更新日順ソートを指定 filter = Evernote::EDAM::NoteStore::NoteFilter.new filter.notebookGuid = notebooksguid filter.order = Evernote::EDAM::Type::NoteSortOrder::UPDATED # 検索結果として、タイトル名のみを指定 resultSpec = Evernote::EDAM::NoteStore::NotesMetadataResultSpec.new # noteList にノート 10 件のタイトルを取得 noteMetaList = note_store.findNotesMetadata(token,filter,0,10,resultSpec) #各ノートのタイトルを表示 noteMetaList.notes.each { | note | noteEdam = note_store.getNote(token, note.guid, 1,0,0,0) puts noteEdam.title } #対象ノートブックの中から任意の検索語によるノートを検索 print "ノートブック:" + notebook_name + "\n" print "ノート検索(end=>fin):" spec = Evernote::EDAM::NoteStore::NotesMetadataResultSpec.new filter.words = "" while (1) #見つからなかった時の例外処理 begin if (filter.words = gets.chomp) == "end" then break end guid = note_store.findNotesMetadata(token, filter, 0, 1,spec).notes[0].guid noteEdam = note_store.getNote(token, guid, 1,0,0,0) content = noteEdam.content bodyHead = "<en-note>" bodyEnd = "</en-note>" body = content[ content.index(bodyHead)+bodyHead.length .. content.index(bodyEnd)-1 ] rescue Exception => e print filter.words + "を含むノートは見つかりませんでした\n" print "ノート検索(end=>fin):" retry end brTag = '<br clear="none"/>' body.gsub!(brTag,"\n") body.gsub!("<div>","") body.gsub!("</div>","") body.gsub!(""",'"') body.gsub!("<","<") body.gsub!(">",">") print "タイトル:" + noteEdam.title + "\n" puts body print "\nノート検索(end=>fin):" end