本文做者: 伯乐在线 - LittleCoder 。未经做者许可,禁止转载!
欢迎加入伯乐在线做者团队。php
Evernote自己就是很好的笔记应用,其API又赋予了咱们更多的自由,值得花点时间尝试。html
本文将结合代码和理论,介绍如何使用这些API。python
在阅读完成本文后,你将可以完成相似PackMemo的程序。git
本教程使用Python 2.7.11,别的版本若是有什么奇怪的问题能够联系我补进去好了(摊手)github
pip install evernote
:Evernote的包能够经过pip很容易的安装编程
pip install requests
:为了使用OAuth,须要安装requests包api
记得在须要使用这两个包的时候加上import evernote, requests
安全
沙盒环境配置网络
这里配置的沙盒和Token的具体介绍在后面系统结构一节中哦数据结构
这里配置的三样东西建议拿个小notepad记一下
进入沙盒登录页面建立帐户便可
沙盒帐户开发者Token获取
普通帐户开发者Token获取
那么如今你应该已经配置好了全部环境并有一个记录帐号的小本本
关于环境,你应该可以在命令行里可以运行并不产生错误提示:
python -c 'from evernote.api.client import EvernoteClient'
python -c 'import requests'
以及记录了沙盒帐户及两个开发者Token
印象笔记存在两种帐户,以及每种帐户相同的两种受权方式
想要使用印象笔记的API,确定须要先得到某个帐户的受权(受权进入他的笔记,对于咱们来讲就是受权本身使用啦)
印象笔记的受权方法有两种
一种是程序提交某一帐户的开发者Token,显示已经被受权,获取受权。
1 2 3 4 |
from evernote.api.client import EvernoteClient devToken = "沙盒或者普通帐户的Token" client = EvernoteClient(token = devToken) |
另外一种是程序提交帐号和密码,用户在特定的网页端确认受权时间,获取受权。
这是一种较为复杂的认证方法,官方在SDK中有给出普通的认证方式
这种方式须要得到需申请的API Key
我这里给出了命令行认证方式(这不是正常的认证方法,也许哪一天就不能用了)
轮子都造好了何须再去造一遍呢,因此有兴趣或者问题的能够邮件联系我
若是认证失败会出现失败提示,因此没有失败这一部分就算完成了
经过这两种方法能够获取一个EvernoteClient类,这是以后一切的开始
值得注意的是,并不是全部受权都得到了全部的权限
经过OAuth方式得到的普通帐户受权,出于安全考虑是受到限制的。
受限的方法会在API表中特别提示
后文用到的token变量即开发者Token受权方式的devToken或是OAuth方式获取的token
帐户分为两种,分别为沙盒帐户与普通帐户
沙盒帐户只能经过网页登录
沙盒帐户和普通帐户的各特殊功能网页的网址之间都有着相同的区别,例如:
服务 | 地址 |
---|---|
沙盒 | https://sandbox.evernote.com/api/DeveloperToken.action |
产品 | https://app.yinxiang.com/api/DeveloperToken.action |
整体而言,各数据的获取顺序为:UserStore, NoteStore -> Notebook -> Note -> Resource
关于笔记、笔记本的操做所有都是NoteStore类的方法,须要传入指向须要操做的对象的guid
获取Notebook、Note、Resource类用于读取内容与获取其guid
在获取了EvernoteClient类的变量client后(见系统结构节),很容易的就能够获取UserStore类
这个类里面存储了有关用户信息、受权的内容(其实除了用户信息其余的都暂时用不到)
1 2 3 4 5 |
# 获取类 userStore = client.get_user_store() # 打印用户名 print('Log in successfully as {}'.format(userStore.getUser().username)) if userStore.getUser().premiumInfo.premium: print('We are friends!') |
在获取了EvernoteClient类的变量client后(见系统结构节),很容易的就能够获取NoteStore类
全部对笔记本、笔记进行的操做都须要经过该类完成,包括建立、删除笔记、笔记本
1 2 3 4 |
# 获取类 noteStore = client.get_note_store() # 获取笔记本数量 print('There are {} notebooks in your account'.format(len(noteStore.listNotebooks()))) |
经过NoteStore类的listNotebooks方法能够获取一个包含全部笔记本的列表
在客户端视图中存在笔记本的嵌套,但实际上数据存储中全部笔记本都在同一层
其下的笔记并不能经过该类的某个属性或者方法获取
具体的属性能够参照这里
1 2 3 4 5 |
# 打印每一个笔记本的名字与guid for notebook in self.noteStore.listNotebooks(): notebookName = notebook.name notebookGuid = notebook.guid print('{}: {}'.format(notebookName, notebookGuid)) |
获取某一笔记本下的笔记较为复杂
须要先经过NoteFilter类设定一个筛选规则
而后经过NoteStore类的方法获取全部知足这一规则的笔记
其内容(content)是ENML格式的文本
具体的属性能够参照这里
1 2 3 4 5 6 |
# 列出第一个笔记本中的全部笔记的标题 notebookGuid = noteStore.listNotebooks()[0] f = NoteStore.NoteFilter() f.notebookGuid = notebookGuid for note in noteStore.findNotes(token, f, 0, 999).notes: print(note.title) |
目前应当能够经过命令行获取四种主要的数据类型
简单的测试一下:以必定格式输出某一个或某几个特定名字的笔记本中的全部笔记
1 2 3 4 5 6 |
# 格式为 笔记本1: 笔记1 笔记2 笔记本2: 笔记3 |
如下为实现代码:
1 2 3 4 5 6 7 8 |
def show_notes(noteStore, notebookList=[]): for nb in noteStore.listNotebooks(): if nb in notebookList or not notebookList: print(nb.name + ':') f = noteStore.NoteFilter() f.notebookGuid = nb.guid for ns in noteStore.findNotes(self.token, f, 0, 999).notes: print(('' if notebook else ' ') + ns.title) |
以删除笔记操做(Function: NoteStore.deleteNote)为例演示如何阅读官方介绍,如下为官方介绍:
Function: NoteStore.deleteNote
首先,因为其为NoteStore类的方法,因此调用的方式为NoteStore.deleteNote(token, guid)
其次,token为上述的开发者Token或者OAuth获取到的token
再次,从图中第七行能够看出,guid的为GUID of the note to delete
,下面是Note的介绍
Note
那么,只要获取到Note,就能够得到guid。
因此,最后一步,根据已经介绍过的印象笔记的数据结构,咱们知道若是获取Note
经过NoteStore.listNotebooks获取Notebook列表,找到须要的Notebook的guid(和Note的guid不一样)
经过NoteStore.findNotes设置特定笔记本的NoteFilter,经过NoteStore.findNotes获取Note列表,找到须要的Note
调用NoteStore.deleteNote方法便可以生效
如下为代码:
1 2 3 4 5 6 7 8 |
def find_note_guid(noteStore, noteName): for notebook in noteStore.listNotebooks(): f = NoteStore.NoteFilter() f.notebookGuid = notebookGuid for note in noteStore.findNotes(token, f, 0, 999).notes: if note.title == noteName: return note.guid noteStore.deleteNote(token, find_note_guid(noteStore, '要删除的笔记的名字')) |
其他的方法相差不大,也就不一一赘述,你能够在这里找到全部你须要的东西
一些基础的方法我进行了必定的包装与简化,写了一个简单的EvernoteController,但愿在你尝试的时候可以给予你一些启发。
你如今已经得到了完成文首处提到的PackMemo所须要的全部知识,能够开始尝试就本身的需求写应用了!
但愿读完这篇文章能对你有帮助,有什么不足之处万望指正(鞠躬)。
有什么想法或者想要关注个人更新,欢迎来Github上Star或者Fork。
问啊-定制化IT教育平台,牛人一对一服务,有问必答,开发编程社交头条 官方网站:www.wenaaa.com 下载问啊APP,参与官方悬赏,赚百元现金。
QQ群290551701 汇集不少互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!