印象笔记更新笔记资源。

4
我正在使用Python的Evernote API创建一个应用程序,允许用户创建和更新笔记,但我在理解如何高效地更新Evernote资源时遇到了麻烦。这主要发生在我从HTML转换为ENML(Evernote Markup Language)时,我正在从img标签创建资源(现在我只考虑图像资源)。
我的问题是:如何根据HTML判断笔记的资源是否需要更新?我考虑将图像数据与所有当前资源的数据进行比较,但这似乎非常慢。现在,我只为每个img标签创建一个新资源。
我发现一些有用的资源,包括Evernote资源指南Evernote SDK中的此示例代码。感谢任何建议。

也许对HTML进行哈希处理并确定差异是您的解决方案?http://programmers.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed - StanleyZheng
1
可以做到,但每次获取HTML时都需要对图像数据进行哈希比较,这仍然似乎很昂贵。 - pryan
1个回答

1
最佳方式是对文件的MD5哈希值进行比较。Evernote笔记通过它们的MD5哈希值来跟踪资源。
要查看附加到Evernote笔记的文件的MD5哈希值,只需查看标有"en-media"的ENML元素,标记的形式如下所示:
 <en-media type="mime-type" hash="md5-of-file" />

其中mime-type是文件类型,md5-of-file是文件的MD5哈希值。要获取笔记的ENML,请调用getNote(文档在此处),并确保指定您想要的内容。笔记的ENML内容是由getNote返回的对象的content属性的值(a note object)。

虽然哈希可能很昂贵,但MD5相对较快,计算文件的MD5哈希值比等待网络下载图像更快。

此外,updateResource method documentation中说:

“向服务提交一组更改以更新资源。这可以用于更新有关资源的元数据,但不能用于更改资源的二进制内容(包括长度和哈希)。无法直接更改它们,必须通过updateNote创建新资源并删除旧资源。”

所以,“更新”资源的唯一方法是从笔记中删除旧资源,并在其位置创建一个新的资源。您可以通过将资源对象从所涉及的笔记的资源属性列表中移除来实现这一点。要添加新的笔记,只需向同一列表中添加新的资源对象即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接