Evernoteから(特定のノートブックを指定して)検索する方法
evernoteのAPI keyは、http://www.evernote.com/about/developer/api/#key からリクエストするとすぐもらえる。その後、十分sandboxで動かせたらproductionへのリクエストをすればOK。
productionとの違いは、下記のuserStoreUriとnoteStoreUriBaseが異なるだけ。(どちらも頭にsandbox.がつく)
PythonのSDKを落とすと、EDAMTest.pyっていうファイルがついているので、それをちょいちょいカスタマイズしつつ、Thrift API Reference(http://www.evernote.com/about/developer/api/ref/) をみたりhelp() しながらごにょごにょ。よーやくここにたどり着いた。
あとはこのスピードがそれなりに速ければ、自分が作りたいアプリができるはず・・・
#-*- coding:utf-8 -*- import sys import hashlib import time import thrift.protocol.TBinaryProtocol as TBinaryProtocol import thrift.transport.THttpClient as THttpClient import evernote.edam.userstore.UserStore as UserStore import evernote.edam.userstore.constants as UserStoreConstants import evernote.edam.notestore.NoteStore as NoteStore import evernote.edam.type.ttypes as Types import evernote.edam.notestore.ttypes as NoteTypes # configuration consumerKey = "<consumer key>" consumerSecret = "<consumer secret>" userStoreUri = "https://evernote.com/edam/user" noteStoreUriBase = "http://evernote.com/edam/note/" username = "<username>" password ="<password>" class EvernoteSearch: user = '' authToken = '' noteStore = None """ 初期化。主にauthentication tokenの取得とnotestoreオブジェクトの初期化""" def __init__(self): userStoreHttpClient = THttpClient.THttpClient(userStoreUri) userStoreProtocol = TBinaryProtocol.TBinaryProtocol(userStoreHttpClient) userStore = UserStore.Client(userStoreProtocol) authResult = userStore.authenticate(username, password, consumerKey, consumerSecret) self.user = authResult.user self.authToken = authResult.authenticationToken noteStoreUri = noteStoreUriBase + self.user.shardId noteStoreHttpClient = THttpClient.THttpClient(noteStoreUri) noteStoreProtocol = TBinaryProtocol.TBinaryProtocol(noteStoreHttpClient) self.noteStore = NoteStore.Client(noteStoreProtocol) """ 検索対象のnotebookのGUIDを、filter用に取得。private関数の書き方忘れた!w""" def getNotebookGuid(self, name): notebooks = self.noteStore.listNotebooks(self.authToken) for notebook in notebooks: if notebook.name == name: return notebook.guid """ 指定された言葉でノートを検索、NoteList として取得。 """ def getNoteList(self, words, name="0001. share",count=100): filter = NoteStore.NoteFilter() #filter.words = "tag:#{filter_tag}" filter.words = words filter.notebookGuid = self.getNotebookGuid(name) return self.noteStore.findNotes(self.authToken, filter, 0, count) """ (名前はおいといて)検索したノートの内容を取得""" def getNote(self, noteList): for note in noteList.notes: print note.title tmpNote = self.noteStore.getNote(self.authToken, note.guid, True,None,None,None) print tmpNote.content es = EvernoteSearch() list = es.getNoteList("てすと") es.getNote(list)