千家信息网

Java读取Evernote中如何使用DeveloperToken

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,这篇文章主要为大家展示了"Java读取Evernote中如何使用DeveloperToken",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java读取Ev
千家信息网最后更新 2024年11月28日Java读取Evernote中如何使用DeveloperToken

这篇文章主要为大家展示了"Java读取Evernote中如何使用DeveloperToken",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Java读取Evernote中如何使用DeveloperToken"这篇文章吧。

  1. 首先我们需要在Evernote的sandbox环境注册一个账户,https://sandbox.evernote.com/Registration.action

  2. 有账户,如果希望使用java读取账户的信息,我们还需要申请一个Token,也就是一个授权码,有了授权,我们才能从账户里那东西。https://sandbox.evernote.com/api/DeveloperToken.action

  3. 开发准备就绪,下面创建一个Maven项目,引入Evernote API

  • 创建Maven项目:

    mvn archetype:generate -DgroupId=com.yotoo.app -DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false


  • 添加evernote jdk依赖:

        4.0.0    com.yotoo.app    simple    jar    1.0-SNAPSHOT    simple    http://maven.apache.org                        com.evernote            evernote-api            1.25.1                            junit            junit            3.8.1            test            


4. 把项目导入Intellij IDEA或Eclipse随你喜欢,创建一个HelloEvernote类

HelloEvernote类


  • package com.yotoo.app;import com.evernote.auth.EvernoteAuth;import com.evernote.auth.EvernoteService;import com.evernote.clients.ClientFactory;import com.evernote.clients.NoteStoreClient;import com.evernote.clients.UserStoreClient;import com.evernote.edam.error.EDAMErrorCode;import com.evernote.edam.error.EDAMSystemException;import com.evernote.edam.error.EDAMUserException;import com.evernote.edam.notestore.NoteFilter;import com.evernote.edam.notestore.NoteList;import com.evernote.edam.type.*;import com.evernote.thrift.transport.TTransportException;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.security.MessageDigest;import java.util.Iterator;import java.util.List;public class HelloEvernote {  // 去这里申请一个 Token https://sandbox.evernote.com/api/DeveloperToken.action  private static final String AUTH_TOKEN = "填写授权Token";  private UserStoreClient userStore;  private NoteStoreClient noteStore;  private String newNoteGuid;  public static void main(String args[]) throws Exception {    String token = System.getenv("AUTH_TOKEN");    if (token == null) {      token = AUTH_TOKEN;    }    if ("".equals(token)) {      System.err.println("去这里申请一个Token https://sandbox.evernote.com/api/DeveloperToken.action");      return;    }    HelloEvernote demo = new HelloEvernote(token);    try {      demo.listNotes();      demo.createNote();      demo.searchNotes();      demo.updateNoteTag();    } catch (EDAMUserException e) {      // 需要处理的异常      if (e.getErrorCode() == EDAMErrorCode.AUTH_EXPIRED) {        System.err.println("授权的Token已经过期!");      } else if (e.getErrorCode() == EDAMErrorCode.INVALID_AUTH) {        System.err.println("无效的授权Token!");      } else if (e.getErrorCode() == EDAMErrorCode.QUOTA_REACHED) {        System.err.println("无效的授权Token!");      } else {        System.err.println("错误: " + e.getErrorCode().toString()            + " 参数: " + e.getParameter());      }    } catch (EDAMSystemException e) {      System.err.println("系统错误: " + e.getErrorCode().toString());    } catch (TTransportException t) {      System.err.println("网络错误:" + t.getMessage());    }  }  /**   * 初始化 UserStore and NoteStore 客户端   */  public HelloEvernote(String token) throws Exception {    // 设置 UserStore 的客户端并且检查和服务器的连接    EvernoteAuth evernoteAuth = new EvernoteAuth(EvernoteService.SANDBOX, token);    ClientFactory factory = new ClientFactory(evernoteAuth);    userStore = factory.createUserStoreClient();    boolean versionOk = userStore.checkVersion("Evernote EDAMDemo (Java)",        com.evernote.edam.userstore.Constants.EDAM_VERSION_MAJOR,        com.evernote.edam.userstore.Constants.EDAM_VERSION_MINOR);    if (!versionOk) {      System.err.println("不兼容的Evernote客户端协议");      System.exit(1);    }    // 设置 NoteStore 客户端    noteStore = factory.createNoteStoreClient();  }  /**   * 获取并显示用户的笔记列表   */  private void listNotes() throws Exception {    // 列出用户的Notes    System.out.println("Listing notes:");    // 首先,获取一个笔记本的列表    List notebooks = noteStore.listNotebooks();    for (Notebook notebook : notebooks) {      System.out.println("Notebook: " + notebook.getName());      // 然后,搜索笔记本中前100个笔记并按创建日期排序      NoteFilter filter = new NoteFilter();      filter.setNotebookGuid(notebook.getGuid());      filter.setOrder(NoteSortOrder.CREATED.getValue());      filter.setAscending(true);      NoteList noteList = noteStore.findNotes(filter, 0, 100);      List notes = noteList.getNotes();      for (Note note : notes) {        System.out.println(" * " + note.getTitle());      }    }    System.out.println();  }  /**   * 创建一个新的笔记   */  private void createNote() throws Exception {    // 创建一个新的笔记对象,并填写相关内容,比如标题等    Note note = new Note();    note.setTitle("Yotoo的Demo演示:通过Java创建一个新的笔记");    String fileName = "enlogo.png";    String mimeType = "image/png";    // 给笔记添加一个附件,比如图片;首先创建一个资源对象,然后设置相关属性,比如文件名    Resource resource = new Resource();    resource.setData(readFileAsData(fileName));    resource.setMime(mimeType);    ResourceAttributes attributes = new ResourceAttributes();    attributes.setFileName(fileName);    resource.setAttributes(attributes);    //现在,给新的笔记增加一个新的资源对象    note.addToResources(resource);    // 这个资源对象作为笔记的一部分显示    String hashHex = bytesToHex(resource.getData().getBodyHash());    // Evernote笔记的内容是通过ENML(Evernote Markup Language)语言生成的。    // 在这里可以了解具体的说明 http://dev.evernote.com/documentation/cloud/chapters/ENML.php    String content = ""        + ""        + ""        + "Evernote的图标在这里,很绿奥!
    " + "" + "
    "; note.setContent(content); // 最后,使用createNote方法,发送一个新的笔记给Evernote。 // 返回的新笔记对象将包含服务器生成的属性,如新笔记的的GUID Note createdNote = noteStore.createNote(note); newNoteGuid = createdNote.getGuid(); System.out.println("成功创建一个新的笔记,GUID为:" + newNoteGuid); System.out.println(); } /** * 查询用户的笔记并显示结果 */ private void searchNotes() throws Exception { // 搜索的格式需要根据Evernote搜索语法, // 参考这里http://dev.evernote.com/documentation/cloud/chapters/Searching_notes.php // 在这个例子中,我们搜索的标题中包含Yotoo String query = "intitle:Yotoo"; // 搜索的笔记中包含具体标签,我可以使用这个: // String query = "tag:tagname"; // 搜索任何位置包含"Yotoo"的笔记,可以使用: // String query = "Yotoo"; NoteFilter filter = new NoteFilter(); filter.setWords(query); filter.setOrder(NoteSortOrder.UPDATED.getValue()); filter.setAscending(false); // 查询前50个满足条件的笔记 System.out.println("满足查询条件的笔记: " + query); NoteList notes = noteStore.findNotes(filter, 0, 50); System.out.println("找到 " + notes.getTotalNotes() + " 个笔记"); Iterator iter = notes.getNotesIterator(); while (iter.hasNext()) { Note note = iter.next(); System.out.println("笔记: " + note.getTitle()); // 通过findNotes()返回的Note对象,仅包含笔记的属性,标题,GUID,创建时间等,但笔记的内容和二进制数据都省略了; // 获取笔记的内容和二进制资源,可以调用getNote()方法获取 Note fullNote = noteStore.getNote(note.getGuid(), true, true, false, false); System.out.println("笔记包含 " + fullNote.getResourcesSize() + " 个资源对象"); System.out.println(); } } /** * 更新标签分配给一个笔记。这个方法演示了如何调用updateNote方法发送被修改字段 */ private void updateNoteTag() throws Exception { // 当更新一个笔记时,只需要发送已经修改的字段。 // 例如,通过updateNote发送的Note对象中没有包含资源字段,那么Evernote服务器不会修改已经存在的资源属性 // 在示例代码中,我们获取我们先前创建的笔记,包括 笔记的内容和所有资源。 Note note = noteStore.getNote(newNoteGuid, true, true, false, false); //现在,更新笔记。复原内容和资源,因为没有修改他们。我们要修改的是标签。 note.unsetContent(); note.unsetResources(); // 设置一个标签 note.addToTagNames("TestTag"); // 现在更新笔记,我们没有设置内容和资源,所以他们不会改变 noteStore.updateNote(note); System.out.println("成功增加标签"); // 证明一下我们没有修改笔记的内容和资源;重新取出笔记,它仍然只有一个资源(图片) note = noteStore.getNote(newNoteGuid, false, false, false, false); System.out.println("更新以后, 笔记有 " + note.getResourcesSize() + " 个资源"); System.out.println("更新以后,笔记的标签是: "); for (String tagGuid : note.getTagGuids()) { Tag tag = noteStore.getTag(tagGuid); System.out.println("* " + tag.getName()); } System.out.println(); } /** * 从磁盘读取文件的内容并创建数据对象 */ private static Data readFileAsData(String fileName) throws Exception { String filePath = new File(HelloEvernote.class.getResource( "com.yotoo.app.HelloEvernote.class").getPath()).getParent() + File.separator + fileName; // 读取文件的二进制内容 FileInputStream in = new FileInputStream(filePath); ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); byte[] block = new byte[10240]; int len; while ((len = in.read(block)) >= 0) { byteOut.write(block, 0, len); } in.close(); byte[] body = byteOut.toByteArray(); // 创建一个新的包含文件内容的二进制对象 Data data = new Data(); data.setSize(body.length); data.setBodyHash(MessageDigest.getInstance("MD5").digest(body)); data.setBody(body); return data; } /** * 把byte数组转换成hexadecimal字符串 */ public static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte hashByte : bytes) { int intVal = 0xff & hashByte; if (intVal < 0x10) { sb.append('0'); } sb.append(Integer.toHexString(intVal)); } return sb.toString(); }}


5. 把Evernote的图标放在HelloEvernote 类的同级目录。

6. 执行一下看看,如果在Evernote账户下创建了一个新的笔记,说明已经学会啦。

以上是"Java读取Evernote中如何使用DeveloperToken"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

笔记 内容 资源 对象 标签 搜索 更新 账户 二进制 客户 客户端 属性 文件 方法 字段 服务器 标题 用户 篇文章 错误 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 单片机软件开发有国有企业吗 云服务器扩展电脑性能 如何自己设置ftp服务器 计算机数据库信息管理论文 网络安全活动的报道 java和数据库连接视频讲解 北京市蓟马数据库 浅谈中小企业网络安全与防护 保定廊坊oa管理系统网络技术 服务器本地硬盘配置方式 增强网络安全意识和能力 现在网络安全维护合法了么 我的世界网易外国服务器 网络安全远离毒品800字 博山企业资源计划erp软件开发 女生做财务和软件开发哪个好 滴滴审查与网络安全 网络安全面临全球影响和挑战 江西信息化土地资产管理软件开发 爱维宝贝服务器型号 中国互联网领先科技 银行里面做软件开发 晋城App软件开发公司 软件开发过程所占比重 陕西服务器磁盘阵列卡驱动云空间 网络安全常见的防护 国外十大软件开发公司 服务器硬盘损坏一天能修好吗 开远大理网络技术服务 ps5买不同服务器的会员
0