使用 Evernote php sdk 更新 Evernote 笔记

Updating Evernote note with Evernote php sdk

我可以从 evernote API 中获取笔记(真实内容,而不仅仅是元数据)。但是,调用 notestore->update() 总是给我一个 EDAMUserException。

我的 php 代码如下,参数不言自明:

//add text to note
//if append=true then the text will be appended to the end, else it will be appended to the start
public function addToNote($new_content, $access_token, $note_store, $note_guid, $append = true){
    $note = $note_store->getNote($access_token, $note_guid, true, false, false, false);
    $note->content +="<en-note>Note updated</en-note>";
    $note_store->updateNote($access_token, $note);
}

我在这里问之前已经做了很多搜索,以下是我所知道的:

  1. 根据:https://dev.evernote.com/doc/articles/permissions.php它说有两种类型的api密钥,一种是基本访问权限,一种是完全访问权限,我有完全访问权限, $note_store->getNote()调用期间没有抛出异常证明了这一点,而且我确实从那个调用中输出了数据,我实际上可以得到笔记的内容。

  2. 在与 1 相同的页面中:"Certain API functions are only available to official Evernote applications and services. These functions are described as such in the API Reference and will throw an EDAMUserException with the error code PERMISSION_DENIED if called by a third-party application." 我在此处阅读了 API 文档:https://dev.evernote.com/doc/reference/NoteStore.html#Fn_NoteStore_updateNote 它没有提到它默认被阻止。

我想我知道出了什么问题。 Evernote 实际上有自己的 DTD 文档格式,如果笔记的 "content" 部分不是有效文档,那么请求将被拒绝。在我的例子中,它没有被拒绝,因为我的 API 密钥的访问级别,但因为我提供的 "content" 不是正确的 evernote 格式。 如果我设置:

$note->content='<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd"><en-note><div>testing complete!!!</div></en-note>';

那么笔记就更新成功了。 但是,对于获得此异常并使用正确格式的其他用户,最有可能的是: 1.your api 密钥没有完全访问权限,请在请求 api 密钥时选择完全访问选项。 2.usually 你会在他们网站的 "sandboxed"(https://sandbox.evernote.com) 版本上开始测试,你需要在沙盒网站上注册另一个帐户(你真正的 evernote 帐户不会结转)和使用该帐户进行测试。如果您不这样做,您的帐户将不会存在于沙盒帐户中,您所做的任何操作都将无效。