网易相册列表分析

    技术2022-05-11  70

     网易相册以无限容量,速度快,资源丰富等特色深受网友喜爱,但是因为相册网站本身没有提供批量下载功能,使得批量保存自己喜欢的相片成为一个问题。 我是通过抓包和文件调用跟踪分析,来摸清网易相册的列表方式的。 值得注意的是,网易相册的相片地址列表并不是由服务器处理后再发过来的,而是通过脚本控制,服务器只是发个框架和一些控制脚本过来~~~ 用 FireFox 2.0 + JSView 浏览茜茜的网易相册 http://photo.163.com/photos/docrack/ 再单击 JSView 的任务栏图标,发现以下JS 列表: ²         albumsinfo.php?user=docrack ²         browser.js ²         global.consts.js ²         global.urls.js ²         global.utils.js ²         paginate.js ²         pholders.consts.js ²         pholders.html.js ²         pholders.js ²         pholders.utils.js ²         utils.js ²         photo_ad.js ²         v51,js 在这个 JS 脚本列表中,带参数那个最可疑,那就先打开他来看看:albumsinfo.php?user=docrack内容如下: var hasAlbum = true; var hasCover = true; var gAlbumsInfo = {}; var gAlbumsIds = [106175945,106179880]; var datas = [["705.2449719279.1.450x600",1,9," 我喜欢的... ","这可是我喜欢的.."] ,["0.0.0.130x98",2,31," 也是我喜欢的... ","也是我喜欢的图片哦... "]]; for(var i=0; i<gAlbumsIds.length; i++){  gAlbumsInfo[gAlbumsIds[i]] = datas[i]; } datas = null;   很好,和预想中的一样,这文件中包含有相册目录的整体信息,我分析得到: ²        粗体部分是相册目录的 ID,一共有两个, ²        斜体部分,是第一个目录的介绍信息 ~~~ 现在解析一下目录介绍信息: ²        //封面 ²        705                  封面相片所在服务器 SID ²        2449719279           封面相片 ID,如果为空,就表示是加密相册 ²        1                    封面相片相片后缀名类型, 1,jpg;2,gif,如果为空,就表示是加密相册 ²        450x600              封面相片原始图片尺寸,如果为空,就表示是加密相册   ²        //简介 ²        1                    相册权限, 0 私有;1,公开;2,加密 ²        9                    相册中相片总数 ²        我喜欢的 ..          相册名称 ²        这可是我喜欢的 ..    相册简介   就是通过本地脚本来获取服务器上相册信息的。打开 global.consts.js 相面这句话,一看就知道: var PHOTO_SERVER_DOMAIN = "http://img%SID%.photo.163.com"; 上面的 705 就是其中的 SID ,即服务器序号。 从上面综合,从 http://photo.163.com/js/albumsinfo.php?user= 用户名 就能获取指定用户的相册信息 ~~~   由此,在程序的设计时,只有使用一个网络通讯函数向远程服务器请求 “ http://photo.163.com/js/albumsinfo.php?user=用户名”就能获取获取当前用户的相册目录信息了,这就有 NetEaseAlbum 类的 GetAlbums 来控制获取,由GetDate 来完成网络操作;再有 Imports 函数来解析相册目录列表信息。就可以完成相册目录列表的获取了。具体看下面的 NetEaseAlbum 类介绍。 点入第一个没有加密的相册,也就是 ID 为 106175945 的相册,这回查看到的 JS 脚本更多了,但还是带参数那个有意思。 photosinfo.php?user=docrack&aid=106175945 明显, user 后面跟用户名 aid 后面跟相册 ID 打开看看: var hasPhoto = true; var hasCover = true; var hasPermission = true;   var gAlbumInfo = {'cover':"705.2449719279.1.450x600",'privacy':1,'title':" 我喜欢的... ",'descr':"这可是我喜欢的.. "} ;   var gPhotosInfo = {}; var gPhotosIds = [2449722584,2449722395,2449721659,2449721495,2449721208,2449720964, 2449719654,2449719514,2449719279]; var datas = [[705,1,"470x326","BB_1 "],[705,1,"450x600","BB_2 "],[705,1,"425x562","BB_3 "],[705,1,"404x579","BB_4 "],[705,1,"404x539","BB_5 "],[705,1,"640x640","AA_1 "],[705,1, "400x533","AA_2 "],[705,1,"450x600","AA_3 "],[705,1,"450x600","AA_4 "]]; for(var i=0; i<gPhotosIds.length; i++){  gPhotosInfo[gPhotosIds[i]] = datas[i]; } datas = null; 我的分析如下: ²        粗体部分就是说包含的全部相片的 ID 了。 ²        斜体部分就是一张相片的介绍信息 现在解析一下一张相片的介绍信息: ²        705                 相片所在服务器 SID ²        1                    封面相片相片后缀名类型, 1,jpg;2,gif ²        470x326              原始图片尺寸 ²        BB_1                 相片标题   从上面综合,从 http://photo.163.com/js/photosinfo.php?user= 用户名&aid=相册ID 就能获取指定用户的指定相册内的相片信。   由此,在程序的设计时,只有使用一个网络通讯函数向远程服务器请求 “ http://photo.163.com/js/photosinfo.php?user=用户名&aid=相册ID”就能获取获取当前用户的指定相册内的相片信息了,这就有 NetEaseAlbum 类的 GetAlbums 来控制获取,由GetDate 来完成网络操作;再有 AlbumsInfo 类的Imports 函数来解析相册内的相片信息。就可以完成相册内的相片信息的获取了。具体看下面的 NetEaseAlbum 类介绍。   获取了信息,该入和整合成相片的具体下载链接? 打开第一张相片,查看它的链接 http://img705.photo.163.com/docrack/106175945/2449722584.jpg 看看就明白了, 相片真实地址格式如下: http://imgSID.photo.163.com/ 用户名/相册ID/图片ID.jpg 相片缩略图地址格式如下: http://imgSID.photo.163.com/ 用户名/相册ID/__scale__1_图片ID.jpg 知道这些,就可以使用 PhotosInfo 类中的 BuildURL 来重建相片真实地址和相片缩略图地址了。   一下内容是通过使用 WSockExper 抓包分析得的。   对于加密的相册,有点麻烦,大概如下: 先向服务器 POST 密码到: http://photo.163.com/photos/用户名 /相册ID/ 数据格式如下: checking=1&pass= 密码&submit=
    转载请注明原文地址: https://ibbs.8miu.com/read-31920.html

    最新回复(0)