最近去了几次共享自习室,也萌生了开共享自习室的想法,但是现在自习室也比较多,不知道开起来后到底怎么样,于是就想对现有的自习室每天的使用情况做一个统计,这个项目就是对几个自习室的一些数据爬取任务

流程

  1. 从各自的小程序中获取座位预订情况
  2. 清洗数据,获取需要的数据
  3. 存数据
  4. 定时自动执行 1 - 3 步
  5. 分析数据

展开说说

数据爬取

爬取很简单,通过 Charles 对小程序进行抓包,然后找到相应的接口,然后在服务器端发送 http 请求,模拟用户操作。

数据存储

拿到数据后过滤掉不需要的数据,这里只是需要 当前使用人数 和 使用人数的占比,接下来就是存储。
这里选用了 Maptable 作为存储介质,Maptable 是新一代的空间数据协同工具,包括表格工具、地图工具和数据市场。其中表格工具提供了 OpenAPI 的能力,支持通过调用接口的形式将自己的数据动态的添加到表格中。

Maptable 官方示例使用的 Python 代码,而我比较擅长 TypeScript, 所以就用 TypeScript 封装一套 Nodejs 版本的 OpenAPI - maptable-nodejs-sdk, 让使用起来更加的方便。

import Maptable from 'maptable-nodejs-sdk'

const appId = process.env.APP_ID
const appSecret = process.env.APP_SECRET
const maptable = new Maptable(appId, appSecret)

async function example() {
  const workspaces = await maptable.getAllWorkspaces()
  console.log(workspaces)
}

image

在线访问地址:https://maptable.com/s/t/cgtsugc89m2o

定时任务

一开始想用 later 来做 schedule, 任务执行就放到 github 的 Action 中去执行,后面想到 Action 也支持定时任务的,所以就去掉了 later, 直接改用 github 的 Action 提供的定时任务。

on:
  schedule:
    - cron: '0,30 * * * *'

数据分析

Maptable 是一个非常优秀的数据分析工具,不仅提供了数据表和地图功能,还提供了仪表盘(Dashboard) 功能,支持用户选择任意数据表中的任意字段,通过可视化图表的形式进行展示

one自习折线图

在线访问地址:https://maptable.com/s/d/cgtytdv9bwu8

总结

这几天对 Maptable 体验下来, 整体感觉挺好的,在封装 SDK 的过程中虽然遇到了不少问题,偶尔也会对 API 的设计合理性不认同,但是整体还可以,通过 SDK 的封装已经抹平了很多使用上的屏障,已经达到我个人满意的样子。
对于跟我有类似使用场景的朋友希望能提供一些思路。