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

山寨了一个 IFTTT

  •  1
     
  •   wuhx · 2017-04-24 07:15:05 +08:00 · 11012 次点击
    这是一个创建于 2764 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 有什么推荐的替代品?
    jwenwang
        8
    jwenwang  
       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
        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
        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   ·   实用小工具   ·   2206 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 01:36 · PVG 09:36 · LAX 17:36 · JFK 20:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.