Evernote本身就是很好的笔记应用,其API又赋予了我们更多的自由,值得花点时间尝试。

本文将结合代码和理论,介绍如何使用这些API。

在阅读完成本文后,你将能够完成类似PackMemo的程序。

配置环境

配置Python

本教程使用Python 2.7.11,别的版本如果有什么奇怪的问题可以联系我补进去好了(摊手)

pip install evernote:Evernote的包可以通过pip很容易的安装

pip install requests:为了使用OAuth,需要安装requests包

记得在需要使用这两个包的时候加上import evernote, requests

配置印象笔记开发环境

沙盒环境配置

* 这里配置的沙盒和Token的具体介绍在后面系统结构一节中哦

* 这里配置的三样东西建议拿个小notepad记一下

* 进入沙盒登陆页面创建账户即可

沙盒账户开发者Token获取

* 进入沙盒登陆页面并登陆(网络没问题的话可以忽略这一步)

* 进入沙盒开发者Token获取沙盒开发者Token(记得要复制全哦)

普通账户开发者Token获取

* 进入印象笔记官网并登陆(其实也可以忽略这一步,但下面的网址链接不太稳定)

* 进入印象笔记开发者Token获取开发者Token

进度确认

那么现在你应该已经配置好了所有环境并有一个记录账号的小本本

关于环境,你应该能够在命令行里能够运行并不产生错误提示:

python -c 'from evernote.api.client import EvernoteClient'

python -c 'import requests'

以及记录了沙盒账户及两个开发者Token

系统结构

印象笔记存在两种账户,以及每种账户相同的两种授权方式

授权方式

想要使用印象笔记的API,肯定需要先获得某个账户的授权(授权进入他的笔记,对于我们来说就是授权自己使用啦)

印象笔记的授权方法有两种

* 一种是程序提交某一账户的开发者Token,显示已经被授权,获取授权。

from evernote.api.client import EvernoteClient

devToken = "沙盒或者普通账户的Token"

client = EvernoteClient(token = devToken)

另一种是程序提交账号和密码,用户在特定的网页端确认授权时间,获取授权。

这是一种较为复杂的认证方法,官方在SDK中有给出普通的认证方式

这种方式需要获得需申请的API Key

我这里给出了命令行认证方式(这不是正常的认证方法,也许哪一天就不能用了)

轮子都造好了何必再去造一遍呢,所以有兴趣或者问题的可以邮件联系我

如果认证失败会出现失败提示,所以没有失败这一部分就算完成了

通过这两种方法可以获取一个EvernoteClient类,这是之后一切的开始

值得注意的是,并非所有授权都获得了所有的权限

* 通过OAuth方式获得的普通账户授权,出于安全考虑是受到限制的。

* 受限的方法会在API表中特别提示

后文用到的token变量即开发者Token授权方式的devToken或是OAuth方式获取的token

账户

账户分为两种,分别为沙盒账户与普通账户

沙盒账户只能通过网页登陆

沙盒账户和普通账户的各特殊功能网页的网址之间都有着相同的区别,例如:

数据结构

总体而言,各数据的获取顺序为:UserStore, NoteStore -> Notebook -> Note -> Resource

关于笔记、笔记本的操作全部都是NoteStore类的方法,需要传入指向需要操作的对象的guid

获取Notebook、Note、Resource类用于读取内容与获取其guid

UserStore,用户信息

在获取了EvernoteClient类的变量client后(见系统结构节),很容易的就可以获取UserStore类

这个类里面存储了有关用户信息、授权的内容(其实除了用户信息其他的都暂时用不到)

# 获取类

userStore = client.get_user_store()

# 打印用户名

print('Log in successfully as {}'.format(userStore.getUser().username))

if userStore.getUser().premiumInfo.premium: print('We are friends!')

NoteStore,笔记本仓库

在获取了EvernoteClient类的变量client后(见系统结构节),很容易的就可以获取NoteStore类

所有对笔记本、笔记进行的操作都需要通过该类完成,包括创建、删除笔记、笔记本

# 获取类

noteStore = client.get_note_store()

# 获取笔记本数量

print('There are {} notebooks in your account'.format(len(noteStore.listNotebooks())))

Notebook,笔记本

通过NoteStore类的listNotebooks方法可以获取一个包含所有笔记本的列表

在客户端视图中存在笔记本的嵌套,但实际上数据存储中所有笔记本都在同一层

其下的笔记并不能通过该类的某个属性或者方法获取

具体的属性可以参照这里

# 打印每个笔记本的名字与guid

for notebook in self.noteStore.listNotebooks():

notebookName = notebook.name

notebookGuid = notebook.guid

print('{}: {}'.format(notebookName, notebookGuid))

Note,笔记

获取某一笔记本下的笔记较为复杂

需要先通过NoteFilter类设定一个筛选规则

然后通过NoteStore类的方法获取所有满足这一规则的笔记

其内容(content)是ENML格式的文本

具体的属性可以参照这里

# 列出第一个笔记本中的所有笔记的标题

notebookGuid = noteStore.listNotebooks()[0]

f = NoteStore.NoteFilter()

f.notebookGuid = notebookGuid

for note in noteStore.findNotes(token, f, 0, 999).notes:

print(note.title)

进度确认

目前应当可以通过命令行获取四种主要的数据类型

简单的测试一下:以一定格式输出某一个或某几个特定名字的笔记本中的所有笔记

# 格式为

笔记本1:

笔记1

笔记2

笔记本2:

笔记3

以下为实现代码:

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)为例演示如何阅读官方介绍,以下为官方介绍:

首先,由于其为NoteStore类的方法,所以调用的方式为NoteStore.deleteNote(token, guid)

其次,token为上述的开发者Token或者OAuth获取到的token

再次,从图中第七行可以看出,guid的为GUID of the note to delete,下面是Note的介绍

那么,只要获取到Note,就可以获得guid。

所以,最后一步,根据已经介绍过的印象笔记的数据结构,我们知道如果获取Note

* 通过NoteStore.listNotebooks获取Notebook列表,找到需要的Notebook的guid(和Note的guid不同)

* 通过NoteStore.findNotes设置特定笔记本的NoteFilter,通过NoteStore.findNotes获取Note列表,找到需要的Note

* 调用NoteStore.deleteNote方法即可以生效

以下为代码:

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。

160308

LittleCoder

EOF

pythonpptx库api干果加_使用Python操作Evernote API相关推荐

  1. 使用 Python 操作 Evernote API

    本文作者: 伯乐在线 - LittleCoder .未经作者许可,禁止转载! 欢迎加入伯乐在线作者团队. Evernote本身就是很好的笔记应用,其API又赋予了我们更多的自由,值得花点时间尝试. 本 ...

  2. python电脑怎么打开任务管理器_利用Python调用Windows API,实现任务管理器功能

    任务管理器具体功能有: 1. 列出系统当前所有进程. 2. 列出隶属于该进程的所有线程. 3. 如果进程有窗口,可以显示和隐藏窗口. 4. 强行结束指定进程. 通过Python调用Windows AP ...

  3. pptx库ppt演示 python_详解 Python 操作 PPT 的各种骚操作!

    1.python-pptx模块简介 使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍. 这里提前做一个说明:python操作PPT,最好是我们提前设 ...

  4. python 小说 云_小说python操作PLC

    PLC(Programmable Logic Controller)可编程逻辑控制器,可以理解为一个微型计算机,广泛应用于工业控制中,如楼宇智控.精密机床.汽车电子等等. 随着物联网的兴起,越来越多的 ...

  5. python 三菱plc读写_小说python操作PLC

    PLC(Programmable Logic Controller)可编程逻辑控制器,可以理解为一个微型计算机,广泛应用于工业控制中,如楼宇智控.精密机床.汽车电子等等. 随着物联网的兴起,越来越多的 ...

  6. excel进度条与百分比不符_用Python操作Excel数据

    今天给大家展示一个python操作Excel的小demo,demo的例子比较简单,如果大家有什么建议,欢迎可以直接在函数君的微信后台留言. 首先,我们需要安装python在我们的电脑上. 安装的步骤如 ...

  7. python redis 操作_使用Python操作redis

    在使用python操作redis之前,需要先安装redis库: pip install redis. 创建连接方式: StrictRedis:实现大部分官方命令. Redis:是StrictRedis ...

  8. 操作 mysql 不生成日志_利用Python操作MySQL数据库,以后不懂这些是要被鄙视的!...

    前言 在工作中,我们需要经常对数据库进行操作,比如 Oracle.MySQL.SQL Sever 等,今天我们就学习如何利用Python来操作 MySQL 数据库. 本人环境:Python 3.7.0 ...

  9. python如何收集数据库_利用Python操作mysql数据库

    本文主要讲解如何利用python中的pymysql库来对mysql数据库进行操作 大家在转行项目中也可以加入这一步操作,提高逼格的同时还能简化流程 正文开始: 先看一下最常见的操作:从数据库中sele ...

最新文章

  1. 元气骑士超级科学计算机有什么用,元气骑士:超级科学计算器不只是白武,全面解析它的4种形态!...
  2. Pandas简明教程:九、表的合并、连接、拼接(数据聚合基础)
  3. AMD全球产业链上的“中国环”会有多给力?
  4. 用Silverlight做广告Banner
  5. ESP32-CAM使用过程中可能会遇到的问题
  6. 使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序
  7. sql存储过程----备份数据库
  8. 【转载】计算机操作系统出现死锁的原因
  9. 计算机应用类专业综合知识模拟试题,2015年湖南省对口升学计算机应用类专业综合知识试题(真题)...
  10. python画超长图-利用Python画图,千变万化,各种画图技巧!
  11. android 注册多个服务器,android-根据服务器响应创建多个处理程序并...
  12. Android申请相机权限
  13. mysql.sock连接_解决不能通过mysql.sock连接MySQL问题的办法
  14. vscode连接服务器不用每次都输入密码
  15. 在VS中使用Wind数据终端API的经验(一)
  16. NVR人机界面提示资源不足如何解决
  17. fastJson API 最快的Json和对象转换工具
  18. 物联网技术在智慧电网中的应用-Susie 周
  19. python牛顿迭代法应用_浅谈牛顿迭代法与编程
  20. 谈谈软件测试职业的规划!

热门文章

  1. GB/T 21353漆膜抗藻性测定法
  2. 老司机程序员必备效率工具
  3. python安装 pymssql 异常
  4. python人工智能项目实例-python人工智能项目实战,PDF+源码
  5. 华为手机主页面显示一半_华为手机有47个状态显示图标,网友吐槽:60%类似其他国产厂商...
  6. java命令行运行 package_使用命令行运行Java程序
  7. 函数式编程中的战斗机--elm编写实例(薛定鄂的猫
  8. 公钥生成命令_ECDSA密钥对生成以及在Token中的应用
  9. Linux高并发服务器开发---笔记4(网络编程)
  10. CVE-2018-7900:华为部分型号路由器曝信息泄露漏洞