Evernote(印象筆記)備份本機剪切板數據

前言
最近同窗推薦了一款叫Ditto的軟件,用來記錄用戶的剪貼板數據,包括:文字,圖片,文件路徑;windows系統自己只能保留最近的一次的剪貼板數據,因此有時候這個功能仍是挺有用的;惟一不足的就是不能多端同步,由於一直用印象筆記,因此打算用印象筆記來備份本機剪切板數據,並且印象筆記也提供了強大的搜索功能。java

準備
1.申請印象筆記 API Key
印象筆記自己提供了對外的api接口,咱們能夠申請API Key,地址:https://dev.yinxiang.com/doc/,獲取API Key便可,以下圖:git

其中要注意的是應用的權限:基本權限和徹底權限;基本權限包括建立筆記,列出筆記等;徹底權限包括更新刪除等功能。github

申請完以後會獲取一封郵件,以下圖所示:windows

主要信息是API Key相關信息,以及告訴咱們沙箱環境已經激活,生產環境尚未激活,佔時能夠在沙箱環境進行測試,而且沙箱環境須要從新建立賬號。api

2.evernote-sdk下載
evernote提供了主流語言的SDK,java sdk對應的地址:https://github.com/evernote/evernote-sdk-java
src是sdk的源碼,sample是相關demo,能夠導入sample進行本地測試tomcat

3.用OAuth對印象筆記雲 API進行認證
基於OAuth的認證流程由四部分組成:ide

生成一個臨時的Token
請求用戶認證
取回 Access Token
接下來的步驟,訪問API

能夠直接將sample中的oauth項目直接導入到Eclipse中,部署到tomcat中,直接訪問:http://localhost:8080/EDAMWebTest/
對應的四個組成部分,界面中也有四個Action:測試

Actions
Get OAuth Request Token from Provider
Send user to get authorization
Get OAuth Access Token from Provider
List notebooks in account

分別點擊,最終爲了獲取Access Token,會在頁面顯示User access token:xxxxui

4.簡單測試
有了access token,就能夠用sample中的client進行簡單的沙箱測試,client提供了EDAMDemo類,須要的AUTH_TOKEN就是剛剛獲取的access token,複製進去就能夠在沙箱環境(SANDBOX)進行簡單的測試了。this

收集剪貼板
java提供了類ClipboardOwner用來監聽剪貼板數據的變更,剪貼板數據變更,就能直接獲取剪貼板的數據,這樣就簡單了,直接將獲取到的剪貼板數據經過Evernote Api將數據同步到印象筆記,部分代碼以下:

if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) {
    String text = (String) clipboard.getData(DataFlavor.stringFlavor);
    evernoteApi.createNoteText(text);
    clipboard.setContents(new StringSelection(text), this);
} else if (clipboard.isDataFlavorAvailable(DataFlavor.imageFlavor)) {
    final BufferedImage image = (BufferedImage) clipboard.getData(DataFlavor.imageFlavor);
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ImageIO.write(image, "png", out);
    Transferable trans = new Transferable() {
               ......
    };
    evernoteApi.createNoteImage("IMAGE:" + new Date(), out.toByteArray());
    clipboard.setContents(trans, this);
} else if (clipboard.isDataFlavorAvailable(DataFlavor.javaFileListFlavor)) {
    @SuppressWarnings("unchecked")
    List<File> array = (List<File>) clipboard.getData(DataFlavor.javaFileListFlavor);
    for (File file : array) {
        evernoteApi.createNoteText(file.getPath());
    }
    clipboard.setContents(contents, this);
} else {
    logger.info("未知的類型");
}

代碼中主要對三種剪貼板數據類型進行了處理,分別是:DataFlavor.stringFlavor,DataFlavor.imageFlavor和DataFlavor.javaFileListFlavor;對應的是文本,圖片和文件,文件只同步了文件的具體路徑。

請求激活生產環境
訪問地址:https://dev.yinxiang.com/support/,點擊「激活API Key」;要求填寫具體信息,儘可能詳細點,而後提示你在2-3個工做日給你激活。

代碼作簡單修改就能夠直接在生產環境運行了,主要修改部分代碼:

EvernoteApi.Sandbox.class改爲EvernoteApi.Yinxiang.class
EvernoteService.Sandbox改爲EvernoteService.YINXIANG

改完以後接下來和在沙箱環境是相似的,也須要先進行受權,而後獲取access token,爲了方便,分別提供了在代碼中提供了兩個bat文件,用來處理這兩步,針對每一個用戶只須要獲取一次就能夠了。

具體代碼地址:
gitee:https://gitee.com/OutOfMemory/Clipboard
github:https://github.com/ksfzhaohui/Clipboard

運行效果
最後的運行效果,每次執行復制操做,在印象筆記裏面就會出現複製的內容:

相關文章
相關標籤/搜索