美文网首页
微信沙盒目录学习系列二:公众号数据存储

微信沙盒目录学习系列二:公众号数据存储

作者: iOS代码搬运工 | 来源:发表于2020-04-13 11:53 被阅读0次

    上一节我们说了如何导出微信沙盒目录,这一节我们来看看沙盒里面存储的公众号数据。

    恢复完成示意图
    这里我们主要来看看AppDomain-com.tencent.xin目录。数据库查看我们用 DB Browser for SQLite

    Documents目录

    如上图所示,我们可以看到有一个32个0组成的一个文件夹。下面紧接着也有一个32个字符串的文件夹。我猜想,这应该是每个用户的文件夹,用来存储当前用户的一些数据。经测验,命名方式目测是用唯一的微信号进行MD5值来进行。而当用户登录时,创建当前用户目录,并将初始文件夹内的资料复制到当前用户目录下。我们重点来看看当前用户目录下的资料。


    Documents目录

    我们来看看Brand目录下的BrandMsg.db,因数据库没有加密可以直接打开。这里一般存的是公众号相关的信息。

    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:在微信单个公众号页面,微信采取的数据加载方式是先加载三条最近的推送消息,每次下拉再加载两条,直至本地数据加载完毕。
    下一篇我们来看看订阅号消息页面的数据存储。
    不得不说,微信数据存储的思路还是很清晰,将复杂的事情拆分成多个简单的部分,值得借鉴。

    相关文章

      网友评论

          本文标题:微信沙盒目录学习系列二:公众号数据存储

          本文链接:https://www.haomeiwen.com/subject/lnxrmhtx.html