在上一节我们说了如何导出微信沙盒目录,这一节我们来看看沙盒里面存储的公众号数据。
这里我们主要来看看
AppDomain-com.tencent.xin
目录。数据库查看我们用 DB Browser for SQLite
Documents目录
如上图所示,我们可以看到有一个32个0组成的一个文件夹。下面紧接着也有一个32个字符串的文件夹。我猜想,这应该是每个用户的文件夹,用来存储当前用户的一些数据。经测验,命名方式目测是用唯一的微信号进行MD5值来进行。而当用户登录时,创建当前用户目录,并将初始文件夹内的资料复制到当前用户目录下。我们重点来看看当前用户目录下的资料。
Documents目录
我们来看看Brand目录下的BrandMsg.db
,因数据库没有加密可以直接打开。这里一般存的是公众号相关的信息。
我们可以看到有87张表和215个索引。
87张表
87张表除去一个用来记录当前最大自增id的sqlite_sequence
,其他表都是有一个附表存在,表名依旧是chat_(公众号userName的MD5码)。也就是说每个公众号有一个表存储他们推送过来的订阅消息。我们来看看建表语句(随意一个,我找了Cocoa开发者社区的.userName: gh_d9c2fdea6f2a
MD5(userName):1a26fd6c1f0dac7cf220cd58c7e59574
)
CREATE TABLE Chat_1a26fd6c1f0dac7cf220cd58c7e59574(
CreateTime INTEGER DEFAULT 0, --时间戳 单位秒
Des INTEGER, -- 暂时未知
ImgStatus INTEGER DEFAULT 0, --图片状态
MesLocalID INTEGER PRIMARY KEY AUTOINCREMENT, --本地消息ID
Message TEXT, --消息内容
MesSvrID INTEGER DEFAULT 0, --远程消息
Status INTEGER DEFAULT 0,--状态
TableVer INTEGER DEFAULT 1, --表版本
Type INTEGER --类型
)
CREATE TABLE ChatExt2_1a26fd6c1f0dac7cf220cd58c7e59574(
ConIntRes1 INTEGER DEFAULT 0,
ConIntRes2 INTEGER DEFAULT 0,
ConIntRes3 INTEGER DEFAULT 0,
ConStrRes1 TEXT,
ConStrRes2 TEXT,
ConStrRes3 TEXT,
MesLocalID INTEGER PRIMARY KEY,
msgFlag INTEGER DEFAULT 0,
MsgIdentify TEXT,
MsgSource TEXT
)
Coaco开发社区公众号推送的订阅消息记录
可以看出表中共16条记录。
iPhone端Cocoa开发者社区
现在我们来看看
ChatExt2_1a26fd6c1f0dac7cf220cd58c7e59574
表中最后一条记录的Message字段(时间戳1586429880转化时间:2020-04-09 18:58:00,大家可以参考下)。内容如下:
<msg>
<appmsg appid="" sdkver="0">
<title><![CDATA[大龄程序员再就业:美国州长急聘,精通上古语言COBOL,需尽快到岗]]></title>
<des><![CDATA[年纪大的程序员还能「下岗再就业」?]]></des>
<action></action>
<type>5</type>
<showtype>1</showtype>
<content><![CDATA[]]></content>
<contentattr>0</contentattr>
<url><![CDATA[http://mp.weixin.qq.com/s?__biz=MjM5OTM0MzIwMQ==&mid=2652567581&idx=1&sn=819937915388ab72be02b421c24a13be&chksm=bcd2bd138ba53405f80ac6b7411a99e6619cc78b61ca11019c26109af371e06285f7e3cf7f53&scene=0&xtrack=1#rd]]></url>
<lowurl><![CDATA[]]></lowurl>
<appattach>
<totallen>0</totallen>
<attachid></attachid>
<fileext></fileext>
</appattach>
<extinfo></extinfo>
<mmreader>
<category type="20" count="2">
<name><![CDATA[Cocoa开发者社区]]></name>
<topnew>
<cover><![CDATA[https://mmbiz.qpic.cn/mmbiz_jpg/foPACGrddJ0nvlzQTSC8GugiaDZIicmt3JRsttq6RoU02Y9lNricB37eU51gSWkJKVFBh1ibTgn3XyY1bMIpiaicfS2g/640?wxtype=jpeg&wxfrom=0]]></cover>
<width>0</width>
<height>0</height>
<digest><![CDATA[年纪大的程序员还能「下岗再就业」?]]></digest>
</topnew>
<item>
<itemshowtype>0</itemshowtype>
<title><![CDATA[大龄程序员再就业:美国州长急聘,精通上古语言COBOL,需尽快到岗]]></title>
<url><![CDATA[http://mp.weixin.qq.com/s?__biz=MjM5OTM0MzIwMQ==&mid=2652567581&idx=1&sn=819937915388ab72be02b421c24a13be&chksm=bcd2bd138ba53405f80ac6b7411a99e6619cc78b61ca11019c26109af371e06285f7e3cf7f53&scene=0&xtrack=1#rd]]></url>
<shorturl><![CDATA[]]></shorturl>
<longurl><![CDATA[]]></longurl>
<pub_time>1586429864</pub_time>
<cover><![CDATA[https://mmbiz.qpic.cn/mmbiz_jpg/foPACGrddJ0nvlzQTSC8GugiaDZIicmt3JRsttq6RoU02Y9lNricB37eU51gSWkJKVFBh1ibTgn3XyY1bMIpiaicfS2g/640?wxtype=jpeg&wxfrom=0]]></cover>
<tweetid></tweetid>
<digest><![CDATA[年纪大的程序员还能「下岗再就业」?]]></digest>
<fileid>505083919</fileid>
<sources>
<source>
<name><![CDATA[Cocoa开发者社区]]></name>
</source>
</sources>
<styles></styles>
<native_url></native_url>
<del_flag>0</del_flag>
<contentattr>0</contentattr>
<play_length>0</play_length>
<play_url><![CDATA[]]></play_url>
<player><![CDATA[]]></player>
<music_source>0</music_source>
<pic_num>0</pic_num>
<vid></vid>
<author><![CDATA[]]></author>
<recommendation><![CDATA[]]></recommendation>
<pic_urls></pic_urls>
<comment_topic_id>1289120887735762945</comment_topic_id>
<cover_235_1><![CDATA[]]></cover_235_1>
<cover_1_1><![CDATA[]]></cover_1_1>
<appmsg_like_type>2</appmsg_like_type>
<video_width>0</video_width>
<video_height>0</video_height>
<is_pay_subscribe>0</is_pay_subscribe>
</item>
<item>
<itemshowtype>0</itemshowtype>
<title><![CDATA[2020 年 4月全国程序员工资出炉!]]></title>
<url><![CDATA[http://mp.weixin.qq.com/s?__biz=MjM5OTM0MzIwMQ==&mid=2652567581&idx=2&sn=a8bcf6d82f58c521a883eb802a222eda&chksm=bcd2bd138ba53405d0909af724b6a74772041540a9e416e09dbc1309259d53e34cf4dfa5a2ab&scene=0&xtrack=1#rd]]></url>
<shorturl><![CDATA[]]></shorturl>
<longurl><![CDATA[]]></longurl>
<pub_time>1586429864</pub_time>
<cover><![CDATA[https://mmbiz.qpic.cn/mmbiz_jpg/foPACGrddJ0nvlzQTSC8GugiaDZIicmt3JTVI26SdPk9mSecV2AdZkN7CMmRC3nzBVvZjKrEtH1SnNIGGRiaArfYw/300?wxtype=jpeg&wxfrom=0]]></cover>
<tweetid></tweetid>
<digest><![CDATA[你拖后腿了吗?]]></digest>
<fileid>0</fileid>
<sources>
<source>
<name><![CDATA[Cocoa开发者社区]]></name>
</source>
</sources>
<styles></styles>
<native_url></native_url>
<del_flag>0</del_flag>
<contentattr>0</contentattr>
<play_length>0</play_length>
<play_url><![CDATA[]]></play_url>
<player><![CDATA[]]></player>
<music_source>0</music_source>
<pic_num>0</pic_num>
<vid></vid>
<author><![CDATA[]]></author>
<recommendation><![CDATA[]]></recommendation>
<pic_urls></pic_urls>
<comment_topic_id>1289120888473960448</comment_topic_id>
<cover_235_1><![CDATA[https://mmbiz.qpic.cn/mmbiz_jpg/foPACGrddJ0nvlzQTSC8GugiaDZIicmt3JTVI26SdPk9mSecV2AdZkN7CMmRC3nzBVvZjKrEtH1SnNIGGRiaArfYw/300?wxtype=jpeg&wxfrom=0]]></cover_235_1>
<cover_1_1><![CDATA[https://mmbiz.qpic.cn/mmbiz_jpg/foPACGrddJ0nvlzQTSC8GugiaDZIicmt3JTVI26SdPk9mSecV2AdZkN7CMmRC3nzBVvZjKrEtH1SnNIGGRiaArfYw/300?wxtype=jpeg&wxfrom=0]]></cover_1_1>
<appmsg_like_type>2</appmsg_like_type>
<video_width>0</video_width>
<video_height>0</video_height>
<is_pay_subscribe>0</is_pay_subscribe>
</item>
</category>
<publisher>
<username><![CDATA[gh_d9c2fdea6f2a]]></username>
<nickname><![CDATA[Cocoa开发者社区]]></nickname>
</publisher>
<template_header></template_header>
<template_detail></template_detail>
<forbid_forward>0</forbid_forward>
</mmreader>
<thumburl><![CDATA[https://mmbiz.qpic.cn/mmbiz_jpg/foPACGrddJ0nvlzQTSC8GugiaDZIicmt3JRsttq6RoU02Y9lNricB37eU51gSWkJKVFBh1ibTgn3XyY1bMIpiaicfS2g/640?wxtype=jpeg&wxfrom=0]]></thumburl>
</appmsg>
<fromusername><![CDATA[gh_d9c2fdea6f2a]]></fromusername>
<appinfo>
<version></version>
<appname><![CDATA[Cocoa开发者社区]]></appname>
<isforceupdate>1</isforceupdate>
</appinfo>
</msg>
剩下的工作就是解析这个XML数据了。这块的解析就暂时不贴出了,留给工友们自己摸索。
PS:在微信单个公众号页面,微信采取的数据加载方式是先加载三条最近的推送消息,每次下拉再加载两条,直至本地数据加载完毕。
下一篇我们来看看订阅号消息页面的数据存储。
不得不说,微信数据存储的思路还是很清晰,将复杂的事情拆分成多个简单的部分,值得借鉴。
网友评论