2017-06-01 14 views
0

私は、タイトルにマイノートのタグ名を追加し、関連するすべてのタグを削除する短いコードを書いています。私が本番稼働時にこれを実行しようとすると、私は速やかにレート制限を実際に打ちました。誰かがこのコードを最適化するのに役立つことができますか?または、私はEvernoteで特別料金制限を要求する必要がありますか?Evernote Python API - ヒット率の制限

また、メモにタグがないとエラーになります。私はエラーを取得しないように効率的にノートからタグの数を取得する方法は?

from evernote.api.client import EvernoteClient 
from evernote.edam.notestore import NoteStore 

dev_token = "dev_token" 
client = EvernoteClient(token=dev_token, sandbox = False) 
userStore = client.get_user_store() 
user = userStore.getUser() 
print 
print user.username 
print 

noteStore = client.get_note_store() 
notebooks = noteStore.listNotebooks() 

for n in notebooks: 
    print "Notebook = " + n.name + " GUID = " + n.guid 

    filter = NoteStore.NoteFilter() 
    filter.ascending = False 
    filter.notebookGuid=n.guid 

    spec = NoteStore.NotesMetadataResultSpec() 
    spec.includeTitle = True 
    spec.includeNotebookGuid = True 
    spec.includeTagGuids = True 

    notesMetadataList = noteStore.findNotesMetadata(filter, 0, 25, spec) 
    for noteMetadata in notesMetadataList.notes: 
     print "%s :: %s" % (noteMetadata.title, noteMetadata.guid) 
     newNoteTitle = noteMetadata.title + " -- " 
     for tagGuid in noteMetadata.tagGuids: 
     tag = noteStore.getTag(tagGuid) 
     tagName = tag.name 
     print tagName 
     newNoteTitle = newNoteTitle + " " + tagName 
    print "newNoteTitle = " + newNoteTitle 
    noteMetadata.title = newNoteTitle 
    noteMetadata.tagGuids = [] 
    noteMetadata = noteStore.updateNote(noteMetadata) 
    print noteMetadata.title 

答えて

0

は、ここで私は `evernote_wait_try_again`定義されている方法(http://code.activestate.com/recipes/496741-object-proxying/に基づいて)プロキシ

from time import sleep 
from evernote.api.client import EvernoteClient 
from evernote.edam.error.ttypes import (EDAMSystemException, EDAMErrorCode) 


def evernote_wait_try_again(f): 
    """ 
    Wait until mandated wait and try again 
    http://dev.evernote.com/doc/articles/rate_limits.php 
    """ 

    def f2(*args, **kwargs): 
     try: 
      return f(*args, **kwargs) 
     except EDAMSystemException as e: 
      if e.errorCode == EDAMErrorCode.RATE_LIMIT_REACHED: 
       print("rate limit: {0} s. wait".format(e.rateLimitDuration)) 
       sleep(e.rateLimitDuration) 
       print("wait over") 
       return f(*args, **kwargs) 

    return f2 

class RateLimitingEvernoteProxy(object): 
    __slots__ = ["_obj"] 
    def __init__(self, obj): 
     object.__setattr__(self, "_obj", obj) 

    def __getattribute__(self, name): 
     return evernote_wait_try_again(
      getattr(object.__getattribute__(self, "_obj"), name)) 

_client = EvernoteClient(token=auth_token, sandbox=sandbox) 
client = RateLimitingEvernoteProxy(_client) 
+1

律速でEvernoteClientをラップすることにより、レート制限に対処する方法ですか? – jwodder

+0

修正済み。詳しくはhttps://github.com/rdhyee/evernote-web-utility/blob/0.0.6/EvernoteWebUtil/__init__.py#L55-L80をご覧ください。 –