用印象笔记的Python SDK接口开发个自用小工具

去年写过一篇文章:https://zhuanlan.zhihu.com/p/24545638?utm_source=itdadao&utm_medium=referral

其中分享了如何用印象笔记的开发者接口,用php开发一个收集金句的小工具。

今年换了Macbook,之前的环境和工具都没了,于是使用Python3从头写了一个同样的工具。

首先,因为印象笔记官方只提供Python2的SDK,所以去Github下载非官方的Python3 SDK。

下载地址:https://github.com/evernote/evernote-sdk-python3

点击绿色的Clone or Download按钮,然后选择Download ZIP。

解压后打开sample文件夹,然后再进入client文件夹,其中有个文件名叫EDAMTest.py

复制一份改名为yinxiang.py

在这个文件基础上进行修改,开发属于自己的工具,代码如下。

# coding = utf-8
import hashlib
import binascii
import evernote.edam.userstore.constants as UserStoreConstants
import evernote.edam.type.ttypes as Types
import os
import time
import re
from evernote.api.client import EvernoteClient
from evernote.edam.notestore.ttypes import NoteFilter
from evernote.edam.type.ttypes import NoteSortOrder

# auth_token申请地址:https://dev.yinxiang.com/doc/articles/dev_tokens.php
auth_token = "S=s3:U=1d3c1:E=16081a4df70:C=15929f3b2d0:P=1cd:A=en-devtoken:V=2:H=f540d0359f7e0d5c52235eb1c19c9885"

# 关掉沙盒模式
sandbox = False
# True代表使用的国内的印象笔记,而不是Evernote国际版
china = True

# 创建一个印象笔记client对象
client = EvernoteClient(token = auth_token, sandbox = sandbox, china = china)

# user_store = client.get_user_store()
# 通过client对象获取note_store对象
note_store = client.get_note_store()

# 下面代码为了获取所有的笔记本数量、笔记本名和对应的GUID,目前是注释状态,为了找到对应的笔记本GUID
# notebooks = note_store.listNotebooks()
# print("Found", len(notebooks), " notebooks:")
# for notebook in notebooks:
#     print(notebook.name, notebook.guid)

# 生成笔记标题,格式例如:20171113阅读记录
daily_title = time.strftime('%Y%m%d',time.localtime()) + "阅读记录"

# 生成查找笔记的规则,使用笔记创建排序,指定笔记本GUID,使用标题名搜索
updated_filter = NoteFilter(order=NoteSortOrder.CREATED, notebookGuid="9e965c09-5045-4909-ad78-bf95a5bbc09d", words=daily_title)
# 偏移0
offset = 0
# 只取一条笔记
max_notes = 1

# 查找出符合条件的笔记
result_list = note_store.findNotes(updated_filter, offset, max_notes)

# 如何找到对应笔记则,在这个笔记里加一条金句,否则创建一条新笔记把金句加进去
if result_list.totalNotes:
    
    # 获取找到笔记的GUID
    note_guid = result_list.notes[0].guid
    # 获取到对应笔记
    note = note_store.getNote(note_guid,1,1,1,1)
    # 使用正则匹配出笔记里的内容文本
    match_res = re.search(r'<en-note>(.*)<\/en-note>', note.content, re.M|re.I)
    # 如果能匹配到内容,则获取内容设置变量名为old_content,否则old_content为空
    if match_res:
        old_content = match_res.group(1)
    else:
        old_content = ""
    
    # 读取Mac系统tmp文件夹下的evernote.txt里的内容,使用utf-8编码
    newline = open('/tmp/evernote.txt','r', encoding='utf-8').read()


    # 构建待更新的笔记内容
    note.content = '<?xml version="1.0" encoding="UTF-8"?>'
    note.content += '<!DOCTYPE en-note SYSTEM ' \
                    '"http://xml.evernote.com/pub/enml2.dtd">'
    note.content += '<en-note>' + old_content +'<br/>' + newline

    note.content += '</en-note>'
    # 更新找到的旧笔记内容,把新的金句加进去。
    res = note_store.updateNote(auth_token, note)
# 没有找到旧的笔记,则新建一个使用今天日期+阅读记录为名字的新笔记
else:
    # 创建note对象
    note = Types.Note() 
    # 设置笔记名称 
    note.title = daily_title 
    # 读取evenote.txt里的内容
    words = open('/tmp/evernote.txt','r',encoding='utf-8').read() + '<br/>'

    # 构建note的内容,把句子加到<en-note>标签中

    note.content = '<?xml version="1.0" encoding="UTF-8"?>'
    note.content += '<!DOCTYPE en-note SYSTEM ' \
                    '"http://xml.evernote.com/pub/enml2.dtd">'
    note.content += '<en-note>' + words
    note.content += '</en-note>'

    # 指定笔记本GUID
    note.notebookGuid = "9e965c09-5045-4909-ad78-bf95a5bbc09d"
    # 创建笔记
    created_note = note_store.createNote(note)
    # 打印创建好的笔记标题和GUID
    print(note.title + "创建成功,GUID: ", created_note.guid)

在以上内容完成后,打开Automator工具,新建一个服务,然后点击资源库->实用工具->运行 Shell脚本(双击)

15105707054299.jpg

先解释下第一行
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/lib
LANG=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.py

然后保存文件名为save2evenote

然后打开“系统偏好设置”->“键盘”->“快捷键”->"服务"

15105712578089.jpg

这时你会发现有一个你刚才保存的服务会出现在这里,然后给它设置个快捷键,比如Ctrl+ALt+Command+V

至此,终于一切都搞定了,以后遇到好段落和句子,只需要选中按下Command+C,然后再按 Ctrl+ALt+Command+V 就自动贴到印象笔记了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容