网易相册列表分析 (转)

网易相册以无限容量,速度快,资源丰富等特色深受网友喜爱,但是因为相册网站本身没有提供批量下载功能,使得批量保存自己喜欢的相片成为一个问题。
我是通过抓包和文件调用跟踪分析,来摸清网易相册的列表方式的。
值得注意的是,网易相册的相片地址列表并不是由服务器处理后再发过来的,而是通过脚本控制,服务器只是发个框架和一些控制脚本过来~~~
用 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=%D1%E9%D6%A4
如果密码正确,服务器返回一个 Cookie,其内容如下:
HALFORDER=41826293c391c246f4566b04807f05f8d
然后,再向服务器发送这段信息,以及要提取的相片列表,此时将返回那个加密相册的全部内容了,如果没有发送 Cookies ,那么取回的 JS 脚本,里面的数据段是空的。
以上验证过程,是通过 NetEaseAlbum 类的 Decrypt 函数来实现。
 
对于登陆,也需要使用到 Cookie ,过程如下。
先向服务器 POST 用户名和密码到:
http://reg.163.com/in.jsp?url=http://photo.163.com/myalbum.php
数据格式如下:
username= 用户名&password=密码&
如果用户名和密码正确,服务器返回四个 Cookie,其内容如下:
NTES_SEDD=(Hash 值)
NTTEASE_SSN= 用户名
NTTEASE_ADV=(Hash 值)
VRSJSSIONID=(Hash 值)
然后,再向服务器发送这段信息,以及要提取的相册目录列表,此时将返回全部相册的全部内容了,
以上登陆过程,是通过 NetEaseAlbum 类的 Login 函数来实现。
 
综合上面全部,我已经分析了网易相册的通讯协议,包括获取相册、相片信息,验证加密相册,登陆,已经地址分析。由此就可以完成 NetEaseAlbum 类以及其他子类的设计框架了。 
 转自: http://blog.csdn.net/HeTaoOS/archive/2007/03/02/1519291.aspx
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.无须数据库支持,直接处理服务器图片目录 <br>2.为大图片生成缩略图,并存放到专门的目录,提高相册预览图片的效率 <br>3.简化图片添加过程,直接上传图片到图片目录即可,相册自动获取、遍历新上传的图片,并生成缩略图 <br>4.增加多页跳功能 <br>5.简单易用,直接插入控件到你的页面,并进行相关设置即可使用 <br><br><br>PhotoAlbum 控件说明: <br>1.该控件在页面加载的时候,会搜索当前网站指定目录所有jpg格式的文件,在使用时需要指定原图片存放地址和生成的缩略图存放地址,需要添加到web.config文件中: <br><br>try <br>{ <br>smallfoldername = Server.MapPath(ConfigurationManager.AppSettings["SmallPath"]); <br>bigfoldername = Server.MapPath(ConfigurationManager.AppSettings["NormalPath"]); <br>} <br>catch <br>{ <br>smallfoldername = Server.MapPath("./Photo/SmallPics/"); <br>bigfoldername = Server.MapPath("./Photo/NormalPics/"); <br>} <br><br>如果获取用户配置路径失败,控件默认采用./Photo/SmallPics/ 和./Photo/NormalPics/ 两个目录 <br>NormalPics为用户上传原图片的地址,SmallPics为控件生成并存放缩略图的地址。 <br><br>2.控件在页面加载的时候,遍历原图地址,并逐个生成缩略图,存放到缩略图地址目录。第一次运行,会牺牲效率,当缩略图生成完毕后,运行速度大幅提高。 <br><br>3.生成缩略图,采用ImageThumbnail类的MakeThumbnail方法实现,缩略图的大小和生成方式,可以自行设置。可以分别按高、宽生成,不过图片可能会产生变形,也可以用CUT裁剪方式。 <br><br>4.相册处理图片文件,并把图片文件展现给前端浏览器。相册可视化部分,采用DataList控件实现。 <br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值