山寨了一个 IFTTT - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
wuhx
V2EX    分享创造

山寨了一个 IFTTT

  •  1
     
  •   wuhx 2017-04-24 07:15:05 +08:00 11603 次点击
    这是一个创建于 3092 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://xun.im/2017/04/23/cloudmonad/

    TLDR;
    CloudMonad 可以这样玩:

    1.发一条微信消息,推送到你的 Kindle 或者一个私有的 Rss 源。

    2. 定时获取京东商品的价格和优惠信息,在满足指定条件后发送一条微信通知消息。

    3. 定时访问 12306 网站查询或购买车票。

    4. 定时登录微信公众号后台发文。
    第 1 条附言    2017-04-25 11:18:05 +08:00
    作为一个 one man 项目, CloudMonad 希望能以云服务的形式提供
    比如一个用例是: V2EX 上经常会看到一些网友写各种网站的自动签到脚本,这些脚本可能花半小时就搞定了,但后续还要找服务器运行,各种管理维护, CloudMonad 就可以一站式解决这个需求。

    IFTTT 的发展困境是主流用户觉得操作太复杂,只能是一个小众产品。
    而相比之下 CloudMonad 的操作会更复杂(面对的是非格式化的 Web , Spec 检测粒度更小等),如何吸引更多用户会是个问题。

    CloudMonad 今后的发展,我能想到的大概有三个方向:
    1. 专注提供一个小众服务,完善 UI ,哪怕只有 IFTTT 0.1%用户也差不多了。
    2. 提供定制 Api 给第三方使用,为每种 Feed 提供一个 Rest 调用接口。
    3. 做成一个类似 App 市场的平台,有定制能力的高级用户,把各种功能配置好,打包成一个一键安装的的应用供小白用户使用,来降低使用门槛。

    诸位有什么建议?
    50 条回复    2017-05-20 08:19:22 +08:00
    ixinshang
        1
    ixinshang  
       2017-04-24 08:40:20 +08:00 via Android
    34 厉害了
    mekhi
        2
    mekhi  
       2017-04-24 09:29:09 +08:00 via iPhone
    把多说评论换了吧
    mawing
        3
    mawing  
       2017-04-24 09:52:40 +08:00
    试用(注册)的链接是 127.0.0.1
    achaocha
        4
    achaocha  
       2017-04-24 09:58:16 +08:00
    试用(注册)的链接是 127.0.0.1
    freeznet
        5
    freeznet  
       2017-04-24 10:03:19 +08:00   1
    wuhx
        6
    wuhx  
    OP
       2017-04-24 10:33:47 +08:00 via Android
    @mawing
    @achaocha 请看 5 楼
    wuhx
        7
    wuhx  
    OP
       2017-04-24 10:34:15 +08:00 via Android
    @mekhi 有什么推荐的替代品?
    42V0CdLjCU494ogF
        8
    42V0CdLjCU494ogF  
       2017-04-24 11:30:13 +08:00
    厉害了
    mekhi
        9
    mekhi  
       2017-04-24 11:36:19 +08:00 via iPhone
    @wuhx 国内的话,可以试试畅言
    gyorou
        10
    gyorou  
       2017-04-24 13:45:34 +08:00
    LZ 造轮子辛苦了。 https://github.com/cantino/huginn
    wuhx
        11
    wuhx  
    OP
       2017-04-24 16:51:06 +08:00   1
    @gyorou 多谢提供这个信息,

    仔细看了一下,这两者有很多不样的地方。

    huginn 还是一个传统爬虫加一些 pipe 函数做数据处理。
    而 CloudMonad 注重的是浏览过程和交互,比如说我要获取 V2EX 分页帖子的所有回复,一般爬虫的做法是以页码为参数自动生成的分页 url 地址分别采集,而 CloudMonad 会去
    下一页那个按钮,然后不停的点击采集,只到最后一页(当然也支持拼 url 的方式)。
    看了一下 huginn 的自定义 Agent 格式,只有 extract 字段,应该不支持任何交互。这样它的采集能里就会很弱,而演示中哪些看上去很酷的图表,
    其实只是最基本的数据处理,完全可以把这两部分分开来么,
    数据采集用「造数」这类专业的爬虫,然后自建一个 Hadoop 之类数据中心,定时把数据丢进去分析,专业性和稳定性瞬间就提升一个档次了。

    另外,CloudMonad 在设计之初有一个小目标:要在尽可能低的系统资源下支持高扩展性(Scalable),而爬虫特别是 Headless 浏览器是高资源消耗操作,
    如何在系统低载时尽可能少的消耗资源,又能应付突发大流量请求是一个难题。最后的解决方案是各种按需付费的云服务。
    CloudMonad 用了多种云资源,
    包括一个整合了阿里云 MNS 和亚马逊 SQS 双备份的 CloudQueue 用于任务分发。
    LeanCloud 数据库配合阿里云 OSS 用于前后端通信。
    IBM 的 openwhisk ,亚马逊的 Lambda , DigitalOcean 按需使用的虚拟主机用于动态调整资源。
    目前整个 CloudMonad 系统的硬性支出只有一台阿里云最低配虚拟主机,其他资源都是按需使用的,目前还都在免费额度内(当然,用户少:()
    那台阿里云虚拟机上运行着一个 Akka node 用于协调资源,用户管理等工作,具体的脏活都时候外包给其他云服务做。

    说回 huginn ,它似乎更像一个传统的单机版应用,需要安装 mysql 数据库,对系统要求也很高。
    github 首页还挂着一个一年前的内存泄漏 issue ,系统的水平扩展会很成问题
    fhefh
        span class="no">12
    fhefh  
       2017-04-24 17:25:29 +08:00
    厉害 mark
    mingyun
        13
    mingyun  
       2017-04-24 23:01:02 +08:00
    厉害了
    gyorou
        14
    gyorou  
       2017-04-25 08:59:19 +08:00
    @wuhx
    首先能造出这么一个轮子的确很厉害。
    不过我还是为 huggin 更正一下。 huggin 可以自己定制 Agent gem ,所以所谓的模拟用户行为之类的是完全没有问题的。
    CloudMonad 用了多种云资源, 而 huggin 只是一个传统 Rails 应用加 Sidekiq 的任务管理而已,用 docker-compose 就可以快速起来,安装在任何可以跑 docker 的主机上完全没有问题。整个过程不用超过 5 分钟。比起要使用各种云服务,一台简单的 VPS 即可。
    wuhx
        15
    wuhx  
    OP
       2017-04-25 11:09:18 +08:00
    @gyorou 是的, docker 是部署应用程序的神器。 openwhisk 其实就是一个即销即用的 Docker 镜像。
    Comdex
        16
    Comdex  
       2017-04-25 18:16:57 +08:00
    楼主,我想请教一下,就比如那个京东商品价格监控的,是使用 cron 定时执行,定时任务多时怎么优化
    Comdex
        17
    Comdex  
       2017-04-25 18:17:37 +08:00
    还有有没办法实现秒级监控且能合理控制服务器资源
    wuhx
        18
    wuhx  
    OP
       2017-04-25 18:40:34 +08:00
    @Comdex CloudMonad 用的定时器就是秒级定时的,但后台有限制, 5 分钟之内最多执行一次。
    wuhx
        19
    wuhx  
    OP
       2017-05-02 07:58:59 +08:00
    mosliu
        20
    mosliu  
       2017-05-03 08:09:46 +08:00
    @wuhx 赞一个 设了一个自动刷微信运动步数的试试看。
    evin
        21
    evin  
       2017-05-04 09:06:29 +08:00
    注册需要邀请码。。。
    wuhx
        22
    wuhx  
    OP
       2017-05-04 16:50:18 +08:00
    @evin 邀请码是可选的,目前开放注册中

    @mosliu 并没有这个功能
    mosliu
        23
    mosliu  
       2017-05-05 08:12:02 +08:00
    @wuhx 调用自己的服务 = =!
    GrahamCloud
        24
    GrahamCloud  
       2017-05-05 11:19:25 +08:00
    这里是 造数的开发团队,很多启发, 求联系 @wuhx,微信:Zaoshuio
    bestrenxs
        25
    bestrenxs  
       2017-05-05 11:47:01 +08:00
    思路很好,学习了!
    wuhx
        26
    wuhx  
    OP
       2017-05-05 16:26:09 +08:00
    @mosliu 特别需要你这样的用户 :)

    @GrahamCloud 已加

    @bestrenxs 谢谢
    mosliu
        27
    mosliu  
       2017-05-05 16:41:09 +08:00
    @wuhx feed 现在不支持是 Api 啊。。
    wuhx
        28
    wuhx  
    OP
       2017-05-05 17:44:36 +08:00
    @mosliu 如果你的服务支持 Rest Api,可以用 RestAction 触发调用,参考调用方糖发送微信消息那个例子。
    johnnie502
        29
    johnnie502  
       2017-05-09 03:33:39 +08:00
    可否加上 telegram bot 的支持?
    wuhx
        30
    wuhx  
    OP
       2017-05-09 13:48:30 +08:00
    @johnnie502
    Telegram 提供了 Rest Api 接口,所以 CloudMonad 是直接支持的,
    请参考: http://xun.im/2017/04/23/example-rest-api/

    测试用 telegram bot 发送京东降价通知,完全没问题,感觉 Telegram 比微信这种封闭环境对程序员友好多了,可惜被墙,使用不太方便。

    telegram 的 Api 类似于:
    GET https://api.telegram.org/bot372908708:AAElXimm0on8TRnjzZK0Hf313C97XgW3_WM/sendMessage?chat_id=391625028&text=降价通知 {商品} {价格}

    chat_id 是你的帐号 id,botkey 是我建的测试机器人的,你可以自己建一个
    提交前请在本地用 curl 测试一下。

    [CloudMonad 测试机器人]( https://telegram.me/cloudmonad_bot)
    johnnie502
        31
    johnnie502  
       2017-05-09 22:27:44 +08:00
    @wuhx 谢谢测试!这些 API 我也测试过(用 curl ),很好用。希望 cloudmonad 能有个用户友好的前端支持,这个才是您的服务的主要含金量所在吧
    johnnie502
        32
    johnnie502  
       2017-05-09 22:29:06 +08:00
    @wuhx 被墙的话在外国主机用 nginx 做个反代就行了,看你网站是用了国外 VPS 的
    wuhx
        33
    wuhx  
    OP
       2017-05-09 22:50:22 +08:00
    @johnnie502 是的,CloudMonad 的 UI 易用性有待加强,但这里的问题主要是没有针对 Telgram 设计 UI,走的是通用的 RestApi Action。

    另外,CloudMonad 的主要优势是用户可以将 Feed,Spec,Action 自由组合
    比如 Feed 用了京东价格监控, 就可以用 {商品} {价格} 的形式,把动态获取的价格信息发给用户(可以用 Telegram,也可以用微信等其他方式)
    johnnie502
        34
    johnnie502  
       2017-05-09 23:35:16 +08:00
    @wuhx 我人在国外,所以对京东价格监测这些不是很敏感。如果要扩展海外用户的话(看到了英文版),可以也做做亚马逊之类的价格监控,应该能吸引一些用户。
    wuhx
        35
    wuhx  
    OP
       2017-05-10 08:21:31 +08:00
    @johnnie502
    京东只是一个例子,亚马逊可以通过 FetchUrl Feed 支持

    参考
    [例 5:使用 FetchUrl 实现将任意网站作为输入源]( http://xun.im/2017/04/23/example-fetch-url/)

    在参数绑定界面,把 url 换成你想监控的商品:如
    https://www.amazon.com/Sony-VPLVW365ES-Native-Theater-Projector/dp/B016IL60LM/

    content 换成
    #priceblock_ourprice

    即能实现定时监控亚马逊价格,配合 Telegram 或其他方式通知。

    当然这样的操作对用户不够友好,最终版本会考虑用鼠标点击选取目标的形式。
    Damaidaner
        36
    Damaidaner  
       2017-05-10 09:54:09 +08:00
    LZ 厉害了, 马克一下
    jijifly
        37
    jijifly  
       2017-05-10 21:02:13 +08:00
    楼主想请教一下,此类产品如何突破网站爬虫限制频率?
    比如有很多个用户关注了不同商品的京东价格,最终结果可能是每秒钟爬取 N 次京东的数据,势必会引来京东的 IP 封锁,楼主是如何处理的呢? @wuhx
    wuhx
        38
    wuhx  
    OP
       2017-05-10 21:45:22 +08:00   1
    @jijifly 首先爬虫是分布式的,同一个 IP 不会用每秒 N 次这么高的频率访问同一个网站
    其次,后台在调度的时候也会考虑将相同目标网站的请求分散开来,或者也可以自建或购买 IP 代理池。

    另外,CloudMonad 的爬虫是用户自己定制的,用户在创建的时候,可以指定专门的代理地址,Cookie 等,会比普通爬虫更难检测。
    wujunze
        39
    wujunze  
       2017-05-11 16:22:19 +08:00
    不错
    kenshinji
    &bsp;   40
    kenshinji  
       2017-05-12 13:42:56 +08:00 via iPhone
    码一个
    wuhx
        41
    wuhx  
    OP
       2017-05-12 21:47:58 +08:00
    新增一个栗子
    [利用 CloudMonad 从微信发送消息到钉钉]( https://zhuanlan.zhihu.com/p/26876277)

    另外根据每个 Feed/Action 的稳定性,新增了[版本周期]说明,比如微信消息接收 Feed 相对稳定其状态为 Stable,微信消息发送 Action 在系统并发量多的时候偶尔会丢失消息状态为 Experimental。

    请在试用的时候,尽量选择 Stable 的例子。
    ideacco
        42
    ideacco  
       2017-05-15 12:42:31 +08:00
    希望能增加硬件支持,我倒是觉得硬件这块儿发展空间巨大。物联网一定会到的。
    Vkin
        43
    Vkin  
       2017-05-16 12:00:37 +08:00
    监控京东价格,有变化自动发送到 qq ?
    xuwenhao
        44
    xuwenhao  
       2017-05-16 18:57:55 +08:00
    @ideacco 非常同意,如果楼主决定拿这个创业的话,考虑个人投点小钱 :-)
    lada04
        45
    lada04  
       2017-05-17 06:34:06 +08:00
    没找到,在哪里修改 已创建好的任务
    wuhx
        46
    wuhx  
    OP
       2017-05-18 23:33:41 +08:00
    @ideacco
    是的,万物互联,想想都激动
    后续可以提供一些 Iot 类型的 Feed
    或者定义一个物联网网关,通用 Restful Api 和 CloudMonad 集成。
    wuhx
        47
    wuhx  
    OP
       2017-05-18 23:34:56 +08:00
    @Vkin
    目前不支持 QQ,你可以自己包装一个发送 QQ 消息的 RestApi,然后参考 方糖 /Telegram/钉钉 的例子和 CloudMonad 集成。
    wuhx
        48
    wuhx  
    OP
       2017-05-18 23:35:36 +08:00
    @xuwenhao 非常感谢
    wuhx
        49
    wuhx  
    OP
       2017-05-18 23:36:22 +08:00
    duhai973
        50
    duhai973  
       2017-05-20 08:19:22 +08:00
    fetchurl 感觉有点弱啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3683 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 10:21 PVG 18:21 LAX 03:21 JFK 06:21
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86