
模型压缩四剑客:量化、剪枝、蒸馏、二值化
在知识管理、信息归档和项目协作场景中,手动管理成千上万条笔记既耗时又低效。使用 Evernote API 实现笔记的批量操作,可以带来以下优势:
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,开发者可以轻松实现以下笔记批量处理:
下一步推荐扩展: