2024-07-20 21:03:00
你好,我是小柒。
Java 程序员,热衷自动化。
前段时间花了 5 天左右,借助 Notion + CloudFlare + Github Actions 零成本搭建了一个支持一键分销的小报童排行榜: https://xiaobot.osguider.com。在这里复盘一下过程,希望能够对你有所启发。
善用 MVP 思维,用最小的成本最快地实现最核心的功能,尽早触达用户,尽早获取反馈,不断迭代,不断升级。
小报童排行榜是一个罗列了(几乎)所有小报童专栏的导航网页。可以帮助你一键分销所有小报童专栏。
我把手上已有的小报童专栏排名数据整理成了一个 Excel 表格,如果你想要自己做一些数据分析,可以通过 osguider
微信我领取。
按照我以往程序员的思维,如果想要做一个小报童排行榜,至少要经历以下步骤:
带着完美主义的思维,最后可能是因为设计配色不满意、可能是因为前端代码没写好,也可能是爬虫做不出来……从而不了了之,前功尽弃。
这件事情,真的需要这么复杂吗?
需求分析需要考虑两个层面:我想做什么?我能做什么?其中:
我想做的事情很简单:把所有小报童专栏汇聚到一个网页,供用户查阅和订阅。
我能做什么主要取决于我能从小报童官方拿到什么样的信息。经过简单的分析,我可以从小报童官方获取到以下信息:
小报童排行榜的核心功能是列举出所有的小报童专栏信息,Notion 数据库可以完美实现这个功能!说干就干!
按照可以从小报童官方获取到的信息搭建 Notion 数据库,这个过程就像是给 Excel 添加多个列字段,非常简单。
这里不再赘述 Notion 的使用,如果你对 Notion 感兴趣,可以通过这几个链接学习。中文用户指南 | Notion Academy | Notion Help Center
一条 Notion 数据库记录长这个样子:
汇总的列表长这个样子:
Notion 极其强大!支持任意的页面嵌套,支持把任意页面发布为公网可以访问的网页,甚至可以给同一个数据库定制不同的视图!
那么依据这个功能,我们实际上已经完成了最简单的 MVP:手动收集小报童专栏信息,并通过 Notion 展示。
小报童排行榜的第一个 MVP 长这个样子:
作为一个程序员、作为一名 RPA 教练,手动录数据多少有点说不过去了吧?
我们来看几个小报童专栏分销链接:
稍加比较就能发现,分销链接由以下几个部分组成:
https://xiaobot.net/
shengcaiyoushu
/ IP10
refer=6f4ecc2b-70e9-4f58-82de-71e5b1f357ee
其中:域名是不变的,分销标识只跟发起分销的用户有关系,所以在收集专栏信息的时候,我们只需要收集小报童专栏 ID 即可。这一个步骤,现在确实是手动收集和录入的。
但在这之后,我们可以通过拼接域名和小报童专栏 ID 得到指定小报童专栏的页面地址。访问专栏页面,可以获取到我们需要的几乎所有信息,通过 RPA/写代码 手段轻松获取(这里我的方案是通过 CloudFlare Workers 调用小报童接口获取数据,再使用 Notion API 写入数据库)。
请适当控制 RPA 运行频率,保护服务器负载。
到这里,内容的自动爬取和更新也搞定了。
Notion 也有缺点。毕竟是海外的产品,国内访问速度非常不稳定,根据我自己的测试,Notion Site 在极端情况下需要 10-20 秒才能加载出来,这个速度用户肯定是无法忍受的。在我的认知体系内,写一个静态页面是比较好的解决方案。
在看过我自己写的丑得不能再丑的 HTML Table 之后,我的设计师伙伴 @Huazi 终于还是忍不住亲自上场了。他负责页面样式,我负责内容填充,完美配合。
技术选型大概是这样的:
至此,第二版小报童排行榜问世:小报童排行榜。
前面的小报童排行榜只能帮助我自己分销所有小报童专栏,分销佣金也只能我自己拿,怎么让别人愿意帮我推广小报童排行榜呢?最简单的方法当然是让利!
通过给别人定制一键分销网页,页面里所有小报童专栏全部改成别人的分销链接。这样别人也可以通过自己的一键分销网页分销小报童专栏获取收益,我收取一定的技术维护费用,各取所需,各享其利。
实现也很简单,增加一个 Notion 数据库记录分销商信息:
通过 Cloudflare Workers 读取 Notion 分销商数据库信息,然后通过 eleventy 渲染子页面并发布即可。这里有几个一键分销页面,可供参考:
当然,现在的小报童排行榜并不完美。
比如现在还不支持分页,比如现在只能用 Ctrl + F
做检索,比如不支持用户自定义要分销的专栏列表。
如果你也觉得有些不爽的地方,欢迎找我聊聊,万分感激。
感谢我的队友 @Huazi,没有他,小报童排行榜不会如此美观,不会如此受人欢迎。
重新认识一下。
你好,我是小柒,微信 osguider
。
Java 程序员,热衷自动化。生财有术 RPA 航海教练(23 年 12 月)。
小报童排行榜 作者,支持一键分销所有小报童专栏,也可以给你定制专属分销链接,欢迎体验。
开源服务指南主理人,依托 Notion 搭建了完整的自动化工作流和图文生成体系,这个后面也会写复盘。
目前实现了:
了解开源服务指南:
做过一个不起眼的导航网站:看见导航 收藏了很多我见过且觉得值得推荐的网页和工具,可能会对你有所帮助。
写过一写 Java 开发工具的使用经验:Intellij IDEA 最佳实践
也欢迎访问我的个人博客:Seven’s blog
2024-06-14 10:09:55
添加数据文件 _data/site.json
,写入以下内容,定义站点信息和 sitemap 中的一些默认值:
1 |
{ |
添加 sitemap 模板文件,写入以下内容:
1 |
--- |
【可选】配置不同页面的 sitemap 表现:
sitemap.ignore: true
即可;sitemap.priority: 0.5
,取值范围 0-1;pagination.addAllPagesToCollections: true
才会在 sitemap.xml
文件中包含每一个分页页面。添加模板文件 src/robots.txt
,写入以下内容:
1 |
--- |
重新编译,over!
2024-04-21 18:09:55
GitHub Actions 可以添加运行参数。我只需要设置 filepath 和 content 两个参数,然后配合 shell 脚本就可以自动生成和提交博文到 GitHub 仓库,进而触发自动构建和发布。
GitHub Actions 提供了 REST API 来触发前面的工作流,这样我就可以通过 HTTP 请求来自动生成和发布博文。
开源服务指南数据库现在是建立在 Notion 上的,Notion 也提供了 REST API 的交互方式。所以我只需要定时扫描 Notion 数据库,获取状态刚变更为 “已发布” 的博文,提取文章内容,通过第 2 步中提到的 REST API 来触发第 1 步中提到的 GitHub Actions 即可自动生成和发布博文。这里我使用了 Cloudflare Workers 实现。
怎么监测 Notion 数据库文章状态变动呢?想要监测状态“变动”,我们需要知道变动前的状态和变动后的状态,进而需要有数据库缓存变动前的状态,能做,但麻烦。所幸,pipedream 帮我们做好了这个事情。它能够监测 Notion 数据库变动,并且触发工作流执行。
所以,最后的工作流程就是:
嗯,云服务挺好用。
置于为什么不直接用 Pipedream 提取参数触发 Github Actions 工作流,个人主观意愿影响比较多:Pipedream 代码编写体验略差,稳定性欠佳,所以在逐步往 Cloudflare Workers 迁移。这个回头细讲。
附录:
1 |
name: Create Post |
1 |
import axios from 'axios'; |
2024-01-02 23:28:13
是指非接触式类电子卡片/标签,包括有ID卡、IC卡和NFC卡以及其它等电子卡/标签。他们主要的区别在于工作频段。
NFC,全称是Near Field Communication,“近距离无线通信”,NFC本质信息双向交换。
NFC和RFID都是基于位置相近的两个物体之间的信号传输,NFC技术增加了点对点(P2P)通信功能,NFC设备彼此寻找对方并建立通信连接。P2P通信的双方设备是对等的,而RFID通信的双方设备是主从关系。
NFC 的工作频率是 13.56Mhz,所以只能读取和模拟 13.56Mhz 的 IC 卡。
全称身份识别卡(Identification Card),低频(频率有125Khz、250 Khz、375 Khz、500 Khz等)。
只能读卡,不可写入、不可存储、不可加密的感应卡,(卡面)含固定的编号,出厂时固化了ID。
特点
卡面上有 10 位或者 8 位数字(卡号)。
安全性
安全性较低,ID 卡不可存储,所以卡片持有者的权限、功能操作要完全依赖于网络系统。
很容易复制
应用
门禁系统、企业工牌
全称集成电路卡(Integrated Circuit Card),也称智能卡(Smart Card)。
可读写数据、容量大、有加密功能、数据记录可靠、使用更方便,如一卡通系统、消费系统等。
网络依赖性
IC 卡可记录用户资料,可脱离网络使用
安全性
IC 卡的加密和反复读些的特性,使其安全性远大于 ID 卡
应用
门禁卡、地铁、校园一卡通。
二代身份证属于 type B 射频 IC 卡。
如果不强调的话CPU卡也是IC卡的一种,是高级版的IC卡,CPU卡有信息处理的功能,优点是存储空间大、读取速度快、支持一卡多用功能等特点 。如果不强调无线的话,电话卡中SIM卡就是典型的CPU卡。
安全性
CPU卡内含有随机数发生器,硬件加密算法等,配合芯片上的OS系统,达到金融级的安全级别,防止重复卡、仿制卡、卡上数据非法修改
应用
金融、保险、交警、政府行业等多个领域,小额支付行业
SIM 卡
2024-01-02 23:28:13
特色 | Canal | mysql_streamer | go-mysql-transfer | Maxwell | Databus | DataX |
---|---|---|---|---|---|---|
开源方 | 阿里巴巴 | Yelp | - | zendesk | 阿里巴巴 | |
开发语言 | Java | Python | Golang | Java | Java | Java |
活跃 | 是 | 否 | 是 | 是 | 否 | 是 |
高可用 | 支持 | 支持 | 支持 | - | 支持 | - |
文档 | 详细 | 还行 | 详细 | 详细 | 详细 | 还行 |
数据源 | Mysql | Mysql | Mysql | Mysql | Mysql Oracle |
MySQL Oracle OceanBase SQLServer PostgreSQL DRDS ALL_RDBMS ODPS OSS OTS Hbase0.94 Hbase1.1 Phoenix4.x Phoenix5.x MongoDB Hive Cassandra TxtFile FTP HDFS TSDB TDengine OpenTSDB |
接收端 | 编码定制 | Kafka等(MQ) | Redis MongoDB Elasticsearch RabbitMQ Kafka RocketMQ HTTP API 后续支持更多 |
stdout Kafka Kinesis Nats Google Cloud Pub/Sub Google Cloud Bigquery RabbitMQ Redis SNS |
编码定制? | MySQL Oracle OceanBase SQLServer PostgreSQL DRDS ALL_RDBMS ODPS OSS OTS Hbase0.94 Hbase1.1 Phoenix4.x Phoenix5.x MongoDB Hive Cassandra TxtFile FTP HDFS TSDB TDengine ADS OCS Elasticsearch |
全量数据初始化 | 不支持 | 支持 | 支持 | 支持(maxwell-bootstrap) | - | 支持 |
数据格式 | 编码定制 | Json(固定格式) | Json(规则配置) 模板语法 Lua脚本 |
Json (固定) | 编码定制? | - |
备注 | 需要写代码定制接受端 | 可扩展性更强,但是上手难度更高 | 数据同步非实时 实际使用配合 datax-web 体验更佳 |
基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
由Java开发,分为服务端和客户端,拥有众多的衍生应用,性能稳定,功能强大;canal 需要自己编写客户端来消费canal解析到的数据。
Databus是一种低延迟变化捕获系统,已成为LinkedIn数据处理管道不可或缺的一部分。Databus解决了可靠捕获,流动和处理主要数据更改的基本要求。Databus提供以下功能:
源与消费者之间的隔离
保证按顺序和至少一次交付具有高可用性
从更改流中的任意时间点开始消耗,包括整个数据的完全引导功能。
分区消费
源一致性保存
上手难度较高。
DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。
配合 DataX-Web 可视化配置任务。
在 Java 中消费 Mysql Binlog。
2024-01-02 23:28:13
activiti 由 Alfresco 软件开发,目前最高版本 activiti 7
。
activiti 有 5、6、7 几个主流版本。其中 5 和 6 的核心 Leader 是 Tijs Rademakers,后来由于内部分歧,Tijs Rademakers 在 2017 年离开团队,创建了 flowable。
现在 activiti 由 Salaboy 团队接管,5 和 6 两个版本已经暂停维护,activiti 7 仍然使用 activiti 6 的内核,并没有开发新的特性。只是在 activiti 上层封装了一些应用。
参考文档: