Chion82/WeChatMomentStat-Android

微信7.0后朋友圈图片获取方法,供参考

rarnu opened this issue · 5 comments

rarnu commented

首先还是解 snsinfo 里的 content,得到类似于以下的内容(仅截取了 mediaList 的部分)

<mediaList>
    <media>
        <id>
            <![CDATA[12974693252470280264]]>
        </id>
        <type>
            <![CDATA[2]]>
        </type>
        <title></title>
        <description>
            <![CDATA[666]]>
        </description>
        <private>
            <![CDATA[0]]>
        </private>
        <url type =  "1" >
            <![CDATA[http://shmmsns.qpic.cn/mmsns/7CdXdIPctJlHqSJDzRuX4UKeD5iaWHbNF1m2uZVdibib6nX0U0XpCWo9v3oz1x8dhYjQbAGmMrUVPc/0]]>
        </url>
        <thumb type =  "1" >
            <![CDATA[http://shmmsns.qpic.cn/mmsns/7CdXdIPctJlHqSJDzRuX4UKeD5iaWHbNF1m2uZVdibib6nX0U0XpCWo9v3oz1x8dhYjQbAGmMrUVPc/150]]>
        </thumb>
        <size width =  "1080.0"  height =  "2339.0" ></size>
    </media>
</mediaList>

只看 media.id,即 12974693252470280264 这一串数字,在 SD 卡的微信目录下搜索之

$ find . -name "*12974693252470280264"
./sns/b/0/snsu_12974693252470280264
./sns/b/0/snstblur_src_12974693252470280264
./sns/b/0/snst_12974693252470280264
./sns/b/0/snsb_12974693252470280264

看一下每个文件的类型:

$ find . -name "*12974693252470280264" | xargs file
./sns/b/0/snsu_12974693252470280264:         JPEG image data
./sns/b/0/snstblur_src_12974693252470280264: data
./sns/b/0/snst_12974693252470280264:         JPEG image data
./sns/b/0/snsb_12974693252470280264:         JPEG image data

只看 jpg 格式的图片,snsb 开头是大图,snsu 开头中等大小,snst 是微缩图

把 snsb 的图片拿出来就可以了的,不需要请求微信的服务器,也算是一种解决方案吧。

rarnu commented

我自己的项目也供参考,已经完成该项功能 Link

@rarnu 嗨,这个思路非常不错。但我不觉得微信本身会通过搜索来定位朋友圈的图片和视频,应该是有某种hash算法散列到了不同路径下找到这些资源的,具体的算法还不确定,有什么好头绪吗

首先还是解 snsinfo 里的 content,得到类似于以下的内容(仅截取了 mediaList 的部分)

<mediaList>
    <media>
        <id>
            <![CDATA[12974693252470280264]]>
        </id>
        <type>
            <![CDATA[2]]>
        </type>
        <title></title>
        <description>
            <![CDATA[666]]>
        </description>
        <private>
            <![CDATA[0]]>
        </private>
        <url type =  "1" >
            <![CDATA[http://shmmsns.qpic.cn/mmsns/7CdXdIPctJlHqSJDzRuX4UKeD5iaWHbNF1m2uZVdibib6nX0U0XpCWo9v3oz1x8dhYjQbAGmMrUVPc/0]]>
        </url>
        <thumb type =  "1" >
            <![CDATA[http://shmmsns.qpic.cn/mmsns/7CdXdIPctJlHqSJDzRuX4UKeD5iaWHbNF1m2uZVdibib6nX0U0XpCWo9v3oz1x8dhYjQbAGmMrUVPc/150]]>
        </thumb>
        <size width =  "1080.0"  height =  "2339.0" ></size>
    </media>
</mediaList>

只看 media.id,即 12974693252470280264 这一串数字,在 SD 卡的微信目录下搜索之

$ find . -name "*12974693252470280264"
./sns/b/0/snsu_12974693252470280264
./sns/b/0/snstblur_src_12974693252470280264
./sns/b/0/snst_12974693252470280264
./sns/b/0/snsb_12974693252470280264

看一下每个文件的类型:

$ find . -name "*12974693252470280264" | xargs file
./sns/b/0/snsu_12974693252470280264:         JPEG image data
./sns/b/0/snstblur_src_12974693252470280264: data
./sns/b/0/snst_12974693252470280264:         JPEG image data
./sns/b/0/snsb_12974693252470280264:         JPEG image data

只看 jpg 格式的图片,snsb 开头是大图,snsu 开头中等大小,snst 是微缩图

把 snsb 的图片拿出来就可以了的,不需要请求微信的服务器,也算是一种解决方案吧。

确实是可以解决了, 但是问题是好像 susb的大图需要点击加载过之后才会有,。。。

content里面的图片链接,无法通过浏览器打开吗?有没有办法通过某种方式从微信的服务器上访问获取到吗

看了下手机里缓存,snsu的是缩略图,然后snst是中等大小图