Skip to content

yuanguozheng/XiyouLibNodeExpress

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

XiyouLibNodeExpress

该API现已由小甲鱼维护,如有问题,请联系:[email protected]

基于Node.js Express框架的西邮图书馆REST API

• 公开URL: http://api.xiyoumobile.com/xiyoulibv2/

请根据下面的介绍获取数据或自行搭建服务器!

简单介绍

使用Node.js Express框架开发的西邮图书馆REST API,通过模拟网站登陆的形式抓取西邮图书馆Web页面并返回JSON或JSONP给访问者,目前仅支持获取用户借阅历史。

默认监听18000端口,部署前请使用 npm install 命令补全依赖包!

百度云挂上去没有作用,所以就没按照百度云上的要求来做。

API调用方式介绍

• JSON请求URL形式为: http://{hostname}:{port}/{api类别}/{api名}?{参数(可选)}

• JSONP请求URL形式为: http://{hostname}:{port}/{api类别}/{api名}?{参数(可选)}&callback={回调函数名},格式错误则会提示NOT_FOUND错误。

用户相关

• 二级路径: /user

• 支持方法: GET、POST

• 注: 用户相关API除login接口外,其他接口的访问需要附带login接口回传的session,否则返回错误信息。

1.登陆,API名:login

• 完整路径: http://{hostname}:{port}/user/login

• 必选参数: username(用户名),password(密码)

• 示例代码(C#):

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://127.0.0.1/user/login");

using (Stream stream = req.GetRequestStream())
{
    string paramstr = "username=S04111021&password=123";
    byte[] bin = Encoding.UTF8.GetBytes(paramstr);
    stream.write(bin, 0, bin.Length);
}

HttpWebResponse res = (HttpWebResponse)req.GetResponse();

string ResStr = "";

using (Stream stream = res.GetResponseStream())
{
    StreamReader reader = new StreamReader(stream);
    ResStr = reader.ReadToEnd();
}

• 返回格式为JSON,形式如下:

{
    "Result":true,
    "Detail":"JSESSIONID=9795BE0A70AFD7F99435CD129CFD5FDB; Path=/opac_two"
}

登陆成功则Result为true,Detail为登陆成功后的Session,再次请求时可能会用到,请注意保存(在使用此Session时请以session=JSESSIONID=9795BE0A70AFD7F99435CD129CFD5FDB;%20Path=/opac_two的形式传入),登陆失败Result则为false,Detail为失败信息。

2.用户信息,API名:info

• 完整路径: http://{hostname}:{port}/user/info

• 支持方法: GET、POST

• 必选参数: session(登陆成功后回传的Session)

• 返回格式为JSON,形式如下:

{
	"Result":true,  //标识请求是否成功
	"Detail":
	{
	    "ID":"xxxxxxxxx",  //学号
	    "Name":"xxxxxx",  //姓名
	    "From":"2011-09-02",  //有效期开始日期
	    "To":"2015-07-01",  //有效期结束日期
	    "ReaderType":"本科生",  //用户类别
	    "Department":"计科1101",  //行政单位
	    "Debt":0  //欠费金额
	}
}

3.用户借阅历史,API名:history

• 完整路径: http://{hostname}:{port}/user/history

• 支持方法: GET、POST

• 必选参数: session(登陆成功后回传的Session)

• 返回格式为JSON,形式如下:

{
	"Result":true,  //标识请求是否成功
	"Detail":
	[
		{
			"Title":"深入浅出Ext JS",  //书名
			"Barcode":"03455293",  //内部条形码
			"Type":"续借",  //操作类型,分为:借书、续借、还书
			"Date":"2014-06-23"  //操作日期
		},
		...
	]
}

4.用户当前借阅情况,API名:rent

• 完整路径: http://{hostname}:{port}/user/rent

• 支持方法: GET、POST

• 必选参数: session(登陆成功后回传的Session)

• 返回格式为JSON,形式如下:

{
	"Result":true,  //标识请求是否成功
	"Detail":
	[
		{
		    "Title":"编译原理解题与分析",  //书名
		    "Barcode":"01386243",  //图书馆内部条形码
		    "Department":"通信计算机库(长安校区)",  //所在分馆
		    "State":"本馆续借",  //当前状态
		    "Date":"20140722",  //应还日期
		    "CanRenew":false  //是否可续借
		    "Department_id":"05"  //书库ID号,用于续借
		    "Library_id":"A"  //分馆ID号,用于续借
		},
		...
	]
}

5.图书续借,API名:renew

• 完整路径: http://{hostname}:{port}/user/renew

• 支持方法: GET、POST

• 必选参数:

  1. session(登陆成功后回传的Session)
  2. barcode(查询续借的图书时所获取的图书馆内部条形码)
  3. department_id(查询续借的图书时所获取的书库ID号)
  4. library_id(查询续借的图书时所获取的分馆ID号)

• 返回格式为JSON,形式如下:

{
	"Result":true,  //标识请求是否成功
	"Detail":
	{
		"2014-08-20"  //新的还书日期
    }
}

6.图书收藏,API名:favorite

• 完整路径: http://{hostname}:{port}/user/favorite

• 支持方法: GET、POST

• 必选参数: session(登陆成功后回传的Session)

• 返回格式为JSON,形式如下:

{
	"Result":true,  //标识请求是否成功
	"Detail":
	[
		{
		    "Title":"21天学通Java",//书名
		    "Pub":"电子工业出版社",//出版社
		    "Sort":"TP312JA",//索书号
		    "Author":"庞永庆,庞丽娟,"//作者
		    "ISBN":"9787121078972",//条形码
		    "ID":"01h0019548"//图书馆内控制号
		},
	    ...
    ]
}

7.图书收藏(带图片),API名:favoriteWithImg

• 完整路径: http://{hostname}:{port}/user/favoriteWithImg

• 支持方法: GET、POST

• 必选参数: session(登陆成功后回传的Session)

• 返回格式为JSON,形式如下:

{
    "Result":true,  //标识请求是否成功
    "Detail":
    [
        {
            "Title":"21天学通Java",//书名
            "Pub":"电子工业出版社",//出版社
            "Sort":"TP312JA",//索书号
            "Author":"庞永庆,庞丽娟,"//作者
            "ISBN":"9787121078972",//条形码
            "ID":"01h0019548"//图书馆内控制号
            "Images"://图片来自豆瓣,可能为null
            {
                "small":"https://img2.doubanio.com/spic/s10307479.jpg",
                "large":"https://img2.doubanio.com/lpic/s10307479.jpg",
                "medium":"https://img2.doubanio.com/mpic/s10307479.jpg"
            }
        },
        ...
    ]
}

8.添加图书收藏,API名:addFav

• 完整路径: http://{hostname}:{port}/user/addFav

• 支持方法: GET、POST

• 必选参数:

  1. session(登陆成功后回传的Session)
  2. id(图书馆内控制号)

• 返回格式为字符串,说明如下:

  • ADDED_SUCCEED:收藏成功
  • ALREADY_IN_FAVORITE:已经收藏过了
  • ADDED_FAILED:收藏失败
  • USER_NOT_LOGIN:用户未登录(session过期)
  • PARAM_ERROR:参数错误,缺少参数

9.删除图书收藏,API名: delFav

• 完整路径: http://{hostname}:{port}/user/delFav

• 支持方法: GET、POST

• 必选参数:

  1. session(登陆成功后回传的Session)
  2. id(图书馆内控制号)
  3. username(用户名eg:S04111176)

• 返回格式为字符串,说明如下:

  • DELETED_SUCCEED:删除成功
  • DELETED_FAILED:删除失败
  • USER_NOT_LOGIN:用户未登录(session过期)
  • PARAM_ERROR:参数错误,缺少参数

10.修改密码,API名:modifyPassword

• 完整路径: http://{hostname}:{port}/user/modifyPassword

• 支持方法: POST、GET

• 必选参数:

  1. session (登陆成功后回传的Session)
  2. username (用户名eg:S04111176)
  3. password (当前密码)
  4. newpassword (新密码)
  5. repassword (确认新密码)

• 返回格式为字符串,说明如下:

  • MODIFY_SUCCEED: 修改成功
  • INVALID_PASSWORD:旧密码不正确或session不正确或未登录
  • UDIFFERENT_PASSWORD:新密码两次输入不一致
  • INVALID_ERROR: 其他错误
  • PARAM_ERROR:参数错误,缺少参数

新闻公告

• 二级路径: /news

• 注: 新闻公告接口全部可使用GET或POST方法,且不限制参数形式。

1.公告、新闻列表,API名:getList

• 完整路径: http://{hostname}:{port}/news/getList/{type}/{page}

• 必选参数: type(“news”(新闻)、“announce”(公告)供选,其他值则报错) page(所查询的公告页数,超出范围返回最后一页,最新为1,不填报错)

• 返回格式为JSON,形式如下:

{
    "Result":true,  //标识请求是否成功
    "Detail":
   	{
   	    "Type":"公告",  //当前请求的文章列表类别
   	    "CurrentPage":1,  //当前请求的页数
   	    "Pages":7,  //总共的页数
   	    "Amount":130,  //总数
   	    "Data":  //公告详情
   	    [
   	        {
   	            "ID":163,  //文章ID,用于获取文章详情
   	            "Title":"关于暑假期间我校图书馆电子资源访问方式的通知",  //标题
   	            "Date":"2014-07-07"  //发布日期
   	        },...
   	    ]
   	}
}

2.公告、新闻详情,API名:getDetail

• 完整路径: http://{hostname}:{port}/news/getDetail/{type}/{format}/{id}

• 必选参数: type(“news”(新闻)、“announce”(公告)供选,其他值则报错) format(“html”(正文使用HTML格式)、“text”(正文使用纯文本格式)供选,其他值则报错) id(从列表中获取到的新闻或公告的id)

• 返回格式为JSON,形式如下:

{
    "Result":true,  //标识请求是否成功
    "Detail":
    {
        "Title":"图书馆召开2014年度电子文献资源议标(询价)会",  //标题
        "Publisher":"图书馆",  //发布者
        "Date":"2014-6-25",  //发布日期
        "Passage":"<p><font>&#x3000;&#x3000;&#x4E3A;&#x4E86;&#x4E……"  //正文
    }
}

图书检索

• 二级路径: /book

• 注: 图书检索接口全部可使用GET或POST方法,但检索关键词中的特殊符号需要进行URL转义!

1.图书检索,API名:search

• 完整路径: http://{hostname}:{port}/book/search

• 必选参数: keyword(关键词,必须对特殊符号,如“#、%、$”等,进行URL转义处理,否则不被识别)

• 可选参数:

wordType(检索词类型,默认为1,即:所有题名,1-9供选,分别对应图书馆的9种检索词类型,即:所有题名、出版社、索书号、作者、标准号、主题词、图书条码、分类号、题名缩拼)

matchMethod(匹配方式,默认为qx,即:前向匹配,qx、mh、jq供选,即:前向匹配、模糊匹配、精确匹配)

recordType(资料类型,默认为all,即:全部,注:图书馆中“所有类型”不可用,供选值为:"all"、"01"、"02"、"03"、"04"、"11"、"12"、"13"、"14"、"c1"、"e1"、"s1"、"z1",对应:全部、中文图书、西文图书、日文图书、俄文图书、中文期刊、西文期刊、日文期刊、俄文期刊、中文报纸、西文报纸、数据库、年鉴)

size(每页返回的最大图书信息条数,默认为20)

page(设置请求的页数,默认为1,超出范围报错)

ordersc(排序顺序,默认为desc,供选:asc为顺序,desc为逆序)

orderby(排序依据,默认为pubdate_date,即:出版年,供选值:pubdate_date(出版年),title(题目),authors(责任者/作者),publisher(出版社),isn(标准号))

images (是否返回带封面图片的数据,0为不返回,1为返回,注:某些图书无图片,则返回null)

• 返回格式为JSON,形式如下:

{
    "Result":true,  //标识请求是否成功
    "Detail":
    {
        "Ammount":258,  //所查询到的图书信息总数
        "CurrentPage":1,  //当前页码
        "Pages":13,   //总页数
        "Size":20,   //本页图书信息数量
        "Keyword":"c#",  //检索关键词
        "RecordType":"全部",  //资料类型
        "KeywordType":"所有题名",   //检索词类别
        "MatchType":"前向匹配",   //匹配方式
        "OrderBy":"出版年",   //排序依据
        "OrderSc":"逆序",   //排序顺序
        "BookData":   //图书信息数组
        [
            {
                "ID":"01h0079766",   //图书馆内部控制号
                "Title":"C#5.0入门经典 = Sams teach yourself C# 5.0 in 24 hours ",   //书名,题目
                "Author":"多曼,刘琦,袁国忠,",   //责任者,作者
                "Pub":"人民邮电出版社",   //出版社
                "ISBN":"9787115344236",   //标准号
                "Year":2014,   //出版年
                "Sort":"TP312C/1431",  //图书馆索书号
                "Total":4,   //图书馆藏书数量
                "Available":2,   //可借阅数量
                "Images": {  // 封面图片(可能为null)
                    "small":"https://img3.doubanio.com/spic/s28002830.jpg",
                    "large":"https://img3.doubanio.com/lpic/s28002830.jpg",
                    "medium":"https://img3.doubanio.com/mpic/s28002830.jpg"
                }
            },……
        ]
    }
}

2.图书详情,API名:detail

• 完整路径: http://{hostname}:{port}/book/detail/id/{id} 或 http://{hostname}:{port}/book/detail/barcode/{barcode}

• 必选参数: id或barcode(控制号或条形码)

• 返回格式为JSON,形式如下:

{
    "Result":true,  //标识请求是否成功
    "Detail":
    {
    	"ID":"01h0080459",//所查图书的ID
        "ISBN":"9787115341440",  //所查图书的ISBN
        "SecondTitle":"Object oriented programming of C++",  //副标题
        "Pub":"北京  :人民邮电出版社 ,2014.2",  //出版信息
        "Tilte":"C + + 面向对象程序设计 Object oriented programming of C++",  //书名、主标题
        "Form":"245页  :图  ;26cm",  //载体形态
        "Author":"宋春花 4主编 吕进来 4主编 马建芬 4编著 程鹏 4编著 王幸民 4编著",   //作者
        "Sort":"TP312C++",  //中图分类号
        "Subject":"C语言  --程序设计",  //主题
        "RentTimes":2,  //借阅次数
        "FavTimes":0,   //收藏次数
        "BrowseTimes":1,   //浏览次数
        "Total":4,   //藏书数量
        "Avaliable":2,   //可借数量
        "CirculationInfo":   //流通信息数组
        [
            {
                "Barcode":"03451696",   //条形码
                "Sort":"TP312C++/521",   //索书号
                "Department":"通信计算机库(长安校区)",   //所在部门
                "Status":"本馆借出",   //状态
                "Date":"2014/07/21"   //应还日期,可借则为null
            },……
        ],
        "ReferBooks":   //相关图书信息数组
        [
            {
                "ID":"01h0077946",  //控制号
                "Title":"C++程序设计基础教程",   //书名
                "Author":"孙涛,"   //作者
            },
        ],
       "DoubanInfo":   //来自豆瓣的图书信息,若豆瓣数据库无该书信息则为null
        {
            "Rating":  //评分
            {
                "max":10,  //满分
                "numRaters":2,  //评分次数
                "average":"0.0",   //平均分
                "min":0   //最低分
            },
            "Author":  //作者
            [
                "Pedro Teixeria"
            ],
            "PubDate":"2013-12-1",  //出版日期
            "Binding":"平装",   //装订类型
            "Pages":"368",   //页数
            "Images":  //封面图片
            {
                "small":"http://img5.douban.com/spic/s27188987.jpg",  //小图
                "large":"http://img5.douban.com/lpic/s27188987.jpg",  //大图
                "medium":"http://img5.douban.com/mpic/s27188987.jpg"  //中图
            },
            "Publisher":"清华大学出版社",  //出版社
            "ISBN10":"7302344418",   //10位标准号
            "ISBN13":"9787302344414",   //13位标准号
            "Title":"Node.js高级编程",  //书名
            "Alt_Title":"Professional Node.js: Building JavaScript-Based Scalable Software",  //副标题
            "Author_Info":"Pedro Teixeria是一位高产的开源项目程序员………………",  //作者简介
            "Summary":"Node.js是一种主流框架……………………",   //图书简介
            "Price":"58.00"   //价格
        }
    }
}

3.排行榜,API名:rank

• 完整路径: http://{hostname}:{port}/book/rank

• 支持方法: GET、POST

• 可选参数: type(默认请求'1') size(默认最少为10,最大为100,超出或少于这个范围默认为10)

type字段说明:

'1':借阅排行榜

'2':检索排行榜

'3':收藏排行榜

'4':书评排行榜

'5':查看排行榜

• 返回格式为JSON,形式如下:

{
    "Result":true,
    "Detail":[
    {
    "Rank":"1",//排行
    "Title":" 复变函数全程学习指导与解题能力训练",//书名
    "Sort":"O174.5",//分类号
    "BorNum":"3576",//(借阅、检索、收藏、书评、查看)次数
    "ID":"0100044878"//图书馆内控制号
    }
    ……
    ]
}

注:

1.图书信息字段不固定,有可能会产生Summary(简介),或其他信息不完整情况!

2.建议使用id(控制号)查询图书,以barcode(条形码)查询速度较慢!

失败则在返回内容中,Result字段值为false,Detail字段为错误信息。

错误或无效信息

账号错误,密码错误或账户不存在:ACCOUNT_ERROR

用户未登陆:USER_NOT_LOGIN

无效的session:SESSION_INVALID

记录为空:NO_RECORD

远程服务器错误:REMOTE_SERVER_ERROR

参数错误:PARAM_ERROR

续借失败:RENEW_FAILED

超出范围:OUT_OF_RANGE