
起因:
近期看Evernote API的時候發(fā)現(xiàn)印象筆記對Python非常友好,就試了一下各類操作。
剛好一直覺得用過的那些備忘、代辦軟件功能太亂還不如拿記事本或者短信記。就用印象筆記寫一個,反正擺脫不了印象筆記,就干脆都存在里面。
用過一段時間以后發(fā)現(xiàn)備份和檢索功能還不錯,也可以把一些文檔做鏈接放進(jìn)去。
其實(shí)身邊的API都可以通過Python用起來,簡單的利用也會有不錯的效果。
演示用的軟件可以在我的Github,或者360云盤(0fe0)上下載。
演示視頻
我把簡單的演示放在了優(yōu)酷上,如果對演示感興趣可以看下去。
演示中沒有示范如何安裝evernote的包,pip install evernote一下就好了。
演示主要分為配置Secret Key、使用、配置快捷啟動,具體的文字說明我寫在了后面。
用途
- 該玩具將會將上周的Memo(在Memo筆記本組中)備份到S-Memo筆記本組(如果有的話)
- 用一份空白Memo替代舊Memo
配置
配置Python及程序
-
pip install evernote:安裝evernote包 -
pip install requests:如需要使用Oauth,安裝requests包 - Memo樣式可以通過修改模板文件
content.enex調(diào)整 - 存放位置與工作安排的名字可以通過修改
PackMemo.py4-6行配置
配置Secret Key
- 進(jìn)入印象筆記官網(wǎng)并登陸(其實(shí)也可以忽略這一步,但下面的網(wǎng)址鏈接不太穩(wěn)定)
- 進(jìn)入印象筆記開發(fā)者Token獲取開發(fā)者Token
- 將獲取到的開發(fā)者Token添加到EvernoteController.py第21行單引號內(nèi)(->21 DEV_TOKEN = '')
使用
-
python PackMemo.py:將會自動登錄完成日志創(chuàng)建與存儲 -
Win+R pm <CR>:Windows系統(tǒng)內(nèi)配置好快捷啟動后即可使用
配置快捷啟動
-
Win+R %systemroot%/system32 <CR>:打開文件夾 - 將
PackMemo.bat創(chuàng)建快捷方式并重命名為pm - 將
pm拖入文件夾
程序細(xì)節(jié)
EvernoteController.py
- 示例程序:基本的筆記操作
e = EvernoteController()
e.create_notebook('Notebook1')
e.create_note('Hello', '<en-note>Hello, world!</en-note>', 'Notebook1')
e.create_notebook('Notebook2')
e.show_notes()
e.move_note('Notebook1/Hello', 'Notebook2')
e.show_notes()
e.delete_note('Notebook2/Hello')
# deleting notebook can only be available when you use developer token for your own evernote
e.delete_notebook('Notebook1')
e.delete_notebook('Notebook2')
e.show_notes()
- 可以選擇是否開啟本地存儲與Oauth驗(yàn)證(就是賬號密碼登陸)
- 筆記指定方式通過
myfile方法確定為Notebook/Note - 刪除操作僅在使用開發(fā)者Token時可以使用,否則僅能移入已刪除的文件文件夾(API限制)
- 完整版EvernoteControler.py包含其余組件,如果感興趣可以再做研究
Memo.py
- 通過替換將日期周數(shù)等內(nèi)容
- 關(guān)于enex的文檔格式,文檔的內(nèi)容都在<en-note>標(biāo)簽里面
- 建議有什么需要的格式自己導(dǎo)出一份研究就可以了,這里是擴(kuò)展閱讀
PackMemo.bat
- 雖然演示視頻中把快捷方式直接放到了%systemroot%/system32下面,但還是得說,這不是一個好習(xí)慣
- 建議確定一個別的文件夾,專門用來放各類快捷啟動,然后把這個文件夾加入環(huán)境變量
- 沒準(zhǔn)就有人覺得有用呢(攤手)
API
快速入門
- 對于API如果想要有個全面的了解的話,可以移步我的另一篇文章。
- 整個API的框架分為OAuth(使用開發(fā)者Token的話直接獲取EvernoteClient即可)和常用方法
- 僅是小應(yīng)用的話可以不用了解OAuth
- OAuth原意不是通過命令行實(shí)現(xiàn),但還是可以通過一定的方法實(shí)現(xiàn),官方文檔見這里
權(quán)限
印象筆記有兩種權(quán)限類型,開發(fā)者權(quán)限和普通權(quán)限。
- 開發(fā)者權(quán)限:沙盒內(nèi)與使用開發(fā)者Token(僅能操作本人賬號)時的權(quán)限,可以使用所有的方法
- 普通權(quán)限:用戶可以通過輸入賬號密碼和點(diǎn)擊確認(rèn)給予應(yīng)用授權(quán),可以使用絕大部分方法,具體操作見Oauth.py
獲得授權(quán)后會獲得一個Token,在各種方法中都會使用到
通過這個Token即可獲取EvernoteClient, userStore, noteStore
if SANDBOX:
client = EvernoteClient(token=self.token)
else:
client = EvernoteClient(token=self.token, service_host=SERVICE_HOST)
userStore = client.get_user_store()
noteStore = client.get_note_store()
基本方法
以Function: NoteStore.deleteNote為例演示如何使用API,以下為官方介紹:

首先,由于其為NoteStore類的方法,所以調(diào)用的方式為NoteStore.deleteNote(token, guid)
其次,token為上述的開發(fā)者Token或者有興趣的話為OAuth獲取到的token
再次,從圖中第七行可以看出,guid的為GUID of the note to delete,下面是Note的介紹

那么,只要獲取到Note,就可以獲得guid。
所以,最后一步,這里牽扯到印象筆記的數(shù)據(jù)結(jié)構(gòu),了解即可
- 通過NoteStore.listNotebooks獲取Notebook列表,找到需要的Notebook的guid(和Note的guid不同)
- 通過NoteStore.findNotes設(shè)置特定筆記本的NoteFilter獲取Note列表,找到需要的Note
- 調(diào)用NoteStore.deleteNote方法即可以生效
值得一提的是,某些操作需要特殊的權(quán)限,sandbox中和使用開發(fā)者Token時可以使用不代表外部可以使用
結(jié)束語
希望讀完這篇文章能對你有幫助,有什么不足之處萬望指正(鞠躬)。
有什么想法或者想要關(guān)注我的更新,歡迎來Github上Star或者Fork。
160304
LittleCoder
EOF