前言
最近同窗推薦了一款叫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
運行效果
最後的運行效果,每次執行復制操做,在印象筆記裏面就會出現複製的內容: