用印象筆記的Python SDK介面開發個自用小工具

去年寫過一篇文章:https://zhuanlan.zhihu.com/p/24545638

其中分享了如何用印象筆記的開發者介面,用php開發一個收集金句的小工具。

今年換了Macbook,之前的環境和工具都沒了,於是使用Python3從頭寫了一個同樣的工具。

首先,因為印象筆記官方只提供Python2的SDK,所以去Github下載非官方的Python3 SDK。

下載地址:github.com/evernote/eve

點擊綠色的Clone or Download按鈕,然後選擇Download ZIP。

解壓後打開sample文件夾,然後再進入client文件夾,其中有個文件名叫EDAMTest.py

複製一份改名為yinxiang.py

在這個文件基礎上進行修改,開發屬於自己的工具,代碼如下。

# coding = utf-8nimport hashlibnimport binasciinimport evernote.edam.userstore.constants as UserStoreConstantsnimport evernote.edam.type.ttypes as Typesnimport osnimport timenimport renfrom evernote.api.client import EvernoteClientnfrom evernote.edam.notestore.ttypes import NoteFilternfrom evernote.edam.type.ttypes import NoteSortOrdernn# auth_token申請地址:https://dev.yinxiang.com/doc/articles/dev_tokens.phpnauth_token = "S=s3:U=1d3c1:E=16081a4df70:C=15929f3b2d0:P=1cd:A=en-devtoken:V=2:H=f540d0359f7e0d5c52235eb1c19c9885"nn# 關掉沙盒模式nsandbox = Falsen# True代表使用的國內的印象筆記,而不是Evernote國際版nchina = Truenn# 創建一個印象筆記client對象nclient = EvernoteClient(token = auth_token, sandbox = sandbox, china = china)nn# user_store = client.get_user_store()n# 通過client對象獲取note_store對象nnote_store = client.get_note_store()nn# 下面代碼為了獲取所有的筆記本數量、筆記本名和對應的GUID,目前是注釋狀態,為了找到對應的筆記本GUIDn# notebooks = note_store.listNotebooks()n# print("Found", len(notebooks), " notebooks:")n# for notebook in notebooks:n# print(notebook.name, notebook.guid)nn# 生成筆記標題,格式例如:20171113閱讀記錄ndaily_title = time.strftime(%Y%m%d,time.localtime()) + "閱讀記錄"nn# 生成查找筆記的規則,使用筆記創建排序,指定筆記本GUID,使用標題名搜索nupdated_filter = NoteFilter(order=NoteSortOrder.CREATED, notebookGuid="9e965c09-5045-4909-ad78-bf95a5bbc09d", words=daily_title)n# 偏移0noffset = 0n# 只取一條筆記nmax_notes = 1nn# 查找出符合條件的筆記nresult_list = note_store.findNotes(updated_filter, offset, max_notes)nn# 如何找到對應筆記則,在這個筆記里加一條金句,否則創建一條新筆記把金句加進去nif result_list.totalNotes:n n # 獲取找到筆記的GUIDn note_guid = result_list.notes[0].guidn # 獲取到對應筆記n note = note_store.getNote(note_guid,1,1,1,1)n # 使用正則匹配出筆記里的內容文本n match_res = re.search(r<en-note>(.*)</en-note>, note.content, re.M|re.I)n # 如果能匹配到內容,則獲取內容設置變數名為old_content,否則old_content為空n if match_res:n old_content = match_res.group(1)n else:n old_content = ""n n # 讀取Mac系統tmp文件夾下的evernote.txt里的內容,使用utf-8編碼n newline = open(/tmp/evernote.txt,r, encoding=utf-8).read()nnn # 構建待更新的筆記內容n note.content = <?xml version="1.0" encoding="UTF-8"?>n note.content += <!DOCTYPE en-note SYSTEM n "http://xml.evernote.com/pub/enml2.dtd">n note.content += <en-note> + old_content +<br/> + newlinenn note.content += </en-note>n # 更新找到的舊筆記內容,把新的金句加進去。n res = note_store.updateNote(auth_token, note)n# 沒有找到舊的筆記,則新建一個使用今天日期+閱讀記錄為名字的新筆記nelse:n # 創建note對象n note = Types.Note() n # 設置筆記名稱 n note.title = daily_title n # 讀取evenote.txt里的內容n words = open(/tmp/evernote.txt,r,encoding=utf-8).read() + <br/>nn # 構建note的內容,把句子加到<en-note>標籤中nn note.content = <?xml version="1.0" encoding="UTF-8"?>n note.content += <!DOCTYPE en-note SYSTEM n "http://xml.evernote.com/pub/enml2.dtd">n note.content += <en-note> + wordsn note.content += </en-note>nn # 指定筆記本GUIDn note.notebookGuid = "9e965c09-5045-4909-ad78-bf95a5bbc09d"n # 創建筆記n created_note = note_store.createNote(note)n # 列印創建好的筆記標題和GUIDn print(note.title + "創建成功,GUID: ", created_note.guid)n

在以上內容完成後,打開Automator工具,新建一個服務,然後點擊資源庫->實用工具->運行 Shell腳本(雙擊)

解釋下第一行

export PYTHONPATH=/Users/joe/Documents/codelife/python/evernote_py3/lib

這句為了指定python3印象筆記的SDK環境變數,否則命令行可以運行,但在automator里不行,會提示找不到對應的evenote模塊。

LANG=en_US.UTF-8 pbpaste -txt > /tmp/evernote.txt

請注意,LANG=en_US.UTF-8 很重要,否則會造成亂碼。

pbpaste是Linux類系統自帶的命令,可以讀取剪貼板里的數據。然後使用 「> /tmp/evernote.txt」 在/tmp目錄下輸入生成一個叫做evernote.txt的文件。

整個腳本的意思是:

先把剪貼板里的內容存入臨時文件夾下的evernote.txt文件中,然後用Python3主文件去執行yinxiang.py 這個文件寫入印象筆記中。

對應的Python3主文件地址在命令行下使用 which python3查詢。

整體代碼如下,請對應修改自己的環境變數地址、python3文件地址和代碼地址。

export PYTHONPATH=/Users/joe/Documents/codelife/python/evernote_py3/libnLANG=en_US.UTF-8 pbpaste -txt > /tmp/evernote.txt & /Library/Frameworks/Python.framework/Versions/3.5/bin/python3 /Users/joe/Documents/codelife/python/evernote_py3/sample/client/yinxiang.pyn

然後保存文件名為save2evenote

然後打開「系統偏好設置」->「鍵盤」->「快捷鍵」->"服務"

這時你會發現有一個你剛才保存的服務會出現在這裡,然後給它設置個快捷鍵,比如Ctrl+ALt+Command+V

至此,終於一切都搞定了,以後遇到好段落和句子,只需要選中按下Command+C,然後再按 Ctrl+ALt+Command+V 就自動貼到印象筆記了。


推薦閱讀:

PyQt5系列教程(19):微調框2
看我如何進行Python對象注入利用
Python從零開始系列連載(10)——Python的基本運算和表達式(中)
Python課件的中文版

TAG:Python入门 | Python教程 | 印象笔记 |