CaptainChen

自己开发Alfred Workflow提高效率

凭借Workflow强大的功能,Alfred可谓坐稳了其在Mac系电脑的王牌应用宝座。然而,只是下载第三方开发者贡献的自定义Workflow,而不会利用自己的编程技能去解决自己日常使用电脑中的“痛点”需求,注定只能成为工具的依赖者。努力发掘工具的潜力,用技能提高工作和生活效率,而不是在众多同类工具中犯选择恐惧症,才能摆脱工具的被动使用者的地位。

由于专业特性和个人兴趣爱好,翻墙成了我了必备需求。长期以来,我都是使用自定义Surge配置文件,规定哪些链接走国内直连,哪些链接走shadowsocks,确保全网的无缝完美体验。同时对VPS的稳定性和速度具有极高的要求。约半年前,我就放弃了自购VPS搭建SS,而是选择购买第三方SS。一方面,第三方SS一般为CN2线路,节点更多,在延迟和速度上也都优于自搭SS,另一方面,第三方SS在价格上也更亲和。

我购买的优越加速这家SS供应商,节点30+个,然而由于多人使用,有些节点在月底前就流量超了,是哪些节点呢?;高峰时段,可能自己正在使用的节点他人在进行大流量业务,造成速度缓慢,该切换哪一个呢?;服务器信息经常变动,而Surge配置麻烦,总不能手动找出变化的然后繁琐地修改吧。每次都要打开层层嵌套的网页,再进行操作,实在是懒得做!

既然懒,不如自己动手解决。

这两天,钻研一番功夫后,第一次自己编程实现了一个Alfred Workflow,完美解决自己的各项痛点需求。

以下是该Workflow效果展示:

  • 第一次使用,输入yyset录入自己在优越加速的用户信息。

  • gofree关键词获取相关所有节点信息。

第一行返回套餐使用情况。第二行之后为所有节点信息(图中IP均打上了汉字马赛克)。光标移动到任一行,按下cmd回车弹出对应节点的SSR图像,按下option回车弹出对应节点的SS图像。

每一行的节点主标题还显示了流量的计费倍数(如2T是指按实际两倍流量计费),同时若出现流量超了的情况,也会在后面显著提示。

并且,该请求建立了缓存机制,前后两次请求若不超过10分钟,返回的是上一次的缓存信息,减少爬虫的使用次数。

  • gofree ping关键词后取节点ping值排序。

(看这些节点都多”优秀”~)同样支持对应节点SSR/SS二维码的弹出。

  • gofree surge获取surge节点配置信息。

点击fn将复制[Proxy Group]指定格式的主机名到剪贴板,点击ctrl将复制[Proxy]指定格式的节点信息到剪贴板,方便直接粘贴到自己的surge conf文件中。

  • gofree update检测Workflow更新。

我将Workflow托管在Github,并配置了自动更新。默认每隔1天自动检查是否有新版本,若有,弹出提示更新。另外,也可用gofree update手动检查更新。

看,是不是很高效很完美地解决自己的痛点需求?

该Workflow完全由Python实现,涉及了方方面面的知识,在实现的过程中自己的代码能力也得到了一定提高。

其整体结构框架如下图:

首先,主要用了Alfred-Workflow包实现Python和Workflow的通讯,由该包接管Alfred的条目列举,剪切板复制,通知信息等相关操作。

然后获取节点信息,是用requests库来实现爬虫,模拟登陆和页面点击,然后对返回的HTML文件用正则表达式筛选、组合所需信息,比如节点IP,流量剩余,Surge配置文件合成等。

对于Ping值排序操作,是调用了commands库执行shell指令,对返回的信息,用正则表达式筛选,然后Python多进程执行ping。(由于第一次使用Python的多线程/多进程,中间还遇到了不少坑)。

至于SS/SSR二维码的生成,调用了qrcode库。这里有两个坑,第一是调用该库时有一个error_correction可选参数,用默认值生成的SSR图像,用手机客户端扫描时识别不出来,得手动调整该参数;第二是生成的图像我原想用pillow打开,结果发现,点击关闭图像后,程序过了数十秒才能退出,只好先存储图像再调用预览打开。

而自动更新,其实就是将本地的version文件中的版本号与远端Github release界面的版本号tag进行比对,若有更新,则自动下载新的release文件。

另外,还做了报错的智能提示,且将必要的库和依赖全部封装进Workflow文件,这样用户开箱即用,无需配置环境了。

嗯,确实做了不少了工作。在实现该Workflow的过程中,看了很多其他Workflow的源码。相较之下,我这个Workflow在复杂性上远远超过大部分的Workflow。确实整个流程下来,挺复杂的。

Talk is cheap, show me the code.

好了,全部的代码已在Github开源,有需要的可前去下载~

==Workflow下载地址==

==Github Repo==

觉得文章不错,就赏我一杯咖啡钱吧~