
Akamai API Security 如何保護 Web 應用程序免受攻擊
Evernote 提供了一系列支持批量操作的 API 方法,包括但不限于:
操作類型 | 對應 API 方法 |
---|---|
查詢筆記 | findNotes , findNotesMetadata |
創建筆記 | createNote (循環方式) |
更新筆記 | updateNote |
刪除筆記 | deleteNote |
同步數據 | getSyncChunk / getFilteredSyncChunk |
雖然 Evernote 沒有直接提供 “一鍵多條” 批量接口,但通過高效循環 + 異常處理 + 延遲控制,完全可以實現穩定的批量操作邏輯。
pip install evernote
初始化連接:
from evernote.api.client import EvernoteClient
client = EvernoteClient(token="your_token", sandbox=False)
note_store = client.get_note_store()
findNotesMetadata
該方法適合批量獲取筆記的元信息:
from evernote.edam.notestore.ttypes import NotesMetadataResultSpec, NoteFilter
note_filter = NoteFilter()
spec = NotesMetadataResultSpec(includeTitle=True, includeCreated=True)
offset = 0; limit = 50; all_notes = []
while True:
chunk = note_store.findNotesMetadata(note_filter, offset, limit, spec)
if not chunk.notes:
break
all_notes.extend(chunk.notes)
offset += limit
這樣可以獲取大量筆記的 guid
、title
、created
信息,為后續更新或刪除打下基礎。
from evernote.edam.type import ttypes as Types
def create_batch_notes(note_store, count):
for i in range(count):
note = Types.Note()
note.title = f"項目筆記-{i+1}"
note.content = """ < ?xml version="1.0" encoding="UTF-8"? >
< !DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd" >
< en-note > 這是一條自動創建的筆記。< /en-note > """
try:
note_store.createNote(note)
except Exception as e:
print(f"第{i+1}條失敗:{e}")
建議一次性創建數量控制在 10-20 條之間,并設置延時防止觸發限流。
for note_meta in all_notes:
note = note_store.getNote(note_meta.guid, True, False, False, False)
note.title = f"[更新] {note.title}"
note.tagNames = (note.tagNames or []) + ["已歸檔"]
note_store.updateNote(note)
可同時更新:
?? 注意:更新 content
時需嚴格遵循 ENML 格式,否則會拋出 EDAMUserException
。
for note_meta in all_notes:
try:
note_store.deleteNote(note_meta.guid)
print(f"已刪除筆記:{note_meta.guid}")
except Exception as e:
print(f"刪除失敗:{e}")
刪除操作不可恢復,建議配合 GUI 工具或數據庫記錄操作日志,以防誤刪。
getSyncChunk
實現大規模筆記同步適合同步多賬戶、多個筆記本的筆記變更記錄:
token = ""
while True:
chunk = note_store.getSyncChunk(token, 1000, True)
for note in chunk.notes:
# 保存本地備份或執行操作
pass
if not chunk.notes:
break
token = chunk.chunkHighUSN
支持以下內容的批量同步:
Evernote 對頻繁調用接口的客戶端會返回 EDAMSystemException
和 EDAMRateLimitException
。建議添加指數退避機制:
import time
def safe_update(note):
retry = 0
while retry < 5:
try:
note_store.updateNote(note)
return
except EDAMSystemException as e:
if e.errorCode == 19: # RATE_LIMIT_REACHED
wait = 2 ** retry
time.sleep(wait)
retry += 1
項目 | 推薦做法 |
---|---|
限流控制 | 每次操作間加 1-2 秒延遲 |
批量上限 | 每批處理 10-20 條記錄 |
錯誤記錄 | 日志記錄失敗項,便于重試 |
并發處理 | 使用 ThreadPoolExecutor 異步執行 |
數據備份 | 操作前導出 GUID 與內容存檔 |
操作確認機制 | 設置 dry_run=True 模式先模擬操作 |
通過 Evernote API,開發者可以輕松實現以下筆記批量處理:
下一步推薦擴展: