CloudMonad:组装你的私人互联网
组合这3个模块,可以实现各种有意思的功能,比如:
例1:微信消息Kindle推送
例2:利用搜狗微信搜索监控公众号文章更新并推送到Kindle
例3:微信分享链接推送到RSS源
例4:京东价格变化微信通知
例5:使用FetchUrl实现将任意网站作为输入源
例6:12306车票购买
例7:微信公众号自动发文
例8:利用RestApi Action实现方糖微信通知
例9:针对淘宝商品特定套餐的价格变化监控
这些功能只是CloudMonad的应用示例,它们都是通过一个Serverless的Web应用页面用Json配置生成,新增功能对后端完全透明。
和IFTTT的区别?
IFTTT 是“IF This Then That”的缩写。其目标是利用各种开放的API,将技术复杂性隐藏起来,使每个人都可以成为互联网无需编程的程序员,让整个互联网都可以为我所用。来源
它的成功依赖于国外开放的API环境,通过和Facebook,Twitter,Gmail等帐号绑定即可获得授权实现大量功能。而国内各厂商相对更封闭一点,通过API授权能获取的功能很少,有些甚至根本不提供,这也是IFTTT的国内山寨版没有成形的重要原因。
同时,即使在国外,第三方授权方式在功能上也会相对受限,适用场景比较窄,这很容易理解,没有一家公司会希望用户只需通过第三方服务访问自己。
CloudMonad走的是另外一条途径:通过自动化的浏览器模拟用户行为实现功能,理论上只要用户通过浏览器能完成的功能,CloudMonad的都能提供。
和造数以及 import的区别
相同的地方是都用了爬虫技术,造数和import更接近于传统意义上的爬虫,主要目的是批量获取数据。而CloudMonad更像是一个自动化的浏览器,注重的是浏览过程产生的结果,这个结果可能是搜集到一些数据,也有可能只是浏览过程中产生的一些side effect(如购买了某件商品,发送了一条评论)。
换句话说,造数和import满足的是爬取大量数据然后离线分析的需求,CloudMonad只想满足一个偷懒的用户。
CloudMonad如何应对网站的反爬虫措施
CloudMonad不是爬虫,因而可以用更灵活的方式来处理一些普通爬虫无法处理的验证措施。
我专门为它做了一个名为imhuman的验证码处理模块,可完美处理12306和微信扫码验证。
技术栈和使用到的资源
CloudMonad的前端,后端以及一个Android模块(微信)都是用Scala语言写的。
全栈Scala的最大好处除了复用代码,便于维护,还杜绝了前后端通信时数据结构不一致导致的错误。
CloudMonad在设计之初有一个小目标:要在尽可能低的系统资源下支持高扩展性(Scalable),而爬虫特别是 Headless 浏览器是高资源消耗操作,如何在系统低载时尽可能少的消耗资源,又能应付突发大流量请求是一个难题,最后的解决方案是各种按需付费的云服务。
CloudMonad 用了多种云资源:
包括一个整合了阿里云MNS和亚马逊SQS双备份的 CloudQueue 用于任务分发。
LeanCloud数据库配合阿里云OSS用于前后端通信。
IBM 的openwhisk ,亚马逊的Lambda, DigitalOcean 按需使用的虚拟主机用于动态调整资源。
目前整个 CloudMonad 系统的硬性支出只有一台阿里云最低配虚拟主机,其他资源都是按需使用的,那台阿里云虚拟机上运行着一个Akka node用于协调资源,用户管理等工作,具体的脏活都外包给其他云服务执行。
如何使用
CloudMonad每次执行会消耗一定的CloudPoint,具体数量根据执行时间确定,如Feed花了12秒爬取搜狗微信公众号文章,Action花了9秒推送到Kindle,那么此次运行会扣除你21个CP。
每个用户初始会分配500个CloudPoint,用完后该用户所有的任务都会暂停。如果你碰到这个情况,请通知我,在后台手动给你增加。
你可以在[我的账户]查看你的CloudPoint,同时每个用户有一个唯一的推荐链接,如果你觉得这个服务对你有用的话欢迎用这个链接推荐给你的好友,后台会有记录。
如何调试
CloudMonad会尽可能详细的记录每一次运行的细节。如Feed的执行结果,Spec的判定过程和结果,Action的输入和输出。
如果是爬虫执行类异常,还会提供一个异常发生时的浏览器截图。
额外配置选项:
Cron配置: 用于生成Cron定时器的UI
爬虫配置: 用于个性化爬虫
就像IFTTT创始人Tibbets说的:「我们始终认为人们应该具备一种与生俱来的信念。万事皆在我掌控而并非被万事所囚笼,正是为了贯彻这个信念我们才启动了这个项目。」,这也是我做CloudMonad的初衷,它像你在互联网上的代理,帮你遍历网站,检查更新,执行命令,让互联网变成一个为你服务的大程序。
CloudMonad目前还处于概念验证阶段,如果能吸引足够多的用户,会考虑做一个大的改版,现在还是以功能性为主,有些UI操作不是很用户友好,诸位使用中有什么问题,欢迎反馈。