建立自己的Yahoo Pipes

2021-03-21 06:29:16

自2015年以来,管道已经死了,但我已经使用了很长一段时间了,这对我的日常新闻摄入至关重要,所以我一直在建立个人的替代品,以满足我的特定需求。

问题陈述很简单 - 我希望重建行业特定的RSS新闻饲料的收集我通过瑞德和每天提供的瑞士饲料,并为其添加更多智能智慧(训练课程,启动器,然后是一个策划饲料根据五个或六个主题的相关新闻)。

但是,我想要跟踪的大多数网站或公司都是太大无主或者也是为了烦扰正确的RSS源(或者没有他们想要跟踪的东西)。加(这是新的曲折之一)有些是用德语编写的(我可以阅读,但不是早上咖啡之前),瑞典语,芬兰语,甚至韩国人。

所以就像十十岁以前一样,我正在建立一些自定义刮刀和逻辑,以雕刻敌对网站的一些意义,并以最简单的方式尝试这样做。

我可以再次在Python中写一下,如果我这样做,我最有可能最终有类似的脱钩服务:

作者进程,将结束结果带到中央商店。

一组后端分类器和排名符也将使用PUBSUB跟踪更改并使用其他元数据更新商店。

一个HTTP侦听器,具有只读商店的只读访问,它只需抓住结果并将其呈现为自定义源,以便reder可以通过Feedly获取它们。

但事实证明,这不需要大量可扩展性(我只是计划最多规划追踪数百左右),并且建立和维护变得有点乏味。

所以我再次转向Piku,在15分钟内,我有一个运行的单核VM,并在CloudFlare后面运行的节点红色工作部署,并开始通过它追求管道数据。

我已经一直在几年内使用Node-Red用于家庭自动化(甚至维持自己的跨平台码头图像),并且它真的稳定,但我从未打扰过一半的内置内置为建立应用商店价格刮刀几年后,

我所做的大多数我所做的是MQTT和JSON管道的奇怪混合,其中几个低端的UDP和组播嗅觉,用于处理主页袋和我的机顶盒,所以这次我周围有意识地尝试了更模块化,通用的方法。

此外,我试图尽可能避免使用第三方流量,因为(如NPM生态系统的其余部分),那里有很多过时和破碎的东西。

幸运的是,核心节点有(到目前为止)已经足够了,你可以走很长的路,其中四个:

XML节点可以微不足道地解析RSS和ATOM,并且需要大约5行的JavaScript来抓取结果。

HTML节点可以像A.Tiles__Content - Link H4那样采取类似jQuery的选择器,这意味着它能够切片和骰子大多数网页才能精细(除了水疗区除外,但我才觉得刚刚使用木偶尔才能使用木偶)。

HTTP客户端节点现在可以执行持久连接,并且非常快速地抓住同一Web服务器的多页。

顺便问一下,数据库由SQLite节点提供,当前非常微不足道(Feeds,Item和Topics)提供。这是上面查询的准备好的语句:

选择项目。 URL作为URL,项目。标题为标题,项目。身体作为身体,strftime('%y-%m-%dt%h:%m:%sz',项目。日期,' Unixepoch')作为日期,项目。日期作为pubdate,饲料。 URL作为Feed_URL,Feeds。从Feeds加入项目的Feed_title标题。 feed_id = feeds。 id提供的id。 SLUG = $ SLUS订购PUBDATE DESC限制30;

向发动机推出一些微不足道的东西(如日期格式和列重命名)也是另一种节省时间和增加响应性的方法,因此我可以随时做到。例如,我在Item URL字段上使用唯一的Not Null Inchord Icmore忽略以简化批处理插入处理(以及隐式重复删除),并将全文浏览到SQLite的FTS引擎。

此外,在过去一年左右的某个地方还是节点红色改变了它的UI来管理子流,因此具有可重复使用节点的模块化方法更容易 - 想要一个统一的方式来清理和存储项目?只需在子流中包装函数节点和一个SQLITE节点,您就完成了。筛选器,XML转换等也是如此

构建它们一次,测试它们,将它们添加到调色板中,将它们连接在管道中,然后完成。

所以有些人有待预见并规划它很容易拥有雅虎!像管道一样的经验 - 您只需要使用正确的有效载荷约束和voilá制作正确的子流,您有自己的数据变换调色板。

翻译原来是最简单的部分之一,因为节点 - 红色的HTTP节点也被改动,以删除构建自定义HTTP请求的一些奇怪性。

呼叫Azure认知服务逐渐下来,以构建包含只有三个节点的通用子流(设置请求,执行它和解压缩它),并在API密钥中配置自定义UI窗格以插槽:

这将被格式化为翻译服务的API请求,发送出来,并发送出来:

......符合相同的模式,并从API响应中提取。因此,只要我坚持到所有管道上的相同消息模式,我就可以在任何地方插入。

这意味着建立一个仅限标题的刮刀,非英语饲料现在需要我零分钟,因为我所要做的就是将我的一个自定义节点拖到画布并将其链接到循环通过URL的调度程序。拿来。

在该节点内,这是会发生什么(根据需要做的内容,具体变化):

过滤器,提取器和转换器也是所有自定义子流,所以它的乌龟一直在下。

有几个其他子流用于胶水逻辑,但大多数是关于调度刷新和从数据库中已经中的主题 - 再次提取主题,这是所有一组解耦的“进程”,它们可以很容易地提取和在自己的计算上下文上运行。

如果Node-Red ran在Azure函数上,它将是无服务器低电平频道宾果游戏的海报儿童......

功能节点只能有一个输入,因此在两个输入“完成”并可用于处理时,只有(例如)才有简单的方法。它需要一些习惯于(以及复杂逻辑的一些创意解决方法)。

节点红色仍然令人讨厌地令人讨厌,有时会调试(因为节点有没有输入输入,因此很容易注入准无效的数据,并将其爆发在管道中间的某处)。

除此之外,它非常快,易于维护,非常便宜(感谢Piku,它在同一单核VM上运行,渲染这个网站)。

由于它都是异步,因此取出几十个馈送,从而将它们翻译并将其写入数据库只需要几秒钟,虽然仅在每半小时左右检查结果。 并坐在CloudFlare后面,它甚至可能有几千名用户锤击它,所以我会说它非常适合目的和成本效益。 也许没有像划痕的整个东西一样有趣,但它完全不那么麻烦。