Java读取Evernote中如何使用DeveloperToken

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

创新互联公司于2013年成立,先为遵化等服务建站,遵化等地企业,进行企业商务咨询服务。为遵化企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

  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”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


名称栏目:Java读取Evernote中如何使用DeveloperToken
浏览地址:http://myzitong.com/article/gphhph.html