title: 从Workflowy到印象笔记

toc: true

comment: true

date: 2018-03-17 10:05:54

tags: ["Python", "Workflowy", "Evernote"]

category: ["Craft"]

Workflowy是一个极简风格的大纲写作工具,使用它提供的无限层级缩进和各种快捷键,可以非常方便的理清思路,写出一个好看而实用的大纲。如下图所示。

印象笔记更是家喻户晓,无人不知的跨平台笔记应用。虽然有很多竞争产品在和印象笔记争抢市场,但是印象笔记强大的搜索功能还是牢牢抓住了不少用户。

如果能够把用Workflowy写大纲的便利性,与印象笔记强大的搜索功能结合起来,那岂不是如虎添翼?如下图所示。

EverFlowy就是这样一个小工具。它可以自动把Workflowy上面的条目拉下来再同步到印象笔记中。如果Workflowy有更新,再运行一下这个小工具,它就会同步更新印象笔记上面的内容。Workflowy负责写,印象笔记负责存,各尽其能,各得其所。

工具介绍

Everflowy基于Python 3开发,代码托管在Github中,地址为:https://github.com/kingname/EverFlowy这个小工具在持续开发中,目前可以实现Workflowy单向同步到印象笔记和差异更新。由于印象笔记的Oauth验证方式需要申请才能对正式的账号使用,但它又不会通过这种个人小工具的申请,所以目前暂时使用开发者Token。关于如何申请开通正式账号的开发者Token,在后文会有详细的说明。

安装

首先需要保证电脑中安装了Python 3,否则无法运行这个小工具。代码的依赖关系使用Pipenv来管理,所以需要首先使用pip安装pipenv:

python3 -m pip install pipenv

有了Pipenv以后,使用Git把代码拉到本地再安装依赖:

git clone https://github.com/kingname/EverFlowy.git
cd EverFlowy
pipenv install
pipenv shell

运行了上面的4条命令以后,你的终端窗口应该如下图类似。

Pipenv会自动创建一个基于Virtualenv的虚拟环境,然后把EverFlowy依赖的第三方库自动安装到这个虚拟环境中,再自动激活这个虚拟环境。

配置

在代码的根目录,有一个config.json文件,打开以后如下图所示。

你需要修改三个地方,分别是usernamepassworddev_token。其中usernamepassword分别对应了Workflowy的用户名和密码,而dev_token是印象笔记的开发者Token。

这里需要说明一下印象笔记的开发者Token。印象笔记的开发者Token有两套,分别是沙盒环境的开发者Token和生产环境的开发者Token。所谓沙盒环境,就是一个测试开发环境,这个环境是专门为了快速开发印象笔记App而设计的,它的地址为:https://sandbox.evernote.com。打开这个网址,可以看到页面上弹出了警告,如下图所示。

无论你之前是否有印象笔记的账号,要使用沙盒环境,都必需重新注册。注册完成以后,通过访问https://sandbox.evernote.com/api/DeveloperToken.action获取沙盒环境的开发者Token。

关于印象笔记的沙盒环境,我将另外开一篇文章来说明。本文主要介绍如何申请生产环境的开发者Token,从而可以使用正式的印象笔记账号。

在2017年6月以后,印象笔记关闭了生产环境开发者Token的申请通道,如果打开申请网址:https://app.yinxiang.com/api/DeveloperToken.action,你会发现申请的按钮是灰色的且无法点击。要解决这个问题,就需要让印象笔记的客服帮忙。

登录自己的印象笔记正式账号,打开印象笔记首页,把页面拉到最下面,可以看到有一个“联系我们”,如下图所示。

进入“联系我们”,点击“联系客服”,如下图所示。

在联系客服的页面填写如下信息,最后一项“简要描述问题”填写“我需要基于印象笔记API开发,请帮我开通生产环境开发者Token”并提交。

大约24小时内,就可以受到客服回复的邮件,如下图所示。

此时再次打开https://app.yinxiang.com/api/DeveloperToken.action就可以申请开发者Token了,如下图所示。

需要注意的是,开发者Token只会显示一次,所以你需要立刻把它记录下来。

运行

有了生产环境的开发者Token以后,把它填写到config.json中,配置就算完成了。在终端输入命令:

python3 EverFlowy.py

程序就可以开始同步Workflowy的数据到印象笔记了。

同步完成以后,你会发现程序的根目录出现了一个history.db文件。这是一个sqllite的文件,里面就是你在Workflowy中的所有大纲内容和对应的印象笔记GUID和enml格式的内容。这是为了实现数据的差异更新而生成的。你可以使用各种能够浏览sqllite的工具来查看里面的内容。

已知问题

  • 如果删除了history.db,那么再次运行Everflowy,Workflowy中的所有内容都会再次写入印象笔记。
  • 如果单独删除了EverFlowy写入印象笔记中的某一条目,却不删除history.db中的对应条目,WorkFlowy会因为找不到GUID而抛出异常。
  • 没有测试国际版印象笔记账号是否可用。
  • 如过你想测试沙盒环境的开发者账号,请修改evernote_util/EverNoteUtil.py第98行,把
client = EvernoteClient(token=self.dev_token, sandbox=False, service_host='app.yinxiang.com')

修改为:

client = EvernoteClient(token=self.dev_token)

使用Python从Workflowy同步大纲到印象笔记的更多相关文章

  1. Python 黑帽编程大纲(变化中)

    Python 黑帽编程大纲(预览版) 教程说明: 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Pytho ...

  2. 全国计算机等级考试二级Python语言程序设计考试大纲

    全国计算机等级考试二级Python语言程序设计考试大纲(2018年版) 基本要求 掌握Python语言的基本语法规则. 掌握不少于2个基本的Python标准库. 掌握不少于2个Python第三方库,掌 ...

  3. 孤荷凌寒自学python第四十三天python 的线程同步之Queue对象

     孤荷凌寒自学python第四十三天python的线程同步之Queue对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Queue对象是直接操作队列池的对象,队列中可以存放多种对象,当然也 ...

  4. 孤荷凌寒自学python第四十一天python的线程同步之Event对象

     孤荷凌寒自学python第四十一天python的线程同步之Event对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 鉴于Lock锁与RLock锁均宣告没有完全完成同步文件操作的问题,于 ...

  5. Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)

    Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...

  6. Python:Day28 同步锁

    同步锁: Python不是有一把锁了吗?为什么还要加锁? Python解释器的GIL的作用是同一时刻只有一个线程被CPU执行,而同步锁的作用同一时刻只有一个线程对锁定代码块操作 如果不加锁,当多个线程 ...

  7. python多线程以及同步队列(转)

    转自:http://www.w3cschool.cc/python/python-multithreading.html 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长 ...

  8. python多线程--线程同步

    如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步. 使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire ...

  9. python 多线程中同步的小样例

    #!/usr/bin/python # -*- coding: UTF-8 -*- # 在一个资源池中.获取资源 # Author: zhang # Date: 2015-7-27 import ti ...

随机推荐

  1. 微信开发系列——微信订阅号前端开发利器:WeUI

    前言:年前的两个星期,学习了下微信公众号的开发.后端基本能够基于盛派的第三方sdk能搞定大部分事宜.剩下的就是前端了,关于手机端的浏览器的兼容性,一直是博主的一块心病,因为博主一直专注于bootstr ...

  2. 如何使用 VS2015 进行远程调试?

    VisualStudio\Microsoft Visual Studio 14.0\Common7\IDE\Remote Debugger 直接复制 Remote Debugger 文件,里面包含了 ...

  3. svn版本管理系统出现的问题解决办法

    首先会出现下面的一个提示错误: cannot checkout from svn run 'cleanup' if it was interrupted 百度加谷歌找到的解决问题的办法各种各样,自己遇 ...

  4. shiro整合ehcache

    目标:让Shiro整合ehcache,提供缓存realm数据的功能. 1.引入encache配置文件,配置缓存 <!-- <ehcache xmlns:xsi="http://w ...

  5. ubuntu追加磁盘空间

    在用wubi安装的时候,按默认的是20G空间,明显不够用,从Windows上追加空间 首先用win7自带的磁盘分区工具,从任意一个空余空间较多的磁盘划出一块新分区(无损数据)(如NTFS),作为ubu ...

  6. caffe︱深度学习参数调优杂记+caffe训练时的问题+dropout/batch Normalization

    一.深度学习中常用的调节参数 本节为笔者上课笔记(CDA深度学习实战课程第一期) 1.学习率 步长的选择:你走的距离长短,越短当然不会错过,但是耗时间.步长的选择比较麻烦.步长越小,越容易得到局部最优 ...

  7. phpcmsv9更换模板介绍

    先分享下大概的步骤: 1.上传模版文件到服务器:2.在站点管理 里边[模板风格配置]选择新模板:3.设置不同模型对应模板:4.修改现有的栏目,匹配新模板:5.更新栏目缓存.系统缓存,更新HTML静态页 ...

  8. php session 和cookie

    先简单的说明下session和cookie的区别. 1.session存放在服务器的文件中,或者是内存中.而cookie存在客服端. 2.session比cookie安全 3.session存放在服务 ...

  9. dojo表格分页插件报错

    dojo表格分页插件报错 (1)dojo/parser::parse() error ReferenceError {stack:(...),message:"layout is not d ...

  10. HighCharts之2D柱状图、折线图的组合双轴图

    HighCharts之2D柱状图.折线图的组合双轴图 1.实例源码 DoubleAxis.html: <!DOCTYPE html> <html> <head> & ...