续借图书功能实现---图书馆客户端

在上一篇获取个人借阅信息---图书馆客户端已经得到了个人借阅的信息,图书馆对已经借阅的图书还提供了续借的功能。

实现续借功能也不复杂,在上一篇解析个人借阅信息时,添加两个字段即可。即修改getLendBookInfos(String lendInfoHtml)方法。

代码:

/**
	 * 获取借阅的数目信息
	 *
	 * @param lendInfoHtml
	 *            借阅信息详情html
	 * @return 借阅信息列表
	 */
	public static List<LendBookInfo> getLendBookInfos(String lendInfoHtml) {

		List<LendBookInfo> lendBookInfos = new ArrayList<>();
		Document document = Jsoup.parse(lendInfoHtml);
		Element table = document.getElementsByClass("patFunc").get(0);// 表格
		Elements items = table.getElementsByClass("patFuncEntry");// 数目信息集合
		for (Element item : items) {

			LendBookInfo bookInfo = null;

			Element ele_mark = item.getElementsByClass("patFuncMark").get(0);// 单选框
			Element ele_input = ele_mark.child(0);
			// 续借的实现依赖一下两个字段
			String markName = ele_input.attr("id");// eg:renow1
			String markValue = ele_input.attr("value");// eg:i4230433

			Element ele_title = item.getElementsByClass("patFuncTitle").get(0);// 题名
			String bookDetail = ele_title.child(0).text();

			Element ele_barCode = item.getElementsByClass("patFuncBarcode")
					.get(0);// 条形码
			String barCode = ele_barCode.text();

			Element ele_status = item.getElementsByClass("patFuncStatus")
					.get(0);// 状态
			String status = ele_status.text();

			Element ele_callNumber = item.getElementsByClass("patFuncCallNo")
					.get(0);// 索书号
			String callNumber = ele_callNumber.text();

			bookInfo = new LendBookInfo(bookDetail, callNumber, status,
					barCode, markName, markValue);
			lendBookInfos.add(bookInfo);
		}
		return lendBookInfos;

	}

接着,点击续借,就是又发送了一次post请求,请求体:

此次请求没有真正的执行续借,而是提示你是否确定要续借。

点击是,查看真正的请求,请求体:

响应结果为:

下面进行编码,模拟post请求,只需模拟真正实现续借的那次请求即可(renewsome : 是),代码:

	/**
	 * 续借图书的post请求.(同样必须在login()调用之后)
	 *
	 * @param lendBookInfo
	 *            要续借的图书条目
	 *
	 * @return 借阅图书信息的html
	 */
	public static String renewBook(LendBookInfo lendBookInfo) {

		String renewBookHtml = null;
		String renew_key = lendBookInfo.getMarkName();
		String renew_value = lendBookInfo.getMarkValue();

		HttpPost httpPost = null;
		String tem_location = location.substring(0, location.lastIndexOf("/"));
		try {

			httpPost = new HttpPost(baseUrl + tem_location + "/items");// 续借图书的URL
			List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
			nameValuePairs.add(new BasicNameValuePair("currentsortorder",
					"current_checkout"));
			nameValuePairs.add(new BasicNameValuePair("currentsortorder",
					"current_checkout"));
			nameValuePairs.add(new BasicNameValuePair(renew_key, renew_value));
			// nameValuePairs.add(new BasicNameValuePair("requestRenewSome",
			// "续借所选馆藏"));
			nameValuePairs.add(new BasicNameValuePair("renewsome", "是"));
			httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
			response = httpclient.execute(httpPost);// 发送post请求
			int code = response.getStatusLine().getStatusCode();
			System.out
					.println("---------------renewbook------------------------");
			System.out.println(response.getStatusLine());
			if (code == 200) {

				if (response != null) {
					renewBookHtml = EntityUtils.toString(response.getEntity(),
							HTTP.UTF_8);
					// System.out.println(renewBookHtml);
					return renewBookHtml;
				}
			}

		} catch (Exception e) {

		} finally {
			httpPost.abort();
		}
		return "";

	}

这样便得到了续借请求之后的个人借阅信息页面html。之后便可以对此html解析,得到续借后的状态,如:太快办理续借

说明

续借图书的流程为:

点击某一书目的续借按钮,调用renewBook(LendBookInfo lendBookInfo)方法,得到post请求后的(借阅图书信息的html),对此html进行再次解析,调用List<LendBookInfo>getLendBookInfos(String lendInfoHtml),得到新的图书借阅信息。此时的状态中便发生了相应改变。

测试:

public static void main(String[] args) {

		boolean isConn = LibraryUtil.login(stuNo, password);

		/**
		 * 若登陆成功则将信息保存到数据库(学号、密码需要加密)。
		 */
		if (isConn) {
			String resultHtml = LibraryUtil.getResultHtml();
			UserInfo userInfo = UserInfoHandler.getUserInfo(resultHtml);
			userInfo.setStuNo(stuNo);
			userInfo.setPassword(password);
			System.out.println("========");
			System.out.println(userInfo.toString());

			String lendInfoHtml = LibraryUtil.getCurLendInfo();
			List<LendBookInfo> lendBookInfos = UserInfoHandler
					.getLendBookInfos(lendInfoHtml);
			for (LendBookInfo bookInfo : lendBookInfos) {
				System.out.println(bookInfo);
			}
			//借阅列表的第一本
			LendBookInfo lendBookInfo1 = lendBookInfos.get(0);
			//续借第一本
			String bookinfo = LibraryUtil.renewBook(lendBookInfo1);
			// lendInfoHtml = LibraryUtil.getCurLendInfo();
			//再次解析html,得到 新的借阅信息列表
			lendBookInfos = UserInfoHandler.getLendBookInfos(bookinfo);
			for (LendBookInfo bookInfo : lendBookInfos) {
				System.out.println(bookInfo);
			}
		}
	}

如此便实现了续借功能。。。

时间: 2024-10-08 14:49:12

续借图书功能实现---图书馆客户端的相关文章

图书检索功能实现---图书馆客户端

今天完成了图书的检索功能.相对来说,还是有点复杂,因为图书检索结果页面的Html并不是那么规范,解析时需要很大的耐心. 首先需要根据查询条件获取结果的HTML,查询条件可以有很多种,这里为了实用.方便,我特意限制了查询条件为:keyword.东校区.可借出 获取结果HTML的方法如下: /** * 根据关键字检索图书 * * 检索可以是没有登录的情况,也可以是登录后的情况. 目前是声明了一个新的HTTPclient,即不需要登录, * 如果想设置为在登陆后才可以检索,则需要使用全局的HTTPcl

jQuery Validate【为表单提供了强大的验证功能,让客户端表单验证变得更简单】

jQuery Validate jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API.所有的捆绑方法默认使用英语作为错误信息,且已翻译成其他 37 种语言. 该插件是由 J?rn Zaefferer 编写和维护的,他是 jQuery 团队的一名成员,是 jQuery UI 团队的主要开发人员,是 QUn

在线图书API接口-图书馆API数据接口

生活图书馆 http://book.yi18.net 专门收集健康.生活.医药.医学等相关的健康生在线图书馆! 同时网站也开发的相应的API接口,提供给APP爱好者免费调用与开发. API文档地址:http://doc.yi18.net/bookapidoc . 更多的API更新请关注:http://open.yi18.net/apidoc    个人开放平台,,求支持 数据接口简介(详情API地址http://doc.yi18.net/bookapidoc ): 1.取得图书分类 http:/

apache的优化-日志轮询、错误页面重定向、压缩功能deflate、客户端缓存expire

1.apache日志轮询 1.1)什么是日志轮询 默认情况下apache的日志是写入到一个文件中的,这对日志的备份和分析造成不便.日志轮询就是可以把apache的日志根据时间进行分开,例如按天轮询:即apache会把当天的日志写入到一个独立的文件中. 1.2)下载并安装日志轮询工具 wget http://cronolog.org/download/cronolog-1.6.2.tar.gz tarzxf cronolog-1.6.2.tar.gz  cdcronolog-1.6.2 ./con

java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并

实现效果图: eclipse项目中初步整合之前的各个客户端和服务端的窗口与工具类,效果如下图: 已将注册服务器线程RegServer功能放到LoginServer中,使用客户端与服务端的request请求机制,根据请求是注册还是登录,分别进行相应response,客户端根据相应内容判断下一步操作. 发送信息的模式还较为原始,没有使用json方法,但gson包已经导入,支持发送键值对的字符串,及自动解析. 登录对话框LoginDialog类代码如下: package com.swift.frame

利用jsoup解析个人信息----图书馆客户端

上一篇HTTPclient模拟登陆交大图书馆解决了登陆,登陆之后便可以查看个人信息.个人信息条目较少,如图: 主要就是:姓名.电话.目前借书.积欠金额. 查看其html代码: 下面开始进行解析: 代码 package com.ali.login.spider; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import com.ali.login.bean.Us

unity_小功能实现(客户端相互通信功能)

服务器端:在VS中新建项目,用于服务器的搭建 using System;using System.Collections.Generic;     using System.Net.Sockets;using System.Net;using System.Text;using System.Threading; namespace Chat_Server {      class Client    {        private Socket clientSocket;        pr

关于Symantec Endpoint Protection Manager使用“远程推式”功能部署SEP客户端

平院微信图书馆——中转图书查询

2014年做一个微信公众平台--平院小助手(pdsuhelp),想做一款产品,推广平台,于是便做了这个平院微信图书馆,托管于BAE(项目地址:pdsuhelp.duapp.com/lt),目前只能提供查询功能,至于续借等功能,以后看情况添加! 项目工作流程: 1.获取图书馆查询图书地址,通过get传参,替换word的参数 2.抓取图书列表页内容,并显示,抓取每本图书详情页面超链接,并加上a 标签 ,目前只能抓取第一页 3:点击进入图书详情页面,抓取主要信息,书名,书放的位置. 主要技术: 1:;