SaturdayClub

SaturdayClub

利用[GoogleKeep]做[现实提示词]

2021-11-16
利用[GoogleKeep]做[现实提示词]

起源

入手galaxy watch 4后一直在试探智能手表到底能做些什么,什么样的工具形式才是比较理想的状态。在我的理解里——抬腕、阅读、交互,这整个使用流程并不那么符合人类的操作习惯,缺少抓握这个肢体动作并没有一个强有力的操作开始的暗示,因此智能手表在我的定义里只能是辅助设备,不能成为一种高频、高沉浸的使用工具。

与其他设备的互通,承接数据记录、中转,用以填充一些低频使用场景的需求,这就成了我使用智能手表的目标,此外这种比较明确的使用边界我很喜欢,相对智能手机来说,工具和人的主次位置更加清晰明了。

galaxy watch 4采用定制化的wear os3,利用google play有很多应用拓展选项(当然也没那么多),自己瞎折腾的话也可能额外装一些有的没的内容,比如腕上bilibili,网易云音乐,节拍器等等,但碍于生态的缺陷,可玩性并没有想象的高,在手表上装一个视频应用对我来说实在匪夷所思,当然能在手表上看番谁都得兴奋一下!

说回来,生态的缺陷并没有特别让我体验到智能手表能有的一些辅助功能,本身我对它的使用场景还仅处于一种较为模糊的概念层面,除了健康数据监控,很难说有什么更多的实际想法落地了。如何和手机互通,还有哪些低频、可分离的使用场景?在我装上了google keep之后,一个把打卡这个低频的使用操作分离的想法出现了。


打什么卡?

wear os中keep可以与手机的keep互通有无,在keep设置好目标选项之后,可以在wear os里进行勾选,同时因为网页端的支持,只要有网,可以说三端的数据互通体验十分优秀。可惜的是,我并不用keep做日程规划之类的,办公场景中使用notion做一些简单的甘特度已经能满足我的需求。如果这么好的数据互通体验不用岂不是可惜了?

再细想一些打卡的使用场景,无非是目标的设定和达成目标的【打卡】记录,其实wear os上也可以找到一些应用设置一些目标然后进行每日打卡,甚至galaxy watch本身就有喝水记录之类的,但是吧,这些我都不用啊,不能说你有,我就要用,那我多没面子?于是乎本着定制化才是最终的完美产品的思想,我决定在keep的基础上弄一些有趣的东西,起源于之前我看到清明梦的相关内容——每天设定不同的关键词,当遇到关键词相关内容后反问自己是不是在做梦。记不清具体叫什么了,就简称“现实提示词”吧。

所以需求很简单,在keep里每日生成随机词,在手表里打卡,完美。因为keep本身就有良好的数据互动,那么问题就在于怎么在keep里每天生成随机词呢?

起初我打算用自己老旧的Pixle 2xl和Tasker完成一整套流程,但奈何Tasker压根没学好,用起来太麻烦了,也没找到能直接上传内容的active,只能放弃;转而投向web api,寻找官方api未果,但发现了个第三方google keep api库——gkeepapi,用我拉胯的python技能也能完美实现,bingo!


gkeepapi

github:https://github.com/kiwiz/gkeepapi

Docs:https://gkeepapi.readthedocs.io/en/latest/

gkeepapi使用起来极其简单,装个包,对着示例代码简单改一些,前后三、五分钟完成。因为我只用上传新的内容,也不涉及对内容的操作,真个代码简单至极,如下:

这里可能会抛出错误:gkeepapi.exception.LoginException: ('NeedsBrowser', 'To access your account, you must sign in on the web. Touch Next to start browser sign-in.')

主要是Google账密登录的机制问题,可以去账号设置( https://accounts.google.com/b/0/DisplayUnlockCaptcha )里开启二次验证,然后启用应用密码,将这里的password换掉即可。

window10上跑通,wear os 成功获得内容:


部署上服务器

打开Xshell,装上python3.7+和pip,装上gkeepapi库,运行!

嗯?怎么半天没反应呢?不对啊,然后意识到:靠,腾讯云连不上Google!转而换用来挂梯子的VPS,运行!

结果报错:ValueError: Timeout value connect was Timeout(connect=None, read=None, total=None), but it must be an int, float or None.

貌似是gkeepapi依赖requests库的版本问题,解决方案:

1
pip uninstall docker-compose, pip uninstall requests
1
pip install docker, pip install docker-compose

(卸了重装,万事大吉!)

再来!

结果是个匪夷所思的问题了:

gkeepapi.exception.LoginException: ('BadAuthentication', None)

看了github的issues反馈,遇到的人不在少数,有说要更新python版本的,有说因为linux环境的问题,总之稀里糊涂就是过不了登录这一环节。

前后淌了很多坑,最容易解决的办法是根据官方文档的登录缓存,从window上直接生成个token,然后利用token验证即可(反正linux上能用了,能保持几天我还没测试):

获取token,然后打印出来,再反手印在代码里,把login换成resume,启动!完美通过!


定时发送

定时就很简单了,Linux下利用crontab分分钟的事情:

1
2
3
sudo vim /etc/crontab
#在文档中加入
00 0 * * * root python3.8 /home/gkeep.py > home/log/auto.log

这里基本格式为:

1
2
* * * * * user command
分 时 日 月 周 用户 命令

00 0 就代表了每天0:00运行一次,因为VPS使用时区为UTC,滞后北京时间8小时,所以实际为每天8:00运行一次。


后记

目前来看使用中问题不大,但是嘛,也没多大的意义,一方面提示词在早上看完后就忘了=-=,另一方面keep在galaxy watch上不能直接以卡片的形式存在,每次都要进入应用后,选择文档再勾选,流程上让我深深怀疑自己,我的预期应该是把最新生成的内容作为卡片直接放在一级栏目里,果然定制化才是永远的神!