无需会员导出挖财记账数据

前段时间挖财记账改版,只有会员才能导出数据,而且一个月就要18元(2020/03/19开通时),促使我彻底放弃挖财转向 Bluecoins 才不是因为穷。由于当时急着导出数据,还是开了一个月的会员,然而为了不让它再赚其他人的最后一笔钱,寻找了一下它的数据存储方式,可以手动导出数据,不用再花钱了。

以下内容仅适用于取得 root 权限的 Android 手机

TL; DR

找到 /data/data/com.wacai365/databases/wacai365.so,导出到电脑后使用 SQLite 软件查看里面的数据即可。明细存储在 TBL_TRADEINFO 表中,对应的账户在 TBL_ACCOUNTINFO 表,时间信息是 UNIX 时间戳,分类信息在 TBL_INCOMEMAINTYPEINFOTBL_OUTGOSUBTYPEINFOTBL_OUTGOMAINTYPEINFO 三个表里,根据 UUID 关联一下即可全部导出。

数据库查看

我使用的是 DB Browser for SQLite 软件查看导出的数据库,此软件开源、免费,而且有良好的界面和完整的功能,十分优秀。

打开数据库文件后,可以发现里面共有47个表,然而我需要的只有上面提到的5个表。首先进入 TBL_TRADEINFO 观察一下,很容易发现每列分别是什么。之后分别去其他表观察一下,即可很容易地导出数据了。

数据导出

根据观察到的结果,我们可以将多个表结合,之后输出为 csv 文件,即可自由导入到其它记账软件中。由于不同类型的数据需要关联的表也不一样,因此分为支出、收入、转账三类处理。

下面只导出了时间、金额、帐户、支出大类、支出(收入)小类、备注、账本名称这几部分数据,如需其他数据(如项目、商家等)自行添加联系的表导出即可,原理一样,不再赘述。

支出部分

1
2
3
4
5
6
7
8
SELECT DISTINCT datetime(t.date, 'unixepoch', 'localtime') 时间, t.money*1.0/100 金额, a.name 帐户, o.name 支出大类, os.name 支出小类, t.comment 备注, b.name 账本名称
FROM TBL_TRADEINFO t
INNER JOIN TBL_ACCOUNTINFO a ON t.accountUuid = a.uuid
INNER JOIN TBL_BOOK b ON t.bookUuid = b.uuid
LEFT JOIN TBL_OUTGOSUBTYPEINFO os ON t.typeUuid = os.uuid
LEFT JOIN TBL_OUTGOMAINTYPEINFO o ON os.parentUuid = o.uuid
WHERE t.tradetype = 1
ORDER BY t.date desc;

导出的支出数据

结果如图所示,执行后选择保存结果视图,导出为 csv 即可。

收入部分

1
2
3
4
5
6
7
SELECT DISTINCT datetime(t.date, 'unixepoch', 'localtime') 时间, t.money*1.0/100 金额, a.name 帐户, i.name 收入大类, t.comment 备注, b.name 账本名称
FROM TBL_TRADEINFO t
INNER JOIN TBL_ACCOUNTINFO a ON t.accountUuid = a.uuid
INNER JOIN TBL_BOOK b ON t.bookUuid = b.uuid
LEFT JOIN TBL_INCOMEMAINTYPEINFO i ON t.typeUuid = i.uuid
WHERE t.tradetype = 2
ORDER BY t.date desc;

选择保存结果视图,导出为 csv 即可。

转账部分

1
2
3
4
5
6
7
SELECT DISTINCT datetime(t.date, 'unixepoch', 'localtime') 时间, t.money*1.0/100 金额, a.name 转出帐户, a2.name 转入账户, t.comment 备注, b.name 账本名称
FROM TBL_TRADEINFO t
INNER JOIN TBL_ACCOUNTINFO a ON t.accountUuid = a.uuid
INNER JOIN TBL_ACCOUNTINFO a2 ON t.accountUuid2 = a2.uuid
INNER JOIN TBL_BOOK b ON t.bookUuid = b.uuid
WHERE t.tradetype = 3
ORDER BY t.date desc;

导出的 csv 文件就可以自行处理,导入别的记账软件了,祝使用顺利。