tetsunosukeのnotebook

tetsunosukeのメモです

Evernoteから(特定のノートブックを指定して)検索する方法

evernoteAPI keyは、http://www.evernote.com/about/developer/api/#key からリクエストするとすぐもらえる。その後、十分sandboxで動かせたらproductionへのリクエストをすればOK。

productionとの違いは、下記のuserStoreUriとnoteStoreUriBaseが異なるだけ。(どちらも頭にsandbox.がつく)

PythonSDKを落とすと、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)