近期我家娃进入了频繁疫苗接种期,平均每半个月都需要接种一剂疫苗。每次接种我都会认真核对疫苗本上、疫苗系统里、疫苗上,三者的批次号一致。在此基础上还会去中食药检核对下批次号状态,但是中食药检的官方网站上关于疫苗号的批次状态只有半个月左右一次的一个HTML页面,只能用ctrl+f进行一页一页的搜索,很是麻烦。我又去微信里看了看确实有几个批次号查询的小程序,但大多数据就停留在18年不再向后更新了。作为程序员的我准备亲力亲为自己实现一套

数据采集

数据来源肯定就是中食药检官方网站上,首先分析了下数据页面全部都是HTML静态页面,我使用了Jsoup进行页面的拆分获取。分两步获取页面列表数据,第一步按年获取每月的数据URL,然后将列表URL传入下一步获取明细数据。其实如果只是自己使用只要抓取2018年以后的数据就行了再早的疫苗到现在基本都已经是过期状态了,但为了保证数据的完整性我还是抓取从2007至今的所有数据,并写好了定时任务每天3点去检查是否有新数据出现。保证之后程序会一直有新​的数据。​

​抓取数据后就是做一个REST风格接口,接收疫苗号为后续的小程序查询做准备。截至到这时周末一天已经过完,主要时间就耗在数据抓取上,2016年后的页面数据比较好抓取,再之前的就不好抓了,甚至有的年份部分链接链的不是HTML页而是一个xls表格。

初探小程序

后期的数据查询肯定在手机上使用最方便,但是觉得做APP太麻烦,不如顺便把微信小程序的开发看了。看了一下小程序示例只要你做过vue或react项目就没有学习成本,像网络请求、数据存储小程序也都帮你封装好了。

整体程序分为了三个页面:

  1. 首页面为表单页面,方便输入疫苗的批次号,这里的输入信息支持模糊查询,只要输入大于4位的批次号即可。 index-page
  2. 查询列表页面,因为不同厂商的疫苗可能会使用同一个批次号名。所以这里会列出多份数据。看到你所接种的疫苗或生物制品点击详细。 result
  3. 这里可以看到疫苗/生物制品的详细信息,包括品名、规格、有效期、厂商、批签情况等信息。最后还会有一个copy按钮,点击后会把原始信息的链接复制到剪切板中,可以去中食药检查看原始信息。 result-more

上传后微信的审核还挺快速的当天就过审了,但因为疫苗属于特殊关键字需要使用企业主体才可以注册,个人主体不让使用,最后小程序的名字只能叫《批号验证》。小程序码如下欢迎大家扫码使用:

vaccine

最后

整个项目一共用了两天的时间,不得不承认微信小程序确实把手机上的一些开发变的简单了,甚至初中生就可以开始进行一些简单功能的开发了。另外数据库里实际是所有的生物制品都可以进行批号的验证。

整个项目的源码含Java的SpringBoot+小程序的客户端在这里可以查看参考使用疫苗工具