2.0.0 • Published 7 years ago
easybx v2.0.0
easybx
简化报销流程,指定报销周期,根据钉钉打卡记录获取加班日数据,爬取支付宝获取加班日支付宝消费数据,并生成账单
其实现原理可分为以下步骤:
- 根据钉钉打卡表获取加班日期数据
- 爬取支付宝账单,需设置账单起始日期、单日账单时间区间以及账单价格区间
- 根据 1、2 两步骤获取的结果,筛选加班日指定账单时间区间以及账单价格区间的消费数据,并分析得到加班日消费数据
- 数据需要肉眼查别是否是你需要的数据
Install
$ npm install easybxUsage
项目根目录下创建 bx.config.js 文件,该文件需要导出一个配置对象:
module.exports = {
startDate: '2018-11-11',
endDate: '2018-12-12',
excels: [],
ddkqOptions: {},
zfbzdOptions: {},
sorting: 'desc'
}一次性运行:
const { gBx } = require('easybx')
;(async function() {
let data = await gBx()
})()程序更加可控的分阶段运行:
const { gExcel, gAlipay, gGenerate } = require('easybx')
;(async function() {
const overtime_data = gExcel()
const cost_data = await gAlipay()
const data = gGenerate(overtime_data, cost_data)
})()bx.config.js 配置项
startDate
必填
此次报销周期开始时间,格式 yyyy-mm-dd
endDate
必填
此次报销周期结束时间,格式 yyyy-mm-dd
excels
必填
即 ddqk.getTimeOver 的 excels 选项配置,具体说明可以看 这里
excels 打卡时间应包含报销周期,即 [startDate, endDate] 的日期是 excels 日期数组的子集
ddkqOptions
选填
即 ddqk.getTimeOver API 的 config 选项配置,具体配置项可以看 这里,以及对于 getTimeOver 的一个 额外的配置项
zfbzdOptions
必填
即 zfbzd 的配置项
几个需要的配置说明:
zfbzdOptions{Object}startDate{String}这里无需配置,自动使用bx.config.js中的startDate项endDate{String}这里无需配置,自动使用bx.config.js中的endDate项billStartTime{String}必填,单天账单报销开始区间(即会抓取该时间开始到 24:00 的账单)格式hh:mm(默认报销结束时间24:00,不需要手动设置)maxAmount{Number}必填,报销价格区间上限,即会抓取[-Infinity, maxAmount]价格区间的账单,即假设晚饭最低消费 maxAmount
sorting
选填
sorting{String}可设置加班日消费数据(即cost_data_overtime数据)返回顺序'desc'默认值,默认时间倒序返回,生成的 HTML 也是根据时间倒序排列'asc'正序返回
API
gExcel
根据 bx.config.js 配置,获取加班日数据,即获取 [startDate, endDate] 中的加班日数据
- return:
{Array<Object>}
返回数据格式同 ddkq
gAlipay
根据 bx.config.js 配置,获取指定时间区间、指定单日时间区间、指定价格区间的账单信息
- return:
<Promise<Array<Object>>>
返回数据格式同 zfbzd
gGenerate(overtime_data, cost_data)
根据加班日数据和支付宝消费数据,分析得到加班日消费数据、没消费数据的加班日数组、有重复消费数据的加班日数组以及加班日消费清单的 HTML 字符串
overtime_data{Array<Object>}加班数据,即gExcel的返回值cost_data{Array<Object>}消费数据,即gAlipay返回值- return:
{Object}cost_data_overtime{Array}加班日消费数据overtime_data_no_cost{Array}没消费数据的加班日数组overtime_data_repeat_cost{Array}有重复消费数据的加班日数组html{String}加班日消费清单的 HTML 字符串
gBx
综合了 gExcel、gAlipay 以及 gGenerate
- return:
<Promise<Object>>
返回数据格式同 gGenerate API
最佳实践
根据我自己的使用经验,整理了一套用于报销的 最佳实践,可直接拿来使用
需要修改的部分为:
excels最佳实践建议放在根目录下,数组值和 excel 文件名一一对应,格式yyyy-mm- 修改
startDate和endDate,即该次报销区间(注意报销区间应该是excels时间区间的子集) - 修改
zfbzdOptions.billStartTime,默认返回全部时间段账单,修改该值可以缩小返回账单时间段,我将其设置为 16:00,即假设晚饭的消费时间不会早于 16:00 - 修改
zfbzdOptions.maxAmount,设置账单价格区间上限,默认会返回全部价格的账单。我将其设置为 -8,即假设晚饭的消费不会少于 8 块
That's easy! 其他使用最佳实践提供的默认值即可
最后运行 run.js 即可
局限性
- 可能有加班日但是并没有获取到消费信息,程序会在控制台打印这些日期
- 可能在加班日会有重复消费,程序会在控制台打印这些日期
- 有些加班日的消费数据可能并不是你需要的数据,需要手动判断
- 无法解决第二天凌晨才点晚饭的情况,因为账单只会筛选当天
thanks to puppeteer
License
MIT