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. [翻译]编写高性能 .NET 代码 第一章:性能测试与工具 -- 平均值 vs 百分比

    <<返回目录 平均值 vs 百分比 在考虑要性能测试的目标值时,我们需要考虑用什么统计口径.大多数人都会首选平均值,但在大多数情况下,这个正确的,但你也应该适当的考虑百分数.但你有可用性的 ...

  2. FLEX类似谷歌地图拖拽功能

    要实现类似于谷歌地图拖拽功能,可以用s:Scroller标签来实现,代码如下: mxml: <s:Scroller width="100%" height="100 ...

  3. MySQL如何正确查询字段为NULL的字段

    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  4. Flask從入門到入土(二)——請求响应與Flask扩展

    ———————————————————————————————————————————————————————————— 一.程序和請求上下文 Flask從客戶端收到請求時,要讓視圖函數能訪問一些對象 ...

  5. qt Multimedia 模块类如何使用?

    qt 多媒体模块介绍 类名 英文描述 中文描述 QAudioBuffer Represents a collection of audio samples with a specific format ...

  6. 【前端】Vue2全家桶案例《看漫画》之一、添加四个导航页

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_1.html 项目github地址:https://github.com/shamoyuu/ ...

  7. ORACLE透明网关访问SQL Server配置总结

      透明网关概念 ORACLE透明网关(Oracle Transparent Gateway)可以解决ORACLE数据库和非ORACLE数据库交互数据的需求.在一个异构的分布式环境中,通过ORACLE ...

  8. ubuntu10.04 安装配置tftp服务

    tftpd-hpa 是一个功能增强的TFTP服务器.它提供了很多TFTP的增强功能,它已经被移植到大多数的现代UNIX系统. 1.安装 sudo apt-get install tftpd-hpa t ...

  9. 蜻蜓FM 涉嫌诈骗投资人和广告主源代码剖析

    本文主要内容,引用自知乎的这篇文章:如何评价蜻蜓 FM 伪造用户活跃度等数据 感谢"左莫"."任正"等热心正义的网友--左莫,任正的最早的回答猜测已经被蜻蜓FM ...

  10. Java获取某年某月的最后一天

    Java获取某年某月的最后一天 1.设计源码 LastDayOfMonth.java: /** * @Title:LastDayOfMonth.java * @Package:com.you.free ...